<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                在業務場景中經常遇到業務變動,如當前公司分別賣書狗酒,他們屬性這些大不相同于是分別給他們創建了一個類,突然有一天賣酒的掛了,老板要求凡是關于酒的都返回會書的內容 這個時候,你不得不注釋酒而實例實例化書,遇到命名空間你還的定位好久,而這種需求隨時都會產生,像這種隨時在某個節點創建不同實例時我們就可以使用工廠類統一管理類的實例化, ``` class Books { function getList() { return [ ["prod_id"=>101,"prod_name"=>"java從入門到住院"], ["prod_id"=>102,"prod_name"=>"php從精通到放棄"], ["prod_id"=>103,"prod_name"=>"黑客技術從入門到入獄"], ["prod_id"=>104,"prod_name"=>"python光速入門"], ["prod_id"=>105,"prod_name"=>"三小時學會golang"], ]; } } class Dogs { function getList() { return [ ["prod_id"=>201,"prod_name"=>"斑點"], ["prod_id"=>202,"prod_name"=>"泰迪"], ["prod_id"=>203,"prod_name"=>"二哈"], ["prod_id"=>204,"prod_name"=>"金毛"], ["prod_id"=>205,"prod_name"=>"雜交"], ]; } } class Wines implements IProduct { function getList() { return [ ["prod_id"=>301,"prod_name"=>"紅酒"], ["prod_id"=>302,"prod_name"=>"白酒"], ["prod_id"=>303,"prod_name"=>"啤酒"], ["prod_id"=>304,"prod_name"=>"洋酒"], ["prod_id"=>305,"prod_name"=>"酒精"], ]; } } class ProductFactory { //商品工廠類 static function getProduct($type) { if($type=="Books") $type="Dogs";//變態需求產生 $obj=false; if(!class_exists($type)) { require($type.".php"); } switch($type) { case "Books": $obj=new Books(); break; case "Dogs": $obj=new Dogs(); break; case "Wines": $obj=new Wines(); break; } return $obj; } } ``` 工廠類只能返回一個類的實例,如果某一天老板要求返回全部類實例呢?這時我們就需要注冊樹模式,將這些類實例存入到一個屬性中我們就叫他數據中心,Tp容器就是一個注冊樹模式與反射等綜合而成的 這樣我們取數據就從這個數據中心取,堅決不和類本身“私自交往” ``` interface IProduct { function getList(); } class Books implements IProduct { function getList() { return [ ["prod_id"=>101,"prod_name"=>"java從入門到住院"], ["prod_id"=>102,"prod_name"=>"php從精通到放棄"], ["prod_id"=>103,"prod_name"=>"黑客技術從入門到入獄"], ["prod_id"=>104,"prod_name"=>"python光速入門"], ["prod_id"=>105,"prod_name"=>"三小時學會golang"], ]; } } class Dogs implements IProduct { function getList() { return [ ["prod_id"=>201,"prod_name"=>"斑點"], ["prod_id"=>202,"prod_name"=>"泰迪"], ["prod_id"=>203,"prod_name"=>"二哈"], ["prod_id"=>204,"prod_name"=>"金毛"], ["prod_id"=>205,"prod_name"=>"雜交"], ]; } } class Wines implements IProduct { function getList() { return [ ["prod_id"=>301,"prod_name"=>"紅酒"], ["prod_id"=>302,"prod_name"=>"白酒"], ["prod_id"=>303,"prod_name"=>"啤酒"], ["prod_id"=>304,"prod_name"=>"洋酒"], ["prod_id"=>305,"prod_name"=>"酒精"], ]; } } class ProductDataCenter { public static $objectList=[];//對象數組 ,保存 public static function set($k,$v) { self::$objectList[$k]=$v; } public static function remove($k) { unset(self::$objectList[$k]); } /* public static function get($k) { return self::$objectList[$k]; }*/ public static function __callStatic($name, $arguments) { // TODO: Implement __callStatic() method. $return=[];//默認返回值 foreach(self::$objectList as $k=>$v) { if(method_exists($v,$name)) { $ret=$v->$name($arguments); if($ret) { $return[]=$ret; } } } return $return; } } class ProductFactory { //商品工廠類 static function getProduct($type) { // if($type=="Books") $type="Dogs";//變態需求產生 $obj=false; if(!class_exists($type)) //這部分加載文件代碼僅僅為了演示方便,請大家自行設置自動加載機制 { require($type.".php"); } switch($type) { case "Books": $obj=new Books(); break; case "Dogs": $obj=new Dogs(); break; case "Wines": $obj=new Wines(); break; } if(is_subclass_of($obj,"IProduct")) ProductDataCenter::set($type,$obj);//把創建的對象塞入數據中心 } } ``` 如果在取出全部實例的情況下,還要單獨取出指定的實例呢? 這時我們就需要一個模板方法 用于返回數據,當然業務實體太復雜我們就需要單獨建一個實體類,但這里沒必要 ``` <?php interface IProduct { function getList(); } class Books implements IProduct { function getList() { return [ ["prod_id"=>101,"prod_name"=>"java從入門到住院"], ["prod_id"=>102,"prod_name"=>"php從精通到放棄"], ["prod_id"=>103,"prod_name"=>"黑客技術從入門到入獄"], ["prod_id"=>104,"prod_name"=>"python光速入門"], ["prod_id"=>105,"prod_name"=>"三小時學會golang"], ]; } public function getChild($param){ $anonymous_class=new class($param[0]){ // 匿名類的參數將直接傳遞給匿名類的析構函數 function __construct($param){ //$sql="select * form product where id={$param}"; $arr=["prod_id"=>101,"prod_name"=>"java從入門到住院"];//這里模擬id未101的數據 foreach ($arr as $key => $value) { $this->$key=$value; } } }; return $anonymous_class; } } class Dogs implements IProduct { function getList() { return [ ["prod_id"=>201,"prod_name"=>"斑點"], ["prod_id"=>202,"prod_name"=>"泰迪"], ["prod_id"=>203,"prod_name"=>"二哈"], ["prod_id"=>204,"prod_name"=>"金毛"], ["prod_id"=>205,"prod_name"=>"雜交"], ]; } public function getChild($param){ $anonymous_class=new class($param[0]){ // 匿名類的參數將直接傳遞給匿名類的析構函數 function __construct($param){ //$sql="select * form product where id={$param}"; $arr=["prod_id"=>201,"prod_name"=>"斑點"];//這里模擬id未201的數據 foreach ($arr as $key => $value) { $this->$key=$value; } } }; return $anonymous_class; } } class Wines implements IProduct { function getList() { return [ ["prod_id"=>301,"prod_name"=>"紅酒"], ["prod_id"=>302,"prod_name"=>"白酒"], ["prod_id"=>303,"prod_name"=>"啤酒"], ["prod_id"=>304,"prod_name"=>"洋酒"], ["prod_id"=>305,"prod_name"=>"酒精"], ]; } public function getChild($param){ $anonymous_class=new class($param[0]){ // 匿名類的參數將直接傳遞給匿名類的析構函數 function __construct($param){ //$sql="select * form product where id={$param}"; $arr=["prod_id"=>301,"prod_name"=>"紅酒"];//這里模擬id未301的數據 foreach ($arr as $key => $value) { $this->$key=$value; } } }; return $anonymous_class; } } class ProductDataCenter { public static $objectList=[];//對象數組 ,保存 public static function set($k,$v) { self::$objectList[$k]=$v; } public static function remove($k) { unset(self::$objectList[$k]); } /* public static function get($k) { return self::$objectList[$k]; }*/ public static function __callStatic($name, $arguments) { $return=[];//默認返回值 foreach(self::$objectList as $k=>$v) { if(method_exists($v,$name)) { $ret=$v->$name($arguments); if($ret) { $return[]=$ret; } } } return $return; } } class ProductFactory { //商品工廠類 static function getProduct($type) { if(is_string($type)) { self::getObjectByType($type); } else if(is_array($type)) // 加入對數組參數的支持 { foreach($type as $t) self::getObjectByType($t); } } //商品工廠類 static function getObjectByType($type) { $obj=false; switch($type) { case "Books": $obj=new Books(); break; case "Dogs": $obj=new Dogs(); break; case "Wines": $obj=new Wines(); break; } if(is_subclass_of($obj,"IProduct")) ProductDataCenter::set($type,$obj);//把創建的對象塞入數據中心 } } ProductFactory::getObjectByType('Dogs'); ProductFactory::getObjectByType('Books'); ProductFactory::getObjectByType('Wines'); // ProductFactory::getProduct(['Dogs', 'Books', 'Wines']); $dogs=ProductDataCenter::getList();//Dogs/Books/Wines這三個類實例 // var_dump($dogs); $dogs=ProductDataCenter::getChild(201);//單個 var_dump($dogs); ``` 我們在取出指定的實例時往往還需要取出其他數據比如該商品當日點擊量,用戶對該商品的瀏覽記錄,設置一些系統日志等呢? 全部寫在一個方法里?玩意哪天不要了呢,或者圖書要某些功能而狗不需要呢?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看