该文是wecenter学习笔记的一部分
自动引入机制和Autoload
通过约束model类、system类和config的存放位置和命名规则,实现了不需要事先引入文件就可以直接使用, 这使得在编程过程中变得方便快捷, 也避免了类库重复实例化的问题。
具体的规则如下:
-
model
放在 model 目录下, 文件名: name.inc.php,类名采用name_class的格式
- 在程序中使用方法:
$this->model(‘name’)->action();
- 可用范围: CONTROLLER, Model
-
system
放在 system 目录之下, 类名相对于 system 目录, 将 / 换成 _,例:
Zend_Mail 路径: system/Zend/Mail.php 类名: Zend_Mail
- 在程序中使用方法: new, 静态调用, load_class(‘class_name’);
- 可用范围: 任意, 不需要带参数实例化建议使用 load_class
-
config
放在 system/config 目录之下, 文件内容为一个 $config 数组, 命名为 配置名.php
- 在程序中使用方法: AWS_APP::config()->get(‘配置名’)->数组下标
- 可用范围: 任意, 不需要带参数实例化建议使用 load_class
** Autoload **
在初始化脚本 init.php
里加载类
system/init.php
128 load_class('core_autoload');
在 core_autoload的构造过程注册加载处理函数
system/core/autoload.php#__construct
36 spl_autoload_register(array($this, 'loader'));
类加载函数处理
- 按路径加载
- 别名类的加载,包括:TPL/FORMAT/HTTP/H/ACTION_LOG
- models类的加载
- class类的加载
找到目标类的路径后直接加载,并缓存
require $class_file_location;
self::$loaded_class[$class_name] = $class_file_location;
plugin的model类加载
if (class_exists('AWS_APP', false))
{
if (AWS_APP::plugins()->model())
{
self::$aliases = array_merge(self::$aliases, AWS_APP::plugins()->model());
}
}