3

为什么是这行代码:

$this->plugins_dir[0] = SMARTY_DIR . 'plugins';

导致这个错误?

ERRNO: 8
TEXT: Indirect modification of overloaded property Page::$plugins_dir has no effect

顺便说一句,这行代码在名为“Page”的类的构造函数中。

我正在使用 PHP 和 PostgreSQL,但经验不足。我现在被这个问题困扰了几个小时,找不到原因。

4

2 回答 2

8

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' );
于 2013-04-02T23:39:58.540 回答
0

我认为这是正确的方法

$this->plugins_dir = SMARTY_DIR . 'plugins';
于 2013-03-29T22:58:14.070 回答