魔术方法__get()、__set()和__call()的用法

刚开始学习魔术方法时对__get()、__set() 和__call()的用法和作用不是太了解,也有一些误解。。。

现在分享一下个人的理解,大家共勉一下:

__get()、__set() 和__call()是很常用的,虽然不像__construct、__destruct运用的那么多,但是它们地位也是毋庸置疑的,

__construct、__destruct大家肯定非常熟悉了,在这就不多说了,直接看—————__get()、__set() 和__call();

1. __call :  

规则:

mixed __call(string $name,array $arguments)

当调用类中不存在的方法时,就会调用__call();

为了更好的理解,看一下例子:

<?php
class Test{
     public function __call($method,$args){
          echo $method;
          var_dump($args);
        }   
    }  
     $ob=new Test();
     $ob->hello(1,2);
?>

上面的例子将输出:

hello

Array(

[0]=>1

[1]=>2

2.__get() 和__set():

规则:

get :
mixed __get(string $name)
set:
void __set(string $name ,mixed $value)

__get()是访问不存在的成员变量时调用的;

__set()是设置不存在的成员变量时调用的;

为了更好的理解,看一下例子:

<?php
class Test{
       public $c=0;
       public $arr=array();
       
       public function __set($x,$y){
            echo $x . "/n";
            echo $y . "/n";
            $this->arr[$x]=$y;
        }    
        public function __get($x){
            echo "The value of $x is".$this->arr[$x];

        }   
} 
$a = new Test;
$a->b = 1 ;//成员变量b不存在,所以会调用__set
$a->c  = 2;//成员变量c存在,所以无任何输出
$d=$a->b;//  成员变量b不存在,所以会调用__get     
?>

上面的例子将输出:

b

1

The value of b is 1

希望可以帮到大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦茶子12138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值