Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在单例类中重新初始化常量_Php_Oop_Singleton - Fatal编程技术网

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

Php 在单例类中重新初始化常量,php,oop,singleton,Php,Oop,Singleton,我想知道是否有可能在单例类中以某种方式“重新初始化”常量 例如: class Foo { public static $instance = null; private $status = null; private function __construct() { } public static function getInstance() { if(!isset(self::$instance)) { $

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

例如:

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,它们就不能被取消定义或更改。如果需要更改该值,请使用变量。在这种情况下,可能是一个
静态
类变量


从您的评论来看,您似乎对定义常量的时间有误解

可能的:

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

不可能:

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

常量不能在同一请求期间更改。

因此,例如phpBB如何在会话类中重新定义其IS_来宾常量<代码>定义('IS_GUEST',(!$this->data['session_logged_in'])@abc脚本运行时,该常量的值是否会更改?上面只定义了常量,但每次定义时(在每次脚本运行时)该值可能不同。据我所知,您希望在定义常量后更改其值,这是不可能的。他们在您第一次进入网站时定义为访客常量。当您登录时,它将更改为FALSE。直到用户采取一些行动,它才会改变。@abc我认为您需要认识到,每个页面请求都是脚本的一个全新实例。只能定义一次常量。问题是,一旦页面被处理并发送到浏览器,PHP就会忘记所有数据、变量、常量和简单的一切。该常量在每次有人访问页面时定义,并且每次仅定义一次。它更改$status的值。因此,地位是动态的。HELLO值取决于状态。可能重复编号。我知道这是不可能的。但是我想我可以通过销毁类来重新初始化它。你不能销毁类并定义将常量放入全局范围。如果你足够绝望,你可以使用,但不得不这样做闻起来像是设计缺陷。我的意思是将实例设置为null。我不明白你为什么对这样一个问题轻描淡写。因为这个问题不清楚,没有用处和/或没有任何研究成果。