类自动载入 Class Autoloading
一般来说,当你在PHP中要用一个类来创建一个对象的时候,你需要首先包含这个类的定义。
[php]
include 'classes/MyClass.php';
$myObject = new MyClass();
但是大的项目包含了很深的目录结构,包含所有这些文件还有路径很浪费时间。由于有__autoload()函数(或者spl_autoload_register()函数),symfony使得我们不需要写包含语句,你可以直接这么写:
[php]
$myObject = new MyClass();
symfony会在项目的lib目录里的所有php文件里寻找MyClass的定义。如果找到,就自动包含它。
所以你可以把所有的类放在lib目录,你再也不必包含他们。所以symfony项目通常没有include或者require语句。
NOTE 为了提高效率,第一次symfony自动在一个目录列表(在配置文件里面定义)里寻找。然后symfony把这些目录里的所有类和文件的关联存放在一个PHP数组里。这样,以后的自动载入就不需要扫描整个目录了。所以你每次在项目里面增加一个类都需要通过symfony clear-cache命令清空symfony缓存。缓存详见第12章,自动载入配置文件详见第19章。