自动加载
框架的自动加载规则
核心
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