为什么这行代码:
$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';