<table cellspacing="0" cellpadding="0"><tr><td class="t_f" id="postmessage_52245"> 遅延読み込みと一意の登録を実装しました<br> Java では工場と倉庫の概念を導入する必要がありますが、PHP では同じ機能を完了するのに 2 ~ 3 行のコードのみが必要です<br> <div class="blockcode"> <div id="code_qI9"><ol> <li>/**</li> <li> * ドメイン モデルの親クラス </li> <li> * 遅延データの読み込みと一意としての登録を実装 </li> <li> * @author liuxu</li> <li> *</li> <li>*/</li> <li>抽象クラス 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> プライベート関数 __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> 静的パブリック関数ファクトリー($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 functionload($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> <li> 抽象保護関数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>