2011-07-17 41 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

请注意,您的问题可能是架构问题,也许有更好的方法来解决您面临的问题,例如,依赖注入容器。

相关问题