php面向对象之_get(),_set()拦截器

4 篇文章 0 订阅

面向对象的三大特性之一就是封装性。所以当申明字段时一般是申明私有字段。那么如何去读取或者修改这些字段呢,就要用到$this关键字。
首先我们创建一个类。

class Animal{
    private $name = dog;
    public function getname(){
        return $this->name;
    }
    public function setname($value){
        $this->name=$value;
    }
}

如果当需要读取或修改字段时直接调用getname()和setname()方法了,但是如果当有大量属性时一个一个去写get,set方法就会非常麻烦。这时候就需要用到php拦截器_get(),_set()方法了。
先上代码:

class Animal{
    private $name = dog;
    private $age = 2;
    private $weigth = 5; 
    public _get($name){
        return $this->$name;
    }
    public _set($name,$value){
        $this->$name=$value;
    }
}

这时候无论想得到或改变哪些字段只需要调用这两个方法了

$cat = new Animal();
$cat->_set('name','lili');
$catname = $_get('name');
echo $catname;

这里就输出:lili了。
其实一般拦截器都是private方法,如:

class Animal{
    private $name = dog;
    private $age = 2;
    private $weigth = 5; 
    private _get($name){
        return $this->$name;
    }
    private _set($name,$value){
        $this->$name=$value;
    }
}
$cat = new Animal();
$cat->name;
$cat->name=lili;

这样子调用属性和修改属性也是可以的,这是为什么呢
这时候__set()和__get()方法私有了,还是可以执行,是因为目前程序的指针已经在类内了。而类内可以执行封装的方法,类内执行私有方法,不会出现任何错误。它只需要间接的拦截就可以了。拦截是在内类执行的。所以,__set()和__get()是PHP内置的方法,具有一定的特殊性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值