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

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';        //输出:此属性不存在
?>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值