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

PHP数组错误:间接修改重载属性,php,smarty,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,但经验不太丰富。我卡住了 这个问题已经出现几个小时了,我找不到原因

为什么这行代码是:

$this->plugins_dir[0] = SMARTY_DIR . 'plugins';
导致这个错误的原因是什么

ERRNO: 8
TEXT: Indirect modification of overloaded property Page::$plugins_dir has no effect
顺便说一下,代码行位于名为“Page”的类的构造函数内

我正在使用PHP和PostgreSQL,但经验不太丰富。我卡住了
这个问题已经出现几个小时了,我找不到原因。

我认为这是正确的方法

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

PHP试图告诉您的是,属性
->plugins\u dir
实际上并不存在,但是已经编写了一个神奇的
\u get()
函数,如果您从中读取,它将返回一个值。将变量直接赋给它也可能有效(如果存在相应的
\uu set()
),但您不能修改它,因为它实际上是一个函数返回值。您实际上是在试图说
$this->\uu get('plugins\u dir')[0]='foo'
,这并不意味着什么

然而,通过观察,我们可以看出正确的解决方案是什么:

注意:从Smarty 3.1开始,$plugins\u dir属性不再可直接访问。改为使用getPluginsDir()、setPluginsDir()和addPluginsDir()

因此,您的代码实际上应该使用上的一个示例的模式,例如:

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

您使用的是哪个版本的Smarty?类似?brb编码:我使用Smarty-3.1.13它一定是Smarty的某个修改版本。我使用的是Laravel框架,这是一个很好的解释。