包含您不使用的类对性能有影响吗?

时间:2011-09-08 17:16:28

标签: php class

require "class.a.php";
require "class.b.php";
require "class.c.php";

class main{
 function main(){
   if(condition_is_met(){
      $this->something = new A();
   }else{
      $this->something = new B();
   }
 } 

}

文件是否应包含在条件检查中,并且不是所有时间?

4 个答案:

答案 0 :(得分:1)

PHP必须打开文件并对其进行解析才能产生一些影响。对于一些文件,我不担心它,但随着文件的增加,它可能会失控。这就是自动加载的原因,它允许您仅在需要时加载类文件,而不需要在文件顶部添加一长串需求:

http://php.net/manual/en/language.oop5.autoload.php

另请查看spl_autoload_register

http://www.php.net/manual/en/function.spl-autoload-register.php

答案 1 :(得分:1)

问题不明确。在当前的代码中,我认为所有文件都将被包含在内,无论你是否使用(声明这些类的变量)。如果你不想加载你不会使用的类,你可以使用__autoload()函数。

http://php.net/manual/en/language.oop5.autoload.php

答案 2 :(得分:0)

它应该影响的唯一性能是解析它的时间,但我认为这比隐藏在文件中间的复杂包含逻辑更受欢迎。更不用说如果你把if放在if语句中,就好像你在if语句中插入了那个文件的文本,这是不对的(也可能不行)。

有人能告诉我你是否可以在function / if语句中声明一个类?

答案 3 :(得分:0)

无论何时使用include或require,PHP基本上都是将required文件中的代码复制/粘贴到您的代码中。所以不管你把它放在哪里,PHP仍然打开文件,读取它并将其放入那里,它不会受到if块的影响。换句话说,在代码实际运行之前解析require,所以是的,即使require被放入if块而且从不运行,你也会受到(非常小的)性能影响。请记住,这是一个非常小的影响。最后,如果你担心它,我会使用require_once - 这可以确保这种解析不会发生两次,例如,如果第二个required文件requires第一个文件,这个冗余赢了这相当于第二次表现。