抽象类
文章分页:

基础类

myBase.class.php 为抽象类不可单独使用,可为所有其他子类提供统一的构建方法和错误处理,此外还是预留的扩展接口,可为扩展为此类的所有类扩展通用方法。

  • myBase->__construct - 将构造函数引导至init方法,以便于二次调用
  • myBase->setErrHandler - 设置错误处理函数
  • myBase->error - 通过异常处理类处理代码错误

使用方法很简单,只要将本类作为父类扩展即可,如下:

class myClass extends myBase {}
本框架所有类均为本类的扩展。

 

代理类

myProxy.class.php 为抽象类,不可单独使用,用于将同一功能类型的功能模块通过同一的调用模式供框架使用,实现框架的高扩展性,可用于数据库、缓存、会话处理等功能。本类作为代理模式的基础类,为所有代理类提供基础功能,通过魔术方法实现统一代理类调用不同同质功能,包括:

  • 初始化实力并指定具体功能类;
  • 将所有类方法调用转向到指定功能类并返回相应返回值;
  • 将别名功能转义到制定功能里;
  • 本类扩展自基础类,已具备相关功能。

以数据库代理类为例:

class myDb extends myProxy {  
    public function __construct() {  
        spl_autoload_register(function ($class) {  
            $file = __DIR__.'/database/'.$class.'.class.php';  
            if(is_file($file)) require_once($file);  
        });  
        if(!empty(func_get_args())) call_user_func_array('parent::init', func_get_args());  
    }  
}

整个类代码仅包含类构造函数,定义了自动载入的规则,并执行 myProxy 的初始化方法,具体调用如下:

$db = new myDb('mysql','localhost:3306','dbo','pwd','utf8');

mysql.class.php 的初始化函数为:

public function init($host, $user, $pwd, $charset='utf8') {  
    $this->host = $host;  
    $this->user = $user;  
    $this->pwd = $pwd;  
    $this->charset = $charset;  
    $this->delimiter = '`';  
}

不难看出,代理类第一个参数为指定具体功能类,后几个参数对应该功能类初始化方法中的各参数。

 

扩展类

myTrait.class.php 为扩展类,不可单独使用,可为所调用的类提供一整套魔术方法。

  • myTrait->__set - 添加类动态变量,即没有在类中声明过的变量
  • myTrait->__get - 调用类动态变量,如变量名为instatnce,则直接返回新的当前类实例
  • myTrait->__destruct - unset类时,注销所有类内部变量
  • myTrait->__isset - 检测某类变量是否存在
  • myTrait->__unset - 删除某类变量
  • myTrait->__call - 智能判断并调用方法别名,动态方法或类外部函数
  • myTrait->__callStatic - 类似以上方法,用于非实例的静态调用
  • myTrait->__toString - 将类实例作为字符串使用时,返回类名称、所有变量及方法名(序列化)
  • myTrait->__invoke - 将类实例作为方法调用时的操作(字符串:打乱,数字:随机数,对象或数组:批量内部赋值,其他:返回回调信息)
  • myTrait->__sleep - 序列化类实例时的操作,返回所有内部变量名
  • myTrait->__wakeup - 反序列化类时的操作,重新构造实例
  • myTrait->__set_state - 通过var_export()导出类实例时,返回当前属性的类代码。
  • myTrait->__debugInfo -通过var_dump()导出类实例时,返回类名称、所有变量及方法名的数组
  • myTrait->addMethod - 动态添加类方法
  • myTrait->regAlias - 注册类内方法别名,用于简化类方法调用

使用方法很简单,只要在需要扩展的类头部引入即可,如下:

class myClass{  
    use myTrait;  
}
本框架下所有类均引用了本扩展,具备相关特性,更多扩展类的相关特性请参考官方文档

 

上一篇:功能函数
下一篇:设置管理