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


PHP array error: Indirect modification of overloaded property

为什么这行代码:

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

导致这个错误?

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

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

我正在与PHP和PostgreSQL工作,但我不是太有经验。我被卡住了这个问题已经出现几个小时了,找不到原因

PHP试图告诉您的是属性->plugins_dir实际上并不存在,但是已经编写了一个神奇的__get()函数,如果您从中读取将返回一个值。将变量直接赋值给它也可以工作(如果有相应的__set()),但你不能修改它,因为它实际上是一个函数返回值。你实际上是在说$this->__get('plugins_dir')[0] = 'foo',这没有任何意义。

但是,查看相关的Smarty文档,我们可以看到正确的解决方案是:

注意:从Smarty 3.1开始,属性$plugins_dir不再可以直接访问。使用getPluginsDir(), setPluginsDir()和addPluginsDir()代替。

所以你的代码实际上应该使用文档页上的addPluginsDir()示例之一的模式,例如:

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

我认为这是正确的方法

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