保护独立变量

时间:2013-07-18 12:31:55

标签: php oop variables

是否可以保护定义的变量不被覆盖(更改值)?我正在制作一个使用插件的系统,我想阻止插件编写器(我自己)改变一些特定的定义变量(包含新类实例的对象)。

这样的事情:

Class Foo { 
  function __construct() {
    return "Hello";
  }
}
$bar= new Foo();

所以稍后,我将在我的函数中使用global $bar;,但我不想允许更改这样的变量:

$bar = new Foo(); $bar = "New value";

$bar必须始终保持不变(新的Foo()),因为它将是一个大系统,我不记得我定义的数百个核心变量。

理想情况下,如果我尝试重新定义它 - php应该抛出致命的错误。有这样的事吗?

2 个答案:

答案 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';