博客列表 >两个魔术方法(__get()和__set())的使用练习

两个魔术方法(__get()和__set())的使用练习

LIWEN的博客
LIWEN的博客原创
2018年01月11日 11:49:41565浏览

魔术方法:是指PHP为我们提供的一系列用双下划线(__)开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数。
* 比如之前使用过的 function __construct(){}, 构造函数,在new一个新对象时自动调用此函数
* 1、__get() 当用户访问一个不存在或者无权访问的属性的时候,自动调用
* 2、__set() 当用户对一个不存在或者无权访问的属性赋值的时候,自动调用

执行结果如下图:

2018-01-11_114802.png

代码如下:

<?php
class Books1
{
    private $name;
    protected $price;
    //用__construct()这个构造函数来初始化属性值。__construct()函数在用户创建对象时,自动执行。
    public function __construct($name='《思考,快与慢》',$price=69)
    {
        $this->name = $name;
        $this->price = $price;
    }

    //1、__get()魔术方法的使用
    public function __get($proName)  //$proName 是属性名
    {
        //用条件判断来实现对私有属性和受保护属性的有条件的外部调用
        if ($this->price == 69 || $this->name == '《思考,快与慢》'){
            return $this->$proName;
        }else{
            return '您无权访问该属性';
        }
    }
    //2、__set()魔术方法的使用
    public function __set($proName, $proValue)  //$proName是属性名,$proValue 是属性值
    {
            return $this->$proName = $proValue;  //将属性值赋值给属性
    }
}

$obj1 = new Books1();
echo $obj1->name.'售价:';
echo $obj1->price.'元/本';
echo '<hr>';

$boj2 = new Books1();
echo $boj2->name = '《智识分子》'.'售价:';
echo $boj2->price = '65'.'元/本';
echo '<hr>';
echo $boj2->name = '《完全写作手册》'.'售价:';
echo $boj2->price = '78'.'元/本';


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