PHP数组错误:间接修改重载属性

时间:2013-03-29 22:48:50

标签: php smarty

为什么这行代码:

$this->plugins_dir[0] = SMARTY_DIR . 'plugins';

导致此错误?

ERRNO: 8
TEXT: Indirect modification of overloaded property Page::$plugins_dir has no effect

顺便说一下,代码行位于名为“Page”的类的构造函数中。

我正在使用PHP和PostgreSQL,但我没有太多经验。我被卡住了 现在用这个问题几个小时,找不到原因。

2 个答案:

答案 0 :(得分:8)

PHP试图告诉你的是,属性->plugins_dir并不存在,但是已经编写了一个魔术__get()函数,如果从中读取它将返回一个值。直接为它分配变量也可能有效(如果有相应的__set())但你不能修改它,因为它实际上是一个函数返回值。你实际上是在试图说$this->__get('plugins_dir')[0] = 'foo',这并不意味着什么。

但是,看the relevant Smarty documentation,我们可以看到正确的解决方案:

  

注意:从Smarty 3.1开始,无法再直接访问属性$ plugins_dir。请改用getPluginsDir(),setPluginsDir()和addPluginsDir()。

因此,您的代码应该实际使用the doc page for addPluginsDir()上的一个示例的模式,例如:

$this->setPluginsDir( SMARTY_DIR . 'plugins' )
     ->addPluginsDir( '/some/other/source/of/plugins' );

答案 1 :(得分:0)

我认为这是正确的方式

$this->plugins_dir = SMARTY_DIR . 'plugins';