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

use*_*930 3 php smarty

为什么这行代码:

$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,但我没有太多经验.我现在困住这个问题几个小时,找不到原因.

IMS*_*SoP 8

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)