2015-10-15 28 views
0

下面的代碼來自一個名爲'精選評論'的wordpress插件。這是一位備受推崇的開發人員,所以我知道代碼是100%的。爲什麼這樣一起使用實例化和靜態方法?

public static function instance() { 
     if (! isset(self::$instance)) { 
      self::$instance = new Featured_Comments; 
      self::$instance->includes(); 
      self::$instance->init(); 
      self::$instance->load_textdomain(); 
      do_action('featured_comments_loaded'); 
     } 
     return self::$instance; 
    } 

開發人員使用一個靜態方法public static function instance() {然後將其實例self::$instance = new Featured_Comments;爲什麼呢?我對oop很陌生,認爲靜態方法不需要實例化?請有人解釋。

完整的wordpress插件可以在WordPress存儲庫中找到,並被稱爲「精選評論」。謝謝!

+4

看起來像[單身模式](https://en.wikipedia.org/wiki/Singleton_pattern) –

+0

嗨,我明白單身模式可以確保類只能被實例化一次。但是,爲什麼開發人員實例化一個靜態方法?謝謝! – mattnewbie

+0

否則在非靜態類中不會有實例。那是(可怕的)單例的感覺 –

回答

0

正如其他人提及 - 開發商似乎遵循Singletone設計模式

  • 的$實例屬性是靜態的,以確保它總是一個和那裏唯一的實例。如果你看看屬性聲明 - 你會注意到它被聲明爲私有的,這會阻止你改變當前類的外部值。

  • instance()方法是靜態的,所以你不必實例化這個類來訪問instance()方法。否則,你就必須做:

    $classInstance = new YourClass(); 
    $instance = $classInstance->instance(); 
    

    但有static關鍵字,它只是

    $instance = YourClass::instance(); 
    

在你的情況 - 類似乎準備一些資產插件運行。

self::$instance->includes(); 
    self::$instance->init(); 
    self::$instance->load_textdomain(); 

FeturedComments返回(return self::$instance;)的實例似乎是一個做所有繁重的 - 它僅被實例化一次,以避免混亂。

相關問題