为什么这行代码:
$this->plugins_dir[0] = SMARTY_DIR . 'plugins';
导致此错误?
ERRNO: 8
TEXT: Indirect modification of overloaded property Page::$plugins_dir has no effect
顺便说一下,代码行位于名为“Page”的类的构造函数中。
我正在使用PHP和PostgreSQL,但我没有太多经验。我被卡住了 现在用这个问题几个小时,找不到原因。
答案 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';