: 想请问使用autoload把所有的class都自动加载进来,使用上非常方便,
: 但是这样如果我这支程式只会使用到某一个class,但是实际上是全部都加载了。
我是没听过 autoload 有一次把所有 class 全部加载的功能
反倒是用到的时候才加载
假设我有个 library 放在 lib/Hello.php
内容如下:
<?php
echo 'class loaded'; // 档案一被加载就会印出字串
class Hello {}
然后我们先用 require 的方式来加载 library 看看会怎样
<?php
require __DIR__ . '/lib/Hello.php'; // 显示 'class loaded'
// 做点别的事
$a = 1 + 2 + 3;
$o = new Hello();
在 require 那一行就会看到 Hello.php 已经被读取并执行到 echo 那行
再来改用 spl_autoload_register() 来实作 autoload 规则:
<?php
spl_autoload_register(function($className) {
require __DIR__ . '/lib/' . $className . '.php';
});
// 在 new Hello() 之前作点别的事
$a = 1 + 2 + 3;
$o = new Hello(); // 显示 'class loaded'
如果使用 autoload 的话
PHP 不会一次把所有的档案都加载
而是在需要使用的时候去检查档案是否已经加载
没有的话再去加载
也就是为什么第二个范例使用 autoload 的时候
会在 new 那行才看到 'class loaded'
不知道是不是你要的答案
希望有帮上忙