美文网首页php基础教程
wecenter学习笔记-自动引入机制和Autoload

wecenter学习笔记-自动引入机制和Autoload

作者: imhaiyang | 来源:发表于2016-07-11 18:43 被阅读82次

    该文是wecenter学习笔记的一部分

    自动引入机制和Autoload

    通过约束model类、system类和config的存放位置和命名规则,实现了不需要事先引入文件就可以直接使用, 这使得在编程过程中变得方便快捷, 也避免了类库重复实例化的问题。

    具体的规则如下:

    1. model

      放在 model 目录下, 文件名: name.inc.php,类名采用name_class的格式

      • 在程序中使用方法:
      $this->model(‘name’)->action();
      
      • 可用范围: CONTROLLER, Model
    2. system

      放在 system 目录之下, 类名相对于 system 目录, 将 / 换成 _,例:

      Zend_Mail
      路径: system/Zend/Mail.php
      类名: Zend_Mail
      
      • 在程序中使用方法: new, 静态调用, load_class(‘class_name’);
      • 可用范围: 任意, 不需要带参数实例化建议使用 load_class
    3. 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());
        }
    }
    

    Model读写分离 ←o→ 插件机制

    相关文章

      网友评论

        本文标题:wecenter学习笔记-自动引入机制和Autoload

        本文链接:https://www.haomeiwen.com/subject/phsjjttx.html