• 技术文章 >后端开发 >php教程

    五分钟带你了解PHP中的魔术方法(实例详解)

    长期闲置长期闲置2021-10-25 18:05:07原创143
    在之前的文章中给大家带来了《PHP中clone关键字和__clone()方法的使用(实例详解)》,其中给大家详细的介绍了PHP中的clone关键字和__clone()方法,本篇文章继续给大家带来PHP中的魔术方法,希望对大家有帮助!

    在我们之前的文章中,我们介绍__clone()方法的时候提到,这是魔术方法的一种,《带你分清类中的构造函数与析构函数》中也提到的构造函数与析构函数也叫作构造方法与析构方法,他们也是魔术方法的一种。那么什么是魔术方法?它有哪些常用的方法?它又是怎样使用的?接下来我们一起来看一看吧。

    PHP魔术方法

    在PHP面向对象编程中,PHP里有一系列的魔术方法,这些魔术方法看看之前学习的__clone\__construct\__destruct我们能发现一个共同点,那就是它们都是由__两个下划线开始的,并且都是在某种特定的条件下自动调用的。

    那接下来我们来看一看一些常用的魔术方法,结合实例来看一下它们的使用方法。

    __set()方法

    __set()方法用于在为当前环境下未定义或不可见的类属性赋值时,需要注意的是所有的魔术方法,都是在某种特定条件下自动调用的,为当前环境下未定义或不可见的类属性赋值时就是__set()方法调用的特定条件。

    语法格式如下:

    public function __set(要操作的变量, 要操作变量的值){
        ... ... ;
    }

    实例如下:

    <?php
        class father{
            public $study1;
            private $study2;
            public function __set($key, $value){
                echo '为“'.$key.'”赋值“'.$value.'”失败!<br>';
            }
        }
        $object          = new father();
        $object -> study1  = '好好学习';
        $object -> study2   = '天天向上';
        $object -> study3 = '福如东海';
    ?>

    输出结果:

    1025.11.png

    由上述实例看出,当当前环境下未定义或不可见的类属性赋值时,就会调用__set()方法。

    __get()方法

    自动调用 __get() 方法的特定条件是在调用或获取当前环境下未定义或不可见的类属性时,定义该方法的语法格式如下:

    public function __get($name){
        ... ... ;
    }

    其中参数$name表示要操作的变量名称,下面通过实例我们来看一下__get()方法的使用,实例如下:

    <?php
        class father{
            public $study = '好好学习';
            private $study1 = '天天向上';
            public function __get($study1){
                echo '获取:“'.$study1.'”失败!';
            }
        }
        $object = new father();
        echo $object -> study.'<br>';
        echo $object -> study1.'<br>';
        echo $object -> study2.'<br>';
    ?>

    输出结果:

    1025.12.png

    由上述结果可以看出在调用或获取当前环境下未定义或不可见的类属性时,会自动调用 __get() 方法。

    __isset() 方法

    自动调用 __isset() 方法的特定条件是当在类外部对类中不可访问或不存在的属性使用 isset()empty() 函数时,该方法的语法格式如下:

    public function __isset($name){
        ... ... ;
    }

    其中我们需要注意的是:

    参数 $name 为要访问的属性名称。

    接下来我们通过实例来看一下__isset()方法的使用,实例如下:

    <?php
        class father{
            public $study = '好好学习';
            private $name = '天天向上';
            public function __isset($name){
                if(property_exists('Website', $name)){
                    echo '成员属性:“'.$name.'”存在!<br>';
                }else{
                    echo '成员属性:“'.$name.'”不存在!<br>';
                }
            }
        }
        $object = new father();
        isset($object -> mother);
        isset($object -> name);
    ?>

    输出结果:

    1025.13.png

    其中我们需要注意的是,property_exists() 函数可以用来检测类中是否定义了该属性,语法格式为

     property_exists($class_name,$property_name)

    其中 $class_name 为字符串形式的类名,即判断类 class_name 中是否定义了 property_name 属性。

    __unset() 方法

    自动调用__unset() 方法的特定条件是当在类外部对类中不可访问或不存在的属性使用 unset() 函数时,该方法的语法格式如下:

    public function __unset($name){
        ... ... ;
    }

    其中我们需要注意的是:

    接下来我们通过实例来看一下__unset()方法的使用,实例如下:

    <?php
        class father{
            public $name = 'http://c.biancheng.net/php/';
            private $study = 'C语言中文网';
            public function __unset($study){
                if(property_exists('father', $study)){
                    unset($this->$study);
                    echo '移除成员属性:“'.$study.'”成功!<br>';
                }else{
                    echo '成员属性:“'.$study.'”不存在!<br>';
                }
            }
        }
        $object = new father();
        unset($object->name);
        unset($object->study);
        unset($object->study1);
    ?>

    输出结果:

    1025.14.png

    由上述实例看出当在类外部对类中不可访问或不存在的属性使用 unset() 函数时,__unset() 方法会被自动调用。

    上述实例中给大家介绍了一些常用的魔术方法,但这并不是魔术方法的全部,那接下来再给大家列举一些魔术方法:

    大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

    以上就是五分钟带你了解PHP中的魔术方法(实例详解)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:PHP 魔术方法
    上一篇:PHP中clone关键字和__clone()方法的使用(实例详解) 下一篇:PHP中怎样完成Cookie的创建、读取和删除?
    大前端线上培训班

    相关文章推荐

    • php中魔术方法和魔术常量是什么• 一分钟吃透PHP中的11个魔术方法• php中魔术方法的概念是什么• php魔术方法__get()和__set()怎么用• php call魔术方法的作用是什么

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网