企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 概述 删除不可访问的属性 , 一般来说,可以通过unset函数删除对象的某个公开的属性 .但是,如果该属性是不可访问的(比如private或不存在),则会自动执行__unset方法,究竟是否可以删除成功,还是取决于__unset的内部实现!该方法也只需要一个参数,就是当前删除的属性名! ### 默认行为 ~~~ class Person{ private $name; private $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } $p = new Person("jack",20); unset($p->age); ~~~ ~~~ Fatal error: Uncaught Error: Cannot access private property Person::$age //报错 ~~~ ### 重写方法 ~~~ class Person{ private $name; private $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } public function __unset($name) { $allow_unset = ['age','name']; if(in_array($name,$allow_unset)){ unset($this->$name); } return "无权删除"; } } $p = new Person("jack",20); unset($p->age); var_dump($p); ~~~ ~~~ object(Person)#1 (1) { ["name":"Person":private]=> string(4) "jack" } //删除成功 ~~~