自动加载


框架的自动加载规则

核心

Loader以单例模式运行, 在Loader的构造函数中注册了两个自动加载函数

spl_autoload_register(array($this, 'loadClass'));
spl_autoload_register(array($this, 'loadPSRClass'));

Loader::loadClass用于加载框架和项目下的类, 项目下的类命名空间都和目录一一对应, Loader::loadPSRClass用于加载支持PSR-4规则的第三方类库(必须先注册)

注册命名空间

如果没有使用composer提供的自动加载, 又要使用第三方类库, 可以按照下例先在入口文件中注册命名空间, 在程序中就可以正常使用了.

require __DIR__ . '/../../crossboot.php';
$web = Cross\Core\Delegate::loadApp('web');

//注册一个命名空间
$loader = $web->getLoader();
$loader->registerNamespace('abc', PROJECT_REAL_PATH . 'lib/abc');
$web->run();

或者在APP配置文件中的namespace选项中配置(1.5.8及以上版本)

/**
 * 第三方类库的命名空间
 * 命名空间 => PROJECT_PATH的相对路径
 */
'namespace' => array()	

加载指定类(单文件)

加载单文件类库可以使用Loader::import(), 参数为相对项目根目录的相对路径, 函数会自动把根目录的绝对路径附加在传参之前.

读取指定文件

Loader::read(), 目前仅支持php, json, ini后缀的文件, 参数必须是文件的绝对路径, 第二个参数表示是否返回文件的文本内容. 默认为false