2

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

像这样的东西:

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

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

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

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

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

4

2 回答 2

3

这听起来像单例模式

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 ... 他们需要获取实例;

于 2013-07-18T12:42:20.653 回答
0

为什么你的构造函数返回一个字符串?根据定义,构造函数返回对对象的引用。

如果你只想引用一个不能改变的字符串,为什么不直接做一个 const 呢?

const STRING_THAT_WONT_CHANGE = 'foo';
于 2013-07-18T12:58:23.650 回答