<?php header("content-type:text/html;charset=utf-8"); // ## 3. 属性重载 // * 重载: 动态的创建属性和方法 // * 当访问未定义或不可见的属性/方法时, 重载方法会自动调用 // * "当访问未定义或不可见", 统称为: "不可访问" // * PHP中的重载,是通过"魔术方法"实现 // * "魔术方法"是特指客户端不能访问,而只能是系统根据一定条件自动调用 // * 所有重载方法必须声明为: `public` class demo{ private $name; //private()受保护的属性或方法 private $age; protected $country = '中国'; //私有属性或方法 // // 魔术方法,前面都是 __开头,两个下划线 public function __construct($name,$age){ $this->name = $name; $this->age = $age; } // // 当获取未定义 不可见的属性时,触发。 public function __get($name){ //__get()方法:这个方法用来获取私有成员属性值的,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。 if($name == 'country'){ echo $this->country; } } //// // 给不可见的属性,进行赋值时,触发。 public function __set($name,$value){ //__set()方法:这个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。(key=>value) if($name == 'country'){ if($value == '***'){ echo '绝不让***人加入'; } } } // //// // 检测不可见的属性,触发 //// // 需要搭配isset函数 public function __isset($name){ if($name == 'country'){ echo '变量存在'; }else{ echo '变量不存在'; } } // // 删除不可见的属性,触发 // // 需要搭配unset函数 public function __unset($a){ if($a == 'country'){ unset($this->country); echo '删除成功'; }else{ echo '无法删除'; } } public function info(){ return $this->name.$this->age.$this->country; } } $a = new demo('朱老师',90); echo $a->country; echo $a->info(); // echo '<br>'; $a->country = '***'; // echo '<br>'; isset($a->country); // echo '<br>'; unset($a->country); //echo '<br>'; //isset($a->country);
点击 "运行实例" 按钮查看在线实例