PHP - 在整个应用程序中使类对象全局化?

时间:2011-07-17 08:09:48

标签: php class global

是否有一种简单的方法可以在PHP中为整个应用程序创建一个全局类对象?我需要我的课程才能在整个应用程序中实例化一次并让它100%工作。

感谢。

修改

决定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..

}

3 个答案:

答案 0 :(得分:8)

你需要单身对象。

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

答案 1 :(得分:2)

请参阅singleton pattern on SO(在这种情况下,这被视为不良做法)。

您也可以考虑使用registry

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

答案 2 :(得分:0)

您可以使用__autoload功能为您动态包含该类。

http://www.electrictoolbox.com/php-autoload/