为什么这行代码:
$this->plugins_dir[0] = SMARTY_DIR . 'plugins';
Run Code Online (Sandbox Code Playgroud)
造成这个错误?
ERRNO: 8
TEXT: Indirect modification of overloaded property Page::$plugins_dir has no effect
Run Code Online (Sandbox Code Playgroud)
顺便说一下,代码行位于名为"Page"的类的构造函数中.
我正在使用PHP和PostgreSQL,但我没有太多经验.我现在困住这个问题几个小时,找不到原因.
PHP试图告诉你的是该属性->plugins_dir并不存在,但是__get()已经编写了一个魔术函数,如果从中读取它将返回一个值.直接为它分配变量也可能有效(如果有相应的__set())但你不能修改它,因为它实际上是一个函数返回值.你实际上是想说$this->__get('plugins_dir')[0] = 'foo',这并不意味着什么.
但是,查看相关的Smarty文档,我们可以看到正确的解决方案是什么:
注意:从Smarty 3.1开始,不再可以直接访问属性$ plugins_dir.请改用getPluginsDir(),setPluginsDir()和addPluginsDir().
因此,您的代码实际上应该使用addPluginsDir()的doc页面上的一个示例模式,例如:
$this->setPluginsDir( SMARTY_DIR . 'plugins' )
->addPluginsDir( '/some/other/source/of/plugins' );
Run Code Online (Sandbox Code Playgroud)