龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

领域建模基类

时间:2014-07-22 14:48来源: 作者: 点击:
分享到:
实现了延迟载入、注册为唯一java要引入工厂和仓库的概念,而php只需要两三行代码就完成了同样的功能
实现了延迟载入、注册为唯一
java要引入工厂和仓库的概念,而php只需要两三行代码就完成了同样的功能

/**
 * 领域模型父类
 * 实现数据延迟载入、注册为唯一
 * @author liuxu
 *
 */
abstract class Domain
{

	protected $_id;
	protected $_id2;
	
	protected $_fields = array();
	
	protected $_loadedById = false;
	
	static protected $_objs;

	private function __construct($id,$id2=0)
	{
		$this->_id = $id?$id:0;
		$this->_id2 = $id2?$id2:0;		
	}

	static public function factory($id,$id2=0)
	{
		$class = get_called_class();
		if(!isset(self::$_objs[$class][$id][$id2]))//注册为唯一
		{
			self::$_objs[$class][$id][$id2] = new $class($id,$id2);
		}

		return self::$_objs[$class][$id][$id2];
	}

	public function load($fields=array())
	{
		if($fields)
		{
			foreach($fields as $key=>$value)
			{
				$this->_fields[$key] = $value;
			}		
		}
	}
	
	public function wash()
	{
		$this->_fields = array();
	}

	//载入完整数据
	abstract protected function loadById();

	public function __get($field)
	{
		if(!isset($this->_fields[$field]) && !$this->_loadedById)
		{
			//延迟载入
			$this->loadById();
			$this->_loadedById = true;
		}

		$value = isset($this->_fields[$field])?$this->_fields[$field]:null;
		return $value;
	}
	

	
}
精彩图集

赞助商链接