php 为什么自动加载能等同于上面的一群require?

2025-06-20 13:56:55
推荐回答(2个)
回答1:

凉良说得对。用autoload
用法相当简单,唯一的条件你的class名字必须跟目录名对称。
可以看例子
如果log.php在class的目录里面,里面的class名就应该这样取: class_log
class class_log { }
?>

之后呢就在要include的地方加上这个function
可以看例子

function __autoload($class) {
$path_array = explode('_', $class); ///把class和log分开成array

$path = implode(DIRECTORY_SEPARATOR, $path_array); /// 把array用/重新连在一起

include $path.'.php'; 最后直接include就行了。

}

$log = new class_log();
?>

根据这个方法应该行得通。

回答2:

autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。  
通常PHP5在使用一个类时,假如发现这个类没有加载,就会自动运行__autoload()函数,在这个函数中我们可以加载需要使用的类。
使用autoload机制时,很多人的第一反应就是使用autoload会降低系统效率,甚至有人干脆提议为了效率不要使用autoload。在了解了autoload实现的原理后,我们知道autoload机制本身并不是影响系统效率的原因,甚至它还有可能进步系统效率,由于它不会将不需要的类加载到系统中()。
  很多人都有一个使用autoload会降低系统效率的印象是因为。。实际上,影响autoload机制效率本身恰正是用户设计的自动加载函数。假如它不能高效的将类名与实际的磁盘文件(留意,这里指实际的磁盘文件,而不仅仅是文件名)对应起来,系统将不得不做大量的文件是否存在(需要在每个include path中包含的路径中往寻找)的判定,而判定文件是否存在需要做磁盘I/O操纵,众所周知磁盘I/O操纵的效率很低,因此这才是使得autoload机制效率降低的罪魁罪魁!
  因此,在系统设计时,需要定义一套清楚的将类名与实际磁盘文件映射的机制。这个规则越简单越明确,autoload机制的效率就越高。

  结论:autoload机制并不是自然的效率低下,只有滥用autoload,设计不好的自动装载函数才会导致其效率的降低。