12

Is this a bad practice?

like:

function boo(){
  require_once("class.moo.php");
}
...

?

Alex
  • 66,732
  • 177
  • 439
  • 641
  • Possible duplicate of [#2619573](http://stackoverflow.com/questions/2619573/how-to-use-include-within-a-function) – drudge Feb 03 '11 at 19:18
  • I think it's a dup of [this](http://stackoverflow.com/questions/1669707/should-require-once-some-file-php-appear-anywhere-but-the-top-of-the-file) actually – greatwolf Feb 03 '11 at 19:26

5 Answers5

9

Yes it is bad practice; no it's not.

You're likely going to get both answers, and here's why:

If you use __autoload (or equivalent), calling:

function someFunc()
{
  $n = new UndefinedClassName();
}

is equivalent to:

function someFunc()
{
  include('path/to/UndefinedClassName.php');
  //may be require_once, include_once, include, or require
  //depending on how autoload is written
  $n = new UndefinedClassName();
}

But you'll get better performance out of your code if you avoid using __autoload. And to maintain your code, it's better to put all your includes at the top of the script like you would for import statements in other languages.

include('path/to/UndefinedClassName.php');
...code...
function someFunc()
{
  $n = new UndefinedClassName();
}

I would suggest consistency. If you consistently call the include in the functions, you shouldn't have too many issues, but I would choose imports at the beginnings of files, or as autoloads.

zzzzBov
  • 174,988
  • 54
  • 320
  • 367
  • 1
    What if there are other declarations inside `UndefinedClassName.php` that are syntactically illegal when used inside a function definition? – Dai Dec 09 '18 at 06:56
5

I would avoid it.

It is not what another developer would expect, and, as such, would reduce the maintainability of your code.

Reed Copsey
  • 554,122
  • 78
  • 1,158
  • 1,373
  • 3
    "it's not what another developer would expect" unless of course the other developer is doing the same thing... – zzzzBov Feb 03 '11 at 19:23
  • @zzzzBov: Well, I mean a "normal" developer, of course. Non-standard practices are bad practices, IMO. – Reed Copsey Feb 03 '11 at 19:25
  • 1
    i agree with what you're saying on some levels, but it's important to distinguish *which* standard you're talking about. There isn't an *official* standard, there is only the way other programmers have written code in the past. The closest thing to an *official* standard is the coding specification and syntax, which is liberal for a reason. – zzzzBov Feb 03 '11 at 19:28
  • True - I'm not talking about an "official standard", but more of a "most common practice". That being said, I never mentioned a "standard" in my answer for a reason ;) – Reed Copsey Feb 03 '11 at 19:31
  • @zzzzBov: I'd see it as similar to why I would say it's bad practice to use any of these without very good reason: http://stackoverflow.com/questions/1995113/strangest-language-feature – Reed Copsey Feb 03 '11 at 19:32
1

This is how class loaders work. This is not necessarily bad practice.

Depends on what the function does and why you are doing this. Using autoloading may be more appropriate.

Arnaud Le Blanc
  • 98,321
  • 23
  • 206
  • 194
1

This is generally a bad practice and should be avoided. You should probably consider using an autoloader instead.

keithjgrant
  • 12,421
  • 6
  • 54
  • 88
0

If you have reasons for this I don't see anything bad about it.

Jan
  • 2,295
  • 1
  • 17
  • 16