我使用的是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
答案 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
get
或set
函数
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"
如果您不希望创建这些getters
和setters
的喧嚣,只需将protected
变量更改为public
变量。
旁注:
你确定你的代码是100%相同吗?
也许您的error reporting levels之间存在不一致之处?
您的2个环境中有哪些PHP版本?
也许您的ClassName
拥有(或继承)magic methods __get
和__set
?
将数据写入不可访问的属性时运行__ set() __get()用于从不可访问的属性中读取数据。
答案 2 :(得分:0)
我遇到了同样的问题。我改变了我的模型protected $email
到public $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;
}