• 跟着百度学PHP[4]OOP面对对象编程-13-魔术方法__set(),__get(),__isset(),__unset()


    __set()
      在对象访问私有成员的时候自动被调用,达到了给你看,但是不能给你修改的效果!(在对象访问一个私有的成员的时候就会自动的调用该魔术方法)

    __get()
      方法用于获取私有属性值。(在设置私有属性的时候将会自动调用)

    __isset()
      方法用于检测私有属性值是否被设定。(当外部使用isset读类内部进行检测对象是否有具有某个私有成员的时候就会被自动调用!)

    __unset()
      方法用于删除私有属性。(在外部调用类内部的私有成员的时候就会自动的调用__unset魔术方法)

     一篇关于魔术方法的文章:http://blog.csdn.net/binghui1990/article/details/9104725

    00x1 案例一__get(达到了给你看,但是不能给你修改的效果!)

    <?php 
    class human
    {
        private $name;    #定义一个被封装的属性,也就是定义了一个私有的成员。在被调用的时候会,自动的调用__get魔术方法
        public $sex;
        public $age;
    
        public function __get($p){      #定义一个__get魔术方法,记住该魔术方法至少要有一个参数
            echo "##############<br />";
        }
        public function h(){ #定义了一个h方法,只是为了充数的。
            echo "hello world";
        }
    }
    $a=new human();
    echo $a->name;  #在访问了一个私有的成员的时候PHP就会自动的调用__get魔术方法
     ?>
    输出效果如下:
    ##############

    再次对案例一括展(这一个括展主要是认识__get魔术引号在实际运用当中的实际案例)

    <?php 
    class human
    {
        private $name; #定义一个被封装了的$name属性,倘若调用该封装成员将会自动的调用__get方法。
        public $sex;
        public $age;
    
        function __construct($name,$sex,$age)   #对$name、$sex、$age初始化
        {
            $this->name=$name;
            $this->sex=$sex;
            $this->age=$age;
        }
    
        public function __get($p){ #__get魔术方法里面必须要有一个参数。
            echo $this->name."<br />";
            echo $this->$p;
        }
    }
    $a=new human("妹子","",21);
    echo $a->name; #调用name这个被封装的属性(也就是调用了name这个human类中的私有成员)
     ?>
    输出效果
    妹子
    妹子

    00x2 案例二__set

     __set该魔术方法会在要修改一个封装属性的时候自动调用。CODE如下所示

    注:

      该函数至少需要两个参数。

    <?php 
    /**
    * 劝君莫惜金缕衣,劝君珍惜少年时!
    */
    class Human
    {
        private $name;
        private $sex;
        private $age;
    
        function __construct($name,$sex,$age)
        {
            $this->name=$name;
            $this->sex=$sex;
            $this->age=$age;
        }
    
        function __set($x,$y)
        {
            echo "nihao<br />";
        }
    }
    $a = new Human("王大牛","",21);
    $a->name="xxxxxxxxxxxxxxxx";
     ?>
    输出效果如下:
    nihao

    00x3 案例三__isset

    <?php 
    class Human
    {
        public $name;
        public $sex;
        public $age;
    
        function __construct($name,$sex,$age)
        {
            $this->name=$name;
            $this->sex=$sex;
            $this->age=$age;
        }
    
        function __isset($x)  #在此处声明一个__isset的魔术方法,当在类外部使用isset()函数测定私有成员$nm时,自动调用。
        {
            echo "你想判断我的".$x."属性存在不存在。<br />";
        }
    }
    $a=new Human("成大牛","",12);
    if(isset($a->xishaonian)){ #使用isset检测xishaonian这个成员是否在对象a里面。显而易见是不存在的。这时候就会调用__isset方法。
        echo "存在";
    }else{
        echo "不存在";
    }
     ?>
    输出效果如下所示:
    你想判断我的xishaonian属性存在不存在。
    不存在

     

     00x4 案例三__unset

    <?php 
    /**
    * 简单的说就是当外部使用unset对类内部进行删除某个私有成员的时候就会自动调用__unset函数。切记是private也就是私有成员!
    */
    class Human
    {
        private $name;
        private $sex;
        private $age;
        
        public function __unset($x)
        {
            echo "我要努力学习技术成为一名网络安全大牛!";
        }
    }
    $a=new Human("成大牛","",21);
    unset($a->name);
    
     ?>

     一个同时使用了四个魔术方法的案例:

    该CODE来自:http://blog.csdn.net/ebw123/article/details/41699031
    <?php class Person { private $name; private $sex; private $age; public function __get($property_name) { if(isset($this->$property_name)) { return ($this->$property_name); } else { return (NULL); } } public function __set($property_name, $value) { $this->$property_name = $value; } public function __isset($nm) { echo "isset()函数测定私有成员时,自动调用<br>"; return isset($this->$nm); } public function __unset($nm) { echo "当在类外部使用unset()函数来删除私有成员时自动调用的<br>"; unset($this->$nm); } } $p1 = new Person(); $p1->name = "this is a person name"; echo var_dump(isset($p1->name))."<br>"; echo $p1->name."<br>"; unset($p1->name); echo $p1->name;

    THE END


  • 相关阅读:
    为什么电影里的黑客都不屑用鼠标? (转)
    专注做好一件事(转) focus---这个世界上最成功的人,他们在某一领域获得成功之后,可通过经营杠杆进入任何他们想要涉足的领域。而这都得依赖于他们曾极致的专注在做好一件事情上。
    世间万物都是遵循某种类似的规律,谁先把握了这些规律,谁就最早成为了强者。
    走的时候不要太急,有时间要停下来想一想当初为什么而走,这样,才会走的更稳,走的更明白。
    Android笔记: Android版本号
    Android笔记:真机调试无法输出Log 信息的问题
    阿里云服务器试用
    Android笔记:利用InputStream和BufferedReader 进行字节流 字符流处理
    Android笔记:java 中的数组
    Android笔记:C memory copy
  • 原文地址:https://www.cnblogs.com/xishaonian/p/6170459.html
Copyright © 2020-2023  润新知