Blogger Information
Blog 29
fans 0
comment 0
visits 27249
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
两个魔术方法(__get()和__set())的使用练习
LIWEN的博客
Original
570 people have browsed it

魔术方法:是指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'.'元/本';


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post