Повторная инициализация константы внутри одноэлементного класса - PullRequest
0 голосов
/ 23 июля 2011

Интересно, можно ли как-нибудь "переинициализировать" константу внутри одноэлементного класса.

Например:

class Foo {

    public static $instance = null;    

    private $status = null;

    private function __construct() { }

    public static function getInstance() {
        if(!isset(self::$instance)) {
            $c = __CLASS__;
            self::$instance = new $c;
            self::$instance->setUp();
        }

        return self::$instance;
    }

    // Function that will change the $status variable
    private function bar() {

        ...

        $this->status = TRUE;
    }

    private function setUp() {

        ...

        $this->bar();

        define("HELLO", $this->status);

    }

    public function baz() {

        ...

        $this->bar();
    }

}

Так что, если я вызову $ foo-> baz () , это каким-то образом перезапишет мою HELLO константу.

1 Ответ

1 голос
/ 23 июля 2011

Класс Singleton или нет, константы являются глобальными и константами . Однажды define d они не могут быть неопределенными или измененными. Если вам нужно изменить значение, используйте переменную . В этом случае, вероятно, переменная класса static.


Судя по вашим комментариям, вы, похоже, неправильно понимаете, когда определены константы.

Возможно:

define('FOO', rand());

Константа будет иметь другое значение каждый раз, когда выполняется скрипт (каждый раз, когда страница посещается).

Не возможно:

define('FOO', 'bar');
define('FOO', 'baz');

Константы не могут быть изменены во время того же запроса .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...