文章分页:
基础类
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;
}
本框架下所有类均引用了本扩展,具备相关特性,更多扩展类的相关特性请参考官方文档。