<table cellspacing="0" cellpadding="0"><tr><td class="t_f" id="postmessage_52245"> 实现了延迟载入、注册为唯一<br>java要引入工厂和仓库的概念,而php只需要两三行代码就完成了同样的功能<br> <div class="blockcode"> <div id="code_qI9"><ol> <li>/**</li> <li> * 领域模型父类</li> <li> * 实现数据延迟载入、注册为唯一</li> <li> * @author liuxu</li> <li> *</li> <li> */</li> <li>abstract class Domain</li> <li>{</li> <li> <li> protected $_id;</li> <li> protected $_id2;</li> <li> </li> <li> protected $_fields = array();</li> <li> </li> <li> protected $_loadedById = false;</li> <li> </li> <li> static protected $_objs;</li> <li> <li> private function __construct($id,$id2=0)</li> <li> {</li> <li> $this->_id = $id?$id:0;</li> <li> $this->_id2 = $id2?$id2:0; </li> <li> }</li> <li> <li> static public function factory($id,$id2=0)</li> <li> {</li> <li> $class = get_called_class();</li> <li> if(!isset(self::$_objs[$class][$id][$id2]))//注册为唯一</li> <li> {</li> <li> self::$_objs[$class][$id][$id2] = new $class($id,$id2);</li> <li> }</li> <li> <li> return self::$_objs[$class][$id][$id2];</li> <li> }</li> <li> <li> public function load($fields=array())</li> <li> {</li> <li> if($fields)</li> <li> {</li> <li> foreach($fields as $key=>$value)</li> <li> {</li> <li> $this->_fields[$key] = $value;</li> <li> } </li> <li> }</li> <li> }</li> <li> </li> <li> public function wash()</li> <li> {</li> <li> $this->_fields = array();</li> <li> }</li> <li> <li> //载入完整数据</li> <li> abstract protected function loadById();</li> <li> <li> public function __get($field)</li> <li> {</li> <li> if(!isset($this->_fields[$field]) && !$this->_loadedById)</li> <li> {</li> <li> //延迟载入</li> <li> $this->loadById();</li> <li> $this->_loadedById = true;</li> <li> }</li> <li> <li> $value = isset($this->_fields[$field])?$this->_fields[$field]:null;</li> <li> return $value;</li> <li> }</li> <li> </li> <li> <li> </li> <li>}</li> </ol></div> <em onclick="copycode($('code_qI9'));">复制代码</em> </div> </td></tr></table> <div id="comment_52245" class="cm"> </div> <div id="post_rate_div_52245"></div> <br><br>