在单例类中重新初始化常量


Reinitialize constant inside a singleton class

我想知道是否有可能以某种方式在单例类中"重新初始化"一个常量。

例如:

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常量

无论是否为单例类,常量都是全局的,常量。一旦define d,它们就不能被定义或改变。如果需要更改值,请使用变量。在本例中,可能是static类变量。


从你的注释来看,你似乎对常量的定义有一个误解。

:

define('FOO', rand());

每次脚本执行(每次访问页面)时,该常量将具有不同的值

不可能:

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

常量不能在同一个请求中被改变