【问题标题】:PHP - defining classes inside a functionPHP - 在函数中定义类
【发布时间】:2011-06-20 21:47:22
【问题描述】:

这是一种不好的做法吗?

喜欢:

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

?

【问题讨论】:

  • #2619573的可能重复
  • 我认为实际上是this的复制

标签: php oop class function


【解决方案1】:

我会避免的。

这不是其他开发人员所期望的,因此会降低代码的可维护性。

【讨论】:

  • “这不是其他开发人员所期望的”,除非其他开发人员当然也在做同样的事情......
  • @zzzzBov:当然,我的意思是“普通”开发人员。非标准做法是不好的做法,IMO。
  • 我在某些层面上同意您所说的,但重要的是区分您所说的哪个标准。没有官方标准,只有其他程序员过去编写代码的方式。最接近官方标准的是编码规范和语法,这是有原因的。
  • 没错 - 我不是在谈论“官方标准”,而是更多“最常见的做法”。话虽如此,我在回答中从未提到“标准”是有原因的;)
  • @zzzzBov:我认为这类似于为什么我会说在没有充分理由的情况下使用其中任何一种都是不好的做法:stackoverflow.com/questions/1995113/strangest-language-feature
【解决方案2】:

这就是类加载器的工作方式。这不一定是坏习惯。

取决于函数的作用以及您这样做的原因。使用autoloading 可能更合适。

【讨论】:

    【解决方案3】:

    如果你有理由这样做,我认为这没有什么不好。

    【讨论】:

      【解决方案4】:

      这通常是一种不好的做法,应该避免。您或许应该考虑改用autoloader

      【讨论】:

      • 是的,但自动加载器没有相同的可读性/可维护性问题。
      【解决方案5】:

      是的这是不好的做法; 不是。

      您很可能会得到两个答案,原因如下:

      如果您使用__autoload(或等效项),请调用:

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

      相当于:

      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();
      }
      

      但如果您避免使用__autoload,您的代码将获得更好的性能。为了维护您的代码,最好将所有 includes 放在脚本的顶部,就像在其他语言中的 import 语句一样。

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

      我建议保持一致性。如果你一直在函数中调用include,你应该不会有太多问题,但我会选择在文件开头导入,或者作为autoloads

      【讨论】:

      • 如果UndefinedClassName.php 中的其他声明在函数定义中使用时在语法上是非法的怎么办?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2011-12-27
      相关资源
      最近更新 更多