2011-07-17 83 views
4

有沒有一種簡單的方法可以在PHP中爲整個應用程序創建一個類對象全局?我需要我的類只能在整個應用程序中實例化一次,並使其工作100%。PHP - 在整個應用程序中使類對象全局化?

謝謝。

編輯

決定Singleton模式是什麼,我需要最好的想法,並要求添加一些代碼所以在這裏,它是:

使用我的應用程序類:

function catp_check_request(){ 
    $catp=catp::getInstance(); 

    $dlinks=array(); 
    $ddlinks=array(); 

    foreach($catp->rawlinks->link as $rawlink){ 
     $dellink="catp-del-{$rawlink->name}"; 
     array_push($dlinks,$dellink); 
    } 

    // More stuff.. 
} 

聲明類:

class catp { 

private static $instance; 
private $errors; 
private $status_messages; 
private $plugin_name; 
private $plugin_shortname; 
private $links; 
private $linksurl; 
private $rawlinks; 

private function __construct(){} 

public static function getInstance() { 
    if (self::$instance == null) { 
     self::$instance = new catp(); 
    } 
    return self::$instance; 
} 

public function catp(){ 
    $this->errors=false; 
    $this->plugin_name='CloakandTrack Plugin'; 
    $this->plugin_shortname='CaTP'; 
    $this->status_messages=array(
     'updated' => 'You just updated', 
     'enabled' => 'You just enabled', 
     'disabled' => 'You just disabled', 
     'debug' => 'Plugin is in debug mode' 
    ); 
    $this->linksurl=dirname(__FILE__).'/links.xml'; 
    $this->rawlinks=simplexml_load_file($this->linksurl); 
    $this->links=$this->catp_parse_links($this->rawlinks); 
} 

// More functions.. 

} 

回答

6

你需要單身對象。

class YourClass { 
    private $_instance = null; 

    public static function getInstance() { 
     if (self::$_instance == null) { 
      self::$_instance = new YourClass(); 
     } 
     return self::$_instance; 
    } 
} 

// to get your instance use 
YourClass::getInstance()->...; 

檢查此鏈接瞭解更多詳情http://www.php.net/manual/en/language.oop5.patterns.php#language.oop5.patterns.singleton

+0

這看起來正是我需要的。我嘗試切換我的代碼,看起來類似於你提供給我的鏈接,但現在我得到了這些類型的錯誤:'致命錯誤:不能訪問私有財產catp :: $ rawlinks英寸。 。 - 這是什麼常見的事情?看來每個變量實際上都返回NULL。 – Jared

+0

@Jared你可以用類聲明顯示你的例子嗎? –

+0

當然,我更新了我的問題。謝謝。 – Jared

2

singleton pattern on SO(在哪些情況下它被認爲是不好的做法)。

你也可以考慮使用registry

請注意,您的問題可能是架構問題,也許有更好的方法來解決您面臨的問題,例如,依賴注入容器。

相關問題