PHP中魔术方法__get和__set的用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36431166/article/details/84492869

PHP中,魔术方法有很多种,本文章给大家记录分享:__get\__set的用法跟理解

首先,我们得明白oop中的三个访问修饰符:public、protected、private

分别的意思:

1、公共的,任何地方都可以访问,包括本类,子类,外部

2、受保护的成员属性或者方法,只能在本类或者子类中访问

3、私有的,只能在本类中访问

那么__get,__set就跟这修饰符存在跟很大的关系

  • __get:当访问一个不是公开成员属性时被调用,一个不存在的属性被调用也会执行
  • __set:当给一个不是公开成员属性赋值时被调用,给一个不存在的属性赋值也会执行

看案例代码:

<?php
    class Car
    {
        protected $price = 300000;
    }

    /*
    *魔术方法 __get
    *@param pre_name 属性名称
    */
    function __get($pre_name)
    {
            if(isset($this->$pre_name))
            {
                return $this->$pre_name;
            } else
            {
                echo '此属性不存在';
            }
        
    }
    
    /*
    *当访问一个受保护的属性时 __get被调用
    *此时通过魔术方法让外部也可以访问到
    */  
    $lexus = new Car();
    echo $lexus->price;  //输出300000

    /*
    *当访问一个不存在的属性时 __get也会被调用
    */ 
    echo $lexus->types;        //输出:此属性不存在
?>

这是一个车类,价格不是公开的,当某个人硬是要知道这辆雷克萨斯的价格时,可以用__get方法。

下面是__set

<?php
    class Car
    {
        protected $price = 300000;
    }

    /*
    *魔术方法 __set
    *@param pre_name 属性名称  val  属性值
    */
    function __set($pre_name,$val)
    {
            if(isset($this->$pre_name))
            {
                $this->$pre_name = $val;
            } else
            {
                echo '此属性不存在';
            }
        
    }
    
    /*
    *当设置一个不公开的属性值时 __set被调用
    */  
    $lexus = new Car();
    $lexus->price = 3000000;

    /*
    *当设置一个不存在的属性时 __set也会被调用
    */ 
    $lexus->types = 'XFS';        //输出:此属性不存在
?>

猜你喜欢

转载自blog.csdn.net/qq_36431166/article/details/84492869