博客列表 >类的创建--5月2日作业

类的创建--5月2日作业

唔良人
唔良人原创
2018年05月04日 12:46:30813浏览

实例

<?php
/医院
 * 人类
 */

class Person
{
    public $name; //姓名
    public $age; //年龄
    public $stature; //三围
    public $data = [];

    /医院
     * 构造方法
     * Person constructor.
     * @param $name
     * @param $age
     * @param $stature
     */
    public function __construct($name, $age, array $stature)
    {
        $this->name = $name;
        $this->age = $age;
        $this->stature = $stature;
    }

    //查询器
    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 (isset($this->$name)) {
            $this->$name = $value; //输出属性
        } else {
            //如果属性不存在,则创建它并保存到类属性$data数组中
            $this->data[$name] = $value;
        }
    }
}

//实例化对象
$xiaoming = new Person('小明', 30, [80, 90, 80]);

//测试魔术方法__get()
echo '姓名: ', $xiaoming->name, '<br>';
echo '年龄: ', $xiaoming->age, '<br>';
echo '三维: ', print_r($xiaoming->stature, true), '<br>';

//获取一个不存在的属性
echo '爱好:', $xiaoming->hobby, '<br>';

echo '<hr>';

//测试魔术方法: __set()
$xiaoming->name = '奶茶妹妹';
$xiaoming->age = 28;
$xiaoming->stature = [85, 85, 88];
echo '姓名: ', $xiaoming->name, '<br>';
echo '年龄: ', $xiaoming->age, '<br>';
echo '三维: ', print_r($xiaoming->stature, true), '<br>';
//给一个不存在的属性赋值,类中并无hobby字段
$xiaoming->hobby = '购物';
//非常诡异的事情发生了,居然可以给一个不存在的字段,赋值,并且还能顺利的获取到,仿佛这个字段真实存在一样
echo '爱好:', $xiaoming->hobby, '<br>';
//真实的情况是: 给一个不存在的对象属性赋值,的确会自动添加一个新属性到类中,这个特性听上去似乎不太好,但有时却很有用
//因为我们可以事先创建一个类属性,专门用来收集用户自定义所数据,增加类的功能


//使用类属性设置器__set()再创建一个新属性
$xiaoming->email = '888888@123.com';

//直接查看用户自定义的类属性$data数组的内容,此时会输出二个自定义数据
echo '用户自定义属性<pre>' . print_r($xiaoming->data, true) . '</pre>';

运行实例 »

点击 "运行实例" 按钮查看在线实例


===========================================+最终效果+==================================================

                          QQ截图20180504124658.png

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议