下载直接可用的基础 动态 AR 模型
内部结构为:
/**
* @author caihaibin
* @qq 243008827
* 这个类是最新完善的,动态类似处理,
* 可重复使用而不会影响其它的调用。
* 是居家旅行必备之良品
*/
class CActiveRecordX extends CActiveRecord{
private static $_models=array();
private $_i_tableName;
private static $tableName;
private static $_i_md=array();
private $_md;
public function getMetaData()
{
if($this->_md!==null)
return $this->_md;
else
return $this->_md=self::model(self::tableName(),get_class($this))->_md;
}
public static function model($table_name,$className=__CLASS__)
{
self::$tableName = $table_name;
if(isset(self::$_models[$table_name])){
return self::$_models[$table_name];
}else
{
$model=self::$_models[$table_name]=new $className(null);
$model->_md=new CActiveRecordMetaData($model);
$model->attachBehaviors($model->behaviors());
return $model;
}
}
public function __construct($table_name = '') {
if ($table_name === null) {
parent::__construct ( null );
} else {
self::$tableName = $table_name;
parent::__construct ();
}
}
public function tableName() {
if (! isset ( $this->_i_tableName )) {
$this->_i_tableName = self::$tableName;
}
return $this->_i_tableName;
}
}
class ArticleX extends CActiveRecordX{
public static function getClassName() {
return __CLASS__;
}
}
该类在别人的基础上做的修改,
好吧,这个可以说是接近原创了,因为原著是个sb,哥不多说了。
这个是模拟了继承了ar修改了内部的主要涉及函数,实现通过表名进行标记。
不会有内部数据结构重复的情况,其它bug请反馈。
因为原来的 public function tableName() 内部为静态返回,如果有多个的情况下。
返回表名有问题。
现做了内部变量的包装,这样可以在最大的限度下保证 实例的完整性
转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827