是否可以保护定义的变量不被覆盖(更改值)?我正在制作一个使用插件的系统,我想阻止插件编写器(我自己)改变一些特定的定义变量(包含新类实例的对象)。
这样的事情:
Class Foo {
function __construct() {
return "Hello";
}
}
$bar= new Foo();
所以稍后,我将在我的函数中使用global $bar;
,但我不想允许更改这样的变量:
$bar = new Foo();
$bar = "New value";
$bar
必须始终保持不变(新的Foo()),因为它将是一个大系统,我不记得我定义的数百个核心变量。
理想情况下,如果我尝试重新定义它 - php应该抛出致命的错误。有这样的事吗?
答案 0 :(得分:3)
这听起来像Singleton pattern:
class Foo
{
protected static $instance = null;
protected function __construct()
{
throw new Exception('use ::getInstance()');
}
public static function getInstance()
{
if (!isset(static::$instance)) {
static::$instance = new static;
}
return static::$instance;
}
}
使用:
$bar = Foo::getInstance();
任何人都可以重新声明$ bar ..但如果他们不真正的Foo ......他们需要得到实例;
答案 1 :(得分:0)
为什么你的构造函数返回一个字符串?根据定义,构造函数返回对象的引用。
如果你只想要一个不能改变的字符串的引用,为什么不只做一个const?
const STRING_THAT_WONT_CHANGE = 'foo';