批改状态:未批改
老师批语:
主题:
创建一个类,要求有
1. 构造方法
2.查询器:__get()
3.设置器:__set()
并创建一个php脚本进行正确的调用
效果图:

<?php
/*
* 魔术方法:__get(),__set()
*/
class MyPeople2 {
//也可以不赋值,设置为私有属性外部无法直接访问,通过方法访问较安全
private $name;
private $sex;
private $age;
private $hobby;
private $data=[];
//声明一个构造方法:在实例化类的时候自动调用
//构造方法也叫构造器:对象属性的初始化
public function __construct($name='', $sex=0, $age=0, array $hobby=[])
{
$this->name = $name;
$this->sex = ($sex == 0) ? '男' : '女';
$this->age = $age;
$this->hobby = $hobby;
}
//两个下划线开头叫魔术方法,可以访问没有权限读取的属性,由系统直接调用,自动触发。
//查询器:__get()
public function __get($name)
{
//如果类中添加一个自定义的数据收集器$data,就从这里取值
$msg = null;
if(isset($this->name))
{
$msg = $this->$name;
}elseif (isset($this->data[$name])) {
$msg = $this->data[$name];
}else {
$msg = '无此属性,请重新输入。';
}
return $msg;
}
//设置器
public function __set($name, $value)
{
if($name == 'age')
{
if(in_array($value,range(16, 70)))
{
$this->$name = $value;
}
}else {
$this->$name = $value;
}
}
}点击 "运行实例" 按钮查看在线实例
<?php
//加载类文件
require './class/MyPeople2.php';
//实例化对象
$MyPeople2 = new MyPeople2('美女', 1, 18, ['旅游', 'music', '唱歌']);
//调用魔术方法__get()
echo '名字叫做:'.$MyPeople2->name;
echo '<br>';
//调用魔术方法__set()
$MyPeople2->age = 90;
echo '年龄:'. $MyPeople2->age;点击 "运行实例" 按钮查看在线实例
总结:
类文件要独立,类名称与文件名一致,头字母大写,类属性值不能是变量、表达式、对象。
类属性定义几种方式:
共有:public
私有:private
受保护:protected
构造器:__construct()
魔术方法:
查询器:__get()
设置器:__set()
定义常量:const 常量名称全大写
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号