2017-03-23 61 views
0

我在PHP中編程,但這是一個通用的面向對象問題。在對象中使用單引號或作爲參考傳遞

我們覺得從對象內部調用singleton類與調用外部對象並傳入變量是什麼感覺?

選項之一:

$instance = Singleton::getInstance(); 

$obj = new ClassName(); 
$obj->setSingleton($instance); 

選項二:

class ClassName 
{ 
    public function __construct(){ 
     $instance = Singleton::getInstance(); 
     $instance->doSomething(); 
    } 
} 

這只是一個 「每次使用」 的決定(即單實現接口等)還是有規則嗎?

我可以看到傳遞對象VS單身人士,但一個關於單身人士實例VS調用?認爲典型的代碼有很多類和單身實例的許多用途...有沒有任何規則呢?

+0

我一般都不是單身人士的粉絲,但是如果你在物體內部得到了物體,那麼這個物體會與單身人士緊密相連。如果代碼中發生這種情況,那麼問題就會惡化。但是,將實例傳遞給每個需要它的對象也可能同樣糟糕! – chatton

+0

@chatton似乎任何方法都有缺點,但單身人士是一種非常常見的設計模式。你可以在這種情況下看到爲什麼我很好奇 – user3168961

+0

是的,我認爲@AlexG在他的回答中提出了一個很好的觀點,即對於閱讀它的代碼不那麼明顯。如果我選擇一個,我會去傳遞引用,而不是在方法內部調用getInstance()。 – chatton

回答

0

兩者都很好,但是當其他人會看你的代碼時,他們可能不那麼明顯,他們在選擇#1中處理單身人士,尤其是如果代碼變大。恕我直言,當你需要連續調用幾次函數時,保持函數體內的單例引用是完全有效的,但我不會將它作爲成員變量保留。

保持一個成員變量也意味着你的對象會變得更大,沒有明顯的原因。