批改状态:合格
老师批语:
面向对象:类:构造器、__get查询器、__set设置器
<?php
/*
* 1.类魔术方法:__get(),__set()实现属性查询器和设置器
* 2.魔术方法之前介绍过了,需要特定场景触发,由对象自动调用
* 3.__get($name): 外部通过对象获取对象私有属性或不存在的属性时自动触发
* 4.__set($name,$value):外部设置私有属性或不存在属性值的时候自动触发
* 5.魔术方法可以适用于所有存在或不存在的类属性,不需要再为每个属性创建对应的访问接口
*
* public(公有) protected(受保护) private(私有)
*/
class GirlFriend
{
//1.声明属性
private $name;
private $age;
private $stature;
private $data=[];
//2构造方法
public function __construct($name,$age,$stature,array $data=[])
{
$this->name = $name;
$this->age = $age;
$this->stature = $stature;
$this->data = $data;
}
//魔术方法:查询器
public function __get($name)
{
$msg = null; //如果类中添加一个自定义的数据收集器$data,就从这里取值
if (isset($this->$name)) {
$msg = $this->$name;
} else if (isset($this->data[$name])) {
$msg = $this->data[$name];
} else {
$msg = '无此属性';
}
return $msg;
}
//魔术方法:设置器
public function __set($name, $value)
{
if(isset($this->$name)) { //检测是否存在
$this->$name = $value; //存在就输出当前属性
} else {
//如果属性不存在,则创建它并保存到类属性$data数组中
$this->data[$name] = $value;
}
}
}点击 "运行实例" 按钮查看在线实例
<?php
/**
* 面向对象编程
* 魔术方法:_get() 和 _set()
*/
//导入类
require 'class/GirlFriend.php';
$GirlFriend = new GirlFriend('风一样的年纪',50,170,[80,85,90]);
echo '姓名:',$GirlFriend->name,'<br>';
echo '年龄:',$GirlFriend->age,'<br>';
echo '身高:',$GirlFriend->stature,'<br>';
echo '三围:',print_r($GirlFriend->data,true),'<br>';
echo "<hr>";
//更新以上数据
$GirlFriend->name = '颖宝宝';
$GirlFriend->age = 30;
$GirlFriend->stature = 160;
$GirlFriend->data = [70,76,80];
//identity此字段是不存在的,也未声明过,居然也可以给一个不存在的字段,赋值,并且还能顺利的获取到,仿佛这个字段是真实存在一样
$GirlFriend->identity = '演员';
//真实的情况是: 给一个不存在的对象属性赋值,的确会自动添加一个新属性到类中,这个特性听上去似乎不太好,但有时却很有用
//因为我们可以事先创建一个类属性,专门用来收集用户自定义所数据,增加类的功能
echo "姓名:",$GirlFriend->name,'<br>';
echo "年龄:",$GirlFriend->age,'<br>';
echo "身高:",$GirlFriend->stature,'<br>';
echo "三围:",print_r($GirlFriend->data,true),'<br>';
echo "身份:",$GirlFriend->identity,'<br>';
//使用类属性设置器__set()再创建一个新属性
$GirlFriend->email = 'milk_tea@php.cn';
//直接查看用户自定义的类属性$data数组的内容,此时会输出二个自定义数据
echo '用户自定义属性:',$GirlFriend->email;点击 "运行实例" 按钮查看在线实例
效果预览图:

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号