PHP - сделать объект класса глобальным во всем приложении? - PullRequest
5 голосов
/ 17 июля 2011

Есть ли простой способ сделать объект класса глобальным для всего приложения в 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 ]

8 голосов
/ 17 июля 2011

Вам нужен одноэлементный объект.

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

2 голосов
/ 17 июля 2011

См. Шаблон синглтона для SO (и в каких случаях это считается плохой практикой).

Вы также можете рассмотреть возможность использования реестра .

Обратите внимание, что ваша проблема может быть архитектурной, и, возможно, существуют более эффективные способы решения проблемы, с которой вы сталкиваетесь, например, контейнер внедрения зависимости.

0 голосов
/ 17 июля 2011

Вы можете использовать функцию __autoload для динамического включения класса.

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

...