像
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();
}
}
}
文件是否应包含在条件检查中,并且不是所有时间?
答案 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()
函数。
答案 2 :(得分:0)
它应该影响的唯一性能是解析它的时间,但我认为这比隐藏在文件中间的复杂包含逻辑更受欢迎。更不用说如果你把if放在if语句中,就好像你在if语句中插入了那个文件的文本,这是不对的(也可能不行)。
有人能告诉我你是否可以在function / if语句中声明一个类?
答案 3 :(得分:0)
无论何时使用include或require,PHP基本上都是将required
文件中的代码复制/粘贴到您的代码中。所以不管你把它放在哪里,PHP仍然打开文件,读取它并将其放入那里,它不会受到if块的影响。换句话说,在代码实际运行之前解析require,所以是的,即使require被放入if块而且从不运行,你也会受到(非常小的)性能影响。请记住,这是一个非常小的影响。最后,如果你担心它,我会使用require_once
- 这可以确保这种解析不会发生两次,例如,如果第二个required
文件requires
第一个文件,这个冗余赢了这相当于第二次表现。