PHP面向对象中__get和__set以及__unset的理解

    这两个函数主要用在面向对象中。

    类有很多private属性的变量,这些对象在类外是不能被调用的,但是有时候你却非常的想在类外对这类对象进行赋值操作,如果你是一名C++程序员的话肯定会这样做:

class A

{

  private:
    int name;

    int age;

    int id;
  public:

     int set_name(int a)

     {

        this->name = a;

    }

}


 

   这样就可以对私有变量name进行赋值,但是这样的缺陷是,你要是在类外想对idage赋值的时候需要接着再写两个函数。

   如果是PHP程序的话,遇到此类问题你就会从容多了。因为PHP为我们提供了__set函数。

对于这几个函数,我是这么理解的。

__set 可以修改对应私有变量的值,同时也对私有变量进行了一些特殊处理,这个特殊处理的结果就是isset()变量,返回值为真。

__get 外部可以直接获取变量的值。

__unset 调用这个函数相当于注销了变量,__isset的时候返回false

   下面我们就看看PHP是怎么解决这个问题的。以下是一段PHP代码:

  用法就是这样的

 class Base

{

    private $name;

    function __set($property_name,$value)

    {

     $this->property_name = $value; 

     } 

    function __get($property_name)

    {

            /*先判断私有变量$this->property_name有没有被设置为外部可见*/

     if(isset($this->property_name))

     return $this->property_name;

     else

     return NULL; 

    }

    function __isset($property_name)

    {

     return isset($this->property_name); 

    }

        function __unset($property_name)

  {

    unset($this->property_name);

  }

}



  $p = new Base();

  $p->name = "PHP Code";/*可以直接对name赋值,无视其private属性*/

  echo $p->name;   /*可以直接打印*/

  unset($p->name); /*取消name外部可见的属性*/

  echo $p->name; /*这个时候就非法了*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值