PHP - defining classes inside a function

后端 未结 5 1100
清歌不尽
清歌不尽 2021-01-12 00:04

Is this a bad practice?

like:

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

?

相关标签:
5条回答
  • 2021-01-12 00:09

    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.

    0 讨论(0)
  • 2021-01-12 00:19

    I would avoid it.

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

    0 讨论(0)
  • 2021-01-12 00:25

    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.

    0 讨论(0)
  • 2021-01-12 00:28

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

    0 讨论(0)
  • 2021-01-12 00:28

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

    0 讨论(0)
提交回复
热议问题