PHP魔术方法之__iset,__unset详解(代码实例)-php教程

资源魔 42 0

本文指标:

一、理解PHP中魔术办法的界说

二、理解__isset()魔术办法的应用场景

三、把握__isset()魔术办法的用法

四、理解__unset()魔术办法的应用场景

五、把握__unset()魔术办法的用法

(一)、理解PHP中魔术办法的界说

PHP 将一切以 __(两个下划线)扫尾的类办法保存为魔术办法。以是正在界说类办法时,除了了上述魔术办法,倡议没有要以 __ 为前缀。

这2个魔术办法,另有个叫法,也还能够称作属性重载的魔术办法

以是今朝为止咱们学了4个属性重载的魔术办法了,另有上篇文章中的另外两个__get,__set

(二)理解__isset()魔术办法的应用场景

当心愿正在isset(没有存正在的属性)或许empty(没有存正在的属性)时,没有报错,咱们能够正在类中界说__isset魔术办法,此刻它会被主动执行

(三)、把握__isset()魔术办法的用法

总结:

一、PHP中__isset正在类中界说格局以下 public function __isset(参数1),这里留意必需是2个__,必需是__isset,并且必需是要带1个参数,多一个少一个都没有行

二、当isset没有存正在的属性时,零碎会主动触发工具所正在类的界说好的__isset办法

三、当empty()没有存正在的属性时,零碎会主动触发工具所正在类的界说好的__isset办法

每一个总结都是经过理论患上进去的,如今咱们用理论来演示总结,这样能够促成了解,让每一个总结了解起来愈加明晰,直观

案例1、

理论指标:

一、PHP中__isset正在类中界说格局以下 public function __isset(参数1),这里留意必需是2个__,必需是__isset,并且必需是要带1个参数,多一个少一个都没有行

详细代码以下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术办法 
    public  function __isset($name){
        echo "主动执行了Animal类中的__isset办法<br/>";
    }
}
$ani = new Animal();
?>

运转后果以下:

空缺,阐明不报错

如今咱们试着没有加参数看下

详细代码以下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术办法 
    public  function __isset(){
        echo "主动执行了Animal类中的__isset办法<br/>";
    }
}
$ani = new Animal();
?>

运转后果以下:

Fatal error: Method Animal::__isset() must take exactly 1 argument in D:\E-class\class-code\classing\index.php on line 11

因而可知,__isset办法有且只能有一个参数

案例2、

理论指标:

一、当isset没有存正在的属性时,零碎会主动触发工具所正在类的界说好的__isset办法

详细代码以下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术办法 
    public  function __isset($name){
        echo "主动执行了Animal类中的__isset办法<br/>";
    }
}
$ani = new Animal();
isset($ani->name);
?>

运转后果以下:

主动执行了Animal类中的__isset办法

咱们发现其实咱们不手动的去挪用__isset办法,也就是说不写成$ani->__isset(),然而这个办法仍然执行了,由于甚么呢?由于咱们写了isset($ani->name);而这个name属性不正在类中界说,而后这个类中又界说了这个魔术办法,以是它就像魔术同样,忽然就被主动执行了

这里肯定要留意,是2个下划线,没有是一个,不然就没有是魔术办法了,上面仍是再来做下测试

详细代码以下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术办法 试着少写一个_
    public  function _isset($name){
        echo "主动执行了Animal类中的__isset办法<br/>";
    }
}
$ani = new Animal();
isset($ani->name);
?>

运转后果以下:

空缺

阐明刚刚阿谁__isset办法不被主动执行了,以是肯定要留意是2个下划线,就如同结构函数以及析构函数同样,都是两个下划线

案例3、

理论指标:

一、当empty()没有存正在的属性时,零碎会主动触发工具所正在类的界说好的__isset办法

详细代码以下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术办法
    public  function __isset($name){
        echo "主动执行了Animal类中的__isset办法<br/>";
    }
}
$ani = new Animal();
empty($ani->name);
?>

运转后果以下:

主动执行了Animal类中的__isset办法

因而可知,会主动触发类中界说好的__iset魔术办法的场景,除了了正在isset没有存正在的属性时,还正在empty没有存正在的属性时

(四)、理解__unset()魔术办法的应用场景

当心愿正在unset()没有存正在的属性时能够自界说本人的逻辑,咱们能够正在类中界说__unset办法,此刻它会被主动执行,咱们能够正在外面写自界说逻辑

(五)、把握__unset()魔术办法的用法

总结:

一、PHP中__unset正在类中界说格局以下 public function __unset(参数1),这里留意必需是2个__,必需是__unset,并且必需是要带1个参数,多一个少一个都没有行

二、当unset没有存正在的属性时,零碎会主动触发工具所正在类的界说好的__unset办法

每一个总结都是经过理论患上进去的,如今咱们用理论来演示总结,这样能够促成了解,让每一个总结了解起来愈加明晰,直观

案例1、

理论指标:

一、PHP中__unset正在类中界说格局以下 public function __unset(参数1),这里留意必需是2个__,必需是__unset,并且必需是要带1个参数,多一个少一个都没有行

详细代码以下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术办法
    public  function __unset($name){
        echo "主动执行了Animal类中的__unset办法<br/>";
    }
}
$ani = new Animal();
?>

运转后果以下:

空缺

阐明不报错,如今咱们来试着没有写参数看下

详细代码以下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术办法
    public  function __unset(){
        echo "主动执行了Animal类中的__unset办法<br/>";
    }
}
$ani = new Animal();
?>

运转后果为:

Fatal error: Method Animal::__unset() must take exactly 1 argument in D:\E-class\class-code\classing\index.php on line 11

因而可知,__unset魔术办法,参数有且只能有一个

案例2、

理论指标:

一、当unset没有存正在的属性时,零碎会主动触发工具所正在类的界说好的__unset办法

详细代码以下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术办法
    public  function __unset($name){
        echo "主动执行了Animal类中的__unset办法<br/>";
    }
}
$ani = new Animal();
unset($ani->name);
?>

运转后果以下:

主动执行了Animal类中的__unset办法

咱们发现其实咱们不手动的去挪用__unset办法,也就是说不写成$ani->__unset(),然而这个办法仍然执行了,由于甚么呢?由于咱们写了unset($ani->name);而这个name属性不正在类中界说,而后这个类中又界说了这个魔术办法,以是它就像魔术同样,忽然就被主动执行了

这里肯定要留意,是2个下划线,没有是一个,不然就没有是魔术办法了,上面仍是再来做下测试

详细代码以下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术办法 试着少写一个_
    public  function _unset($name){
        echo "主动执行了Animal类中的__unset办法<br/>";
    }
}
$ani = new Animal();
unset($ani->name);
?>

运转后果以下:

空缺

因而可知,__unset魔术办法不被主动执行了,以是肯定要记患上__unset魔术办法也是2个下划线

(六)、总结

一、本文次要讲了__isset,__unset的应用场景,界说和详细的完成办法

心愿本文能给各人带来肯定的协助,谢谢!!!

以上就是PHP魔术办法之__iset,__unset详解(代码实例)的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 魔术方法

抱歉,评论功能暂时关闭!