类的自动加载

目录

基础介绍

自动加载, 允许你在使用是自动的加载类文件时, 不需要使用requiring或者including进行明确的引用. 所以, 指定的请求执行时只有你真正需要的类才加载到程序中, 你可以跳过手动加载类文件的步骤, 直接使用这些类就好.

默认情况下modelslibraries目录是在application/start.php文件下已经被声明过自动加载的. 装载机机制使用类时依照文件名约定规则, 要求所有的文件名是小写的. 因此, 例如在models文件夹下的一个"User"类文件的名称应当是"user.php". 您可能会用到子目录来保存类文件, 只要保证类的命名空间和类目录结构相匹配就可以了. 因此, 一个包含"Entities\User"类的文件的文件名要为"entities/user.php".

注册目录(Directories)

如上所述, modelslibraries目录默认情况下已被注册为自动加载的. 然而, 你可以注册任何你想用的文件目录来实现自动加载, 前提是文件名称和类名称要符合上面要所说的名称约定:

注册一个可以实现自动加载的目录:

Autoloader::directories(array(
    path('app').'entities',
    path('app').'repositories',
));

注册映射(Mappings)

有时你可能想手动映射类及其相关文件. 这是加载类的最高效的方式:

注册一个可以实现自动加载的类和文件的映射:

Autoloader::map(array(
    'User'    => path('app').'models/user.php',
    'Contact' => path('app').'models/contact.php',
));

注册命名空间(Namespaces)

许多第三方类库为其结构使用PSR-0标准. PSR-0标准要求类的名称应和文件名相同, 目录结构是由命名空间表示的. 如果您使用的是一个基于PSR-0标准的库, 只要注册它的根命名空间就可以实现自动装载:

注册一个可以实现自动加载的命名空间:

Autoloader::namespaces(array(
    'Doctrine' => path('libraries').'Doctrine',
));

在PHP的命名空间出现之前, 许多项目使用下划线表明目录结构. 如果您正在使用这些传统的类库, 你仍然可以轻松实现注册自动装载. 例如, 如果您正在使用SwiftMailer类, 你可能已经注意到所有类名都已"Swift_"做前缀. 因此, 我们将"Swift"作为根注册为自动装载就可以了.

注册一个可以实现自动加载的以下划线作为目录结构的类:

Autoloader::underscored(array(
    'Swift' => path('libraries').'SwiftMailer',
));