下载直接可用的基础 动态 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