使用spl_autoload_register在运行时加载类将导致性能不佳?

时间:2013-07-02 22:48:50

标签: php

好吧,如果我这样做:

boot.php:

function boot($c) { require 'mods/'.$c.'.php'; }
spl_autoload_register('boot');

的index.php

require 'boot.php';

class Father {
function __construct()
{
/* get all modules in database then loop it like: */
foreach($mods as $v) eval('$cmod = new '.$v.'()');
}
}
new Father();

课程模块的示例:

class mod01 extends Father {

function __construct() { //code }

}

我想知道使用eval是好还是坏点,我正在使用它因为我不知道它将来自db的mod的名称。

2 个答案:

答案 0 :(得分:3)

您不需要eval()。 (如果没有必要,就不要使用它)

foreach($mods as $v)
    $cmod = new $v();

也适用。

答案 1 :(得分:0)

你可以这样做,但仍然可以访问新创建的类。

$classes = array() ;
foreach($mods as $v){
  $classes[] = new $v(); //Whats the point of rewriting $cmod?
}

您只需在每次迭代中重写对象的引用,因此将引用存储在数组中。