属性没有setter

时间:2016-07-07 18:37:00

标签: php phalcon

我使用的是PHP / phalcon应用程序。我有2份。在服务器1中,我没有问题。在服务器2(相同代码)中,我收到以下错误。

property '<property_name>' does not have a setter

由于我有相同的代码,我很困惑这里要做什么。我也查看了php.ini错误报告,因为这个错误看起来像是在抱怨我的代码。

但在这两个地方我都没有~STRICT

class ClassName { 
    protected $email = null; 
} 

从外面我做,

$cls = new ClassName(); 
$cls->email = 'email'; 

在这种情况下,我得到的错误是

  

属性'email'没有setter

4 个答案:

答案 0 :(得分:1)

Сheck phalcon version on your servers. I had the same problem on my local host with Phalcon 2.0.13 and on server I had Phalcon 2.0.6.

答案 1 :(得分:0)

protected变量的要点是限制从ClassName外部直接访问变量。

要访问protected变量,您必须extend ClassName getset函数

class ClassName { 
    protected $email = null;

    public function getEmail() {
        return $this->email;
    } 

    public function setEmail($email) {
        $this->email = $email;
    }
} 

您可以按如下方式使用:

$cls = new ClassName(); 
$cls->setEmail('email@example.com');

echo $cls->getEmail(); // outputs: "email@example.com"

如果您不希望创建这些getterssetters的喧嚣,只需将protected变量更改为public变量。

旁注:
你确定你的代码是100%相同吗? 也许您的error reporting levels之间存在不一致之处? 您的2个环境中有哪些PHP版本?
也许您的ClassName拥有(或继承)magic methods __get__set

  将数据写入不可访问的属性时运行

__ set()   __get()用于从不可访问的属性中读取数据。

答案 2 :(得分:0)

我遇到了同样的问题。我改变了我的模型protected $emailpublic $email并且错误消失了。

答案 3 :(得分:0)

如何设置魔术师? 从Phalcon 2升级到3时,我遇到了同样的问题,并在下面进行了修复,而不是手动添加所有设置器。

/**
 * Magic setter function to get rid of 
 * '[Property] does not have a setter' error
 * 
 * @param any value of $field
 * @param any value of $value
 * @return no return
 */

public function __set($field, $value) {
    $this->$field = $value;
}