簡體   English   中英

'singleton'類PHP的訪問屬性

[英]Access property of 'singleton' class PHP

我不確定我使用的技術是否合適。 我有一個類,單例,有一個像這樣的子實例:

final class Singleton {

    public $subinstance;
    private static $instance = NULL;

    private function __construct() {
        $this->subinstance = new subinstance(); 
    }

   public static function getInstance() {

       if (NULL === self::$instance) {
           self::$instance = new self;
       }

   return self::$instance;

   }

   private function __clone() {}
}

現在,如果我想從另一個類的類外部訪問子實例,我會這樣做:

$s = singleton::getInstance();
$s->subinstance->....

這是正確的方法嗎? 當我執行$s=singleton::getInstance();時會發生什么$s=singleton::getInstance(); ,整個單例類是否被復制到$ s中,或者這更像是指針?

你正在做的很好,雖然在你的示例代碼中我假設你打算寫:

$s = Singleton::getInstance(); // with the S capitalized

當您調用getInstance方法時,該類正在查看是否已經實例化了自身的版本。 如果有,它將返回對該實例的引用,而不是創建一個全新的實例。 如果尚未創建實例,它將創建實例,然后返回對它的引用。

我不確定為什么sixeightzero聲明你不應該在你的實例的構造函數中實例化一個類。 這樣做時不應該遇到任何問題。

如果你執行$ a = singleton,$ a將是對singleton類的引用。 $ a中的任何更改都將反映在singleton :: etc的訪問中。(指針)

你為什么要在構造函數中做一個子實例? 這可能會導致問題,並應創建一個方法來處理受保護方法內構造函數外部的子實例。 你的子實例是什么樣的?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM