<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                > **設計模式-單例模式** ## 說明 ## **作為對象的創建模式,單例模式確保某一個類只有一個實例,并且對外提供這個全局實例的訪問入口。它不會創建實例副本,而是會向單例類內部存儲的實例返回一個引用。** ---------- ##實現說明## 定義: 一個類 只能允許有 一個對象存在. 1.使類不能被實例化 2.創建一個允許外部訪問的靜態方法 3.在靜態方法里實例化該類 4.禁止覆蓋產生對象 5.禁止clone產生對象 <h5>常用場景</h5> > 在日常開發中緩存對象、日志對象、數據庫操作對象等全局操作對象常被設計成單例。 ##單例模式實現過程## <h5>使類不能被實例化</h5> //封鎖new方法 class sigle{ protected function __construct() { } } <h5>在靜態方法里實例化該類</h5> class sigle{ protected function __construct() { } public static function getIns(){ return new self(); } } <h5>創建一個允許外部訪問的靜態方法</h5> class sigle{ protected static $ins = null; //存儲類 protected function __construct() { } public static function getIns(){ if(self::$ins == null){ self::$ins = new self(); } return self::$ins; } } <h5>禁止覆蓋產生對象</h5> //方法前加final,則方法不能唄覆蓋,類之前加final,則類不能被繼承 class sigle{ protected static $ins = null; final protected function __construct() { } public static function getIns(){ if(self::$ins == null){ self::$ins = new self(); } return self::$ins; } } <h5>防止clone產生新對象</h5> class sigle{ protected static $ins = null; //禁止外部直接創建對象,禁止繼承后覆蓋 final protected function __construct() { } //禁止外部直接clone對象,禁止繼承后覆蓋 final protected function __clone() { // TODO: Implement __clone() method. } public static function getIns(){ if(self::$ins == null){ self::$ins = new self(); } return self::$ins; } } <h5>測試</h5> class sigle{ protected static $ins = null; //禁止外部直接創建對象,禁止繼承后覆蓋 final protected function __construct() { } //禁止外部直接clone對象,禁止繼承后覆蓋 final protected function __clone() { // TODO: Implement __clone() method. } public static function getIns(){ if(self::$ins == null){ self::$ins = new self(); } return self::$ins; } } $s1=sigle::getIns(); $s2=sigle::getIns(); if($s1 === $s2){ echo "s1和s2是一個對象"; }else{ echo "s1和s2不是一個對象"; } 結果: object(sigle)#1 (0) { } object(sigle)#1 (0) { } s1和s2是一個對象 ## 結尾 ## <p style="background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);color: transparent;-webkit-text-fill-color: transparent;-webkit-background-clip: text;text-align:center;"> 心如花木,向陽而生。 </p> [1]: https://blog.zxliu.cn/usr/uploads/2020/11/386091710.png [2]: https://blog.zxliu.cn/usr/uploads/2020/11/1966401635.png
                  <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>

                              哎呀哎呀视频在线观看