Correction status:qualified
Teacher's comments:
<?php //家庭成员类 class Family { //属性声明 private $name='';// 姓名 private $age=0;// 年龄 private $data=[];//自定义数据收集器 //构造方法 public function __construct($name='',$age=0,array $hobby=[],$relation='') { $this->name=$name; $this->age=$age; $this->hobby=$hobby; $this->relation=$relation; } //魔术方法:查询器 public function __get($attribute) { $msg=null; if(isset($this->$attribute)){ $msg= $this->$attribute; }elseif(isset ($this->data[$attribute])){ $msg= $this->data[$attribute]; }else{ $msg='无此属性'; } return $msg; } //魔术方法:设置器 public function __set($attribute,$value) { if(isset($this->$attribute)){ $this->$attribute=$value; }else{ $this->data[$attribute]=$value;//如果属性不存在,创建它并保存到类属性$data数组中 } } }
点击 "运行实例" 按钮查看在线实例
<?php require './class/Family.php'; $family1 = new Family('钱天行',12,['看电视','做作业','吃饭'],'儿子'); //测试方法__get() echo '姓名: ',$family1->name,'<br>'; echo '年龄: ',$family1->age, '<br>'; ////获取一个不存在的属性 echo '性别:', $family1->sex, '<br>'; // echo '<hr>'; //测试方法: __set() $family1->name = 'abc'; $family1->age = 12; echo '姓名: ',$family1->name,'<br>'; echo '年龄: ',$family1->age, '<br>'; ////给一个不存在的属性赋值,类中并无sex字段 $family1->sex = '男'; ////可以给一个不存在的字段,赋值,并且还能顺利的获取到 echo '性别:', $family1->sex, '<br>'; ////真实的情况是: 给一个不存在的对象属性赋值,的确会自动添加一个新属性到类中,这个特性听上去似乎不太好,但有时却很有用 ////因为我们可以事先创建一个类属性,专门用来收集用户自定义所数据,增加类的功能 // echo '<hr>'; ////使用类属性设置器__set()再创建一个新属性 $family1->email = 'qgz@php.cn'; // ////直接查看用户自定义的类属性$data数组的内容,此时会输出二个自定义数据 echo '用户自定义属性<pre>'.print_r($family1->data,true).'</pre>'; //
点击 "运行实例" 按钮查看在线实例