使用php的通用getter和setter
发布时间:2020-12-13 21:49:17 所属栏目:PHP教程 来源:网络整理
导读:有成千上万的php __get和__set的例子,不幸的是没有人真正告诉你如何使用它们. 所以我的问题是:如何在类中和实际使用对象时调用__get和__set方法. 示例代码: class User{public $id,$usename,$password;public function __construct($id,$username) { //SET
有成千上万的php __get和__set的例子,不幸的是没有人真正告诉你如何使用它们.
所以我的问题是:如何在类中和实际使用对象时调用__get和__set方法. 示例代码: class User{ public $id,$usename,$password; public function __construct($id,$username) { //SET AND GET USERNAME } public function __get($property) { if (property_exists($this,$property)) { return $this->$property; } } public function __set($property,$value) { if (property_exists($this,$property)) { $this->$property = $value; } return $this; } } $user = new User(1,'Bastest'); // echo GET THE VALUE; 我如何在构造函数中设置值以及如何获得// echo中的值GET THE VALUE; 解决方法
此功能在PHP中称为重载.正如
documentation所述,如果您尝试访问不存在或不可访问的属性,则将调用__get或__set方法.您的代码中的问题是,您正在访问的属性是存在且可访问的.这就是为什么__get / __ set不会被调用的原因.
检查此示例: class Test { protected $foo; public $data; public function __get($property) { var_dump(__METHOD__); if (property_exists($this,$property)) { return $this->$property; } } public function __set($property,$value) { var_dump(__METHOD__); if (property_exists($this,$property)) { $this->$property = $value; } } } 测试代码: $a = new Test(); // property 'name' does not exists $a->name = 'test'; // will trigger __set $n = $a->name; // will trigger __get // property 'foo' is protected - meaning not accessible $a->foo = 'bar'; // will trigger __set $a = $a->foo; // will trigger __get // property 'data' is public $a->data = '123'; // will not trigger __set $d = $a->data; // will not trigger __get (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |