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。我不明白你为什么对这样一个问题轻描淡写。因为这个问题不清楚,没有用处和/或没有任何研究成果。