php类代码如下
<?php class lei { // 声明类属性 public $name = ''; //这种声明可以直接访问调用 private $age = 18; //私密的,调用需要端口 private $grade = 66; private $data=[]; //构建类方法 public function __construct($name = '',$age = 18,$grade = 66) { $this->name = $name; $this->age = $age; $this->grade = $grade; } //魔术方法:查询器__get() public function __get($age){ // 检测访问不存在的值给出提示 $msg = null; if(isset($this->$age)){ $msg=$this->$age; } elseif (isset($this->data[$age])) { $msg = $this->data[$age]; } else { $msg = '无此属性'; } return $msg; } //魔术方法:设置器———set() public function __set($grade, $value) { //完善设置器,实现对不存在属性的创建 //如果访问的是已存在的属性,则直接输出 if (isset($this->$grade)) { $this->$grade = $value; } else { //如果属性不存在,则创建它并保存到类属性$data数组中 $this->data[$grade] = $value; } } }
调用代码如下
<?php require '作业30.php'; $lei = new lei('赵雷',20,90); //测试——get()方法 echo '姓名:'.$lei->name.'<br>'; echo '年龄:'.$lei->age.'<br>'; echo '成绩:'.$lei->grade.'<br>'; echo '爱好:'.$lei->hobby.'<br>'; //不存在属性 //测试-set()方法 $lei->name = '韩梅梅'; $lei->age = '21'; $lei->grade = '89'; //给一个不存在属性 $lei->hobby= '赵雷'; echo '姓名:'.$lei->name.'<br>'; echo '年龄:'.$lei->age.'<br>'; echo '成绩:'.$lei->grade.'<br>'; echo '爱好:'.$lei->hobby.'<br>'; echo '用户自定义属性<pre>'.print_r($lei->data,true).'</pre>';
样式如下