該文是wecenter學(xué)習(xí)筆記的一部分
自動(dòng)引入機(jī)制和Autoload
通過(guò)約束model類、system類和config的存放位置和命名規(guī)則,實(shí)現(xiàn)了不需要事先引入文件就可以直接使用, 這使得在編程過(guò)程中變得方便快捷, 也避免了類庫(kù)重復(fù)實(shí)例化的問(wèn)題。
具體的規(guī)則如下:
-
model
放在 model 目錄下, 文件名: name.inc.php,類名采用name_class的格式
- 在程序中使用方法:
$this->model(‘name’)->action();
- 可用范圍: CONTROLLER, Model
-
system
放在 system 目錄之下, 類名相對(duì)于 system 目錄, 將 / 換成 _,例:
Zend_Mail 路徑: system/Zend/Mail.php 類名: Zend_Mail
- 在程序中使用方法: new, 靜態(tài)調(diào)用, load_class(‘class_name’);
- 可用范圍: 任意, 不需要帶參數(shù)實(shí)例化建議使用 load_class
-
config
放在 system/config 目錄之下, 文件內(nèi)容為一個(gè) $config 數(shù)組, 命名為 配置名.php
- 在程序中使用方法: AWS_APP::config()->get(‘配置名’)->數(shù)組下標(biāo)
- 可用范圍: 任意, 不需要帶參數(shù)實(shí)例化建議使用 load_class
** Autoload **
在初始化腳本 init.php
里加載類
system/init.php
128 load_class('core_autoload');
在 core_autoload的構(gòu)造過(guò)程注冊(cè)加載處理函數(shù)
system/core/autoload.php#__construct
36 spl_autoload_register(array($this, 'loader'));
類加載函數(shù)處理
- 按路徑加載
- 別名類的加載,包括:TPL/FORMAT/HTTP/H/ACTION_LOG
- models類的加載
- class類的加載
找到目標(biāo)類的路徑后直接加載,并緩存
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());
}
}