博主信息
博文 44
粉丝 3
评论 3
访问量 40713
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
类的创建--5月2日作业
唔良人
原创
1010人浏览过

实例

<?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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学