博客列表 >构造方法、__get()、__set()--2018年5月4日1时9分发布(5月2日作业)

构造方法、__get()、__set()--2018年5月4日1时9分发布(5月2日作业)

lilove的博客
lilove的博客原创
2018年05月04日 01:34:56702浏览

主题:

创建一个类,要求有
1. 构造方法
2.查询器:__get()
3.设置器:__set()
并创建一个php脚本进行正确的调用

效果图:

效果.png

构造方法、__get()、__set()代码:

<?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 常量名称全大写

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