• PHP面向对象之重载


    重载技术overloading

    重载的基本概念

    重载在“通常面向对象语言”中的含义:

    是指,在一个类(对象)中,有多个名字相同但形参不同的方法的现象;

    类似这样:

    class   C{

    function  f1(){。。。}

    function  f1($p1){。。。}

    function  f1($p1,  $p2  ){。。。}

    }

    $c1 = new C();

    $c1->f1();

    $c1->f1(2);

    $c1->f1(3,4);

    重载在php语言”中的含义:

    是指,当对一个对象或类使用其未定义的属性或方法的时候,其中的一些“处理机制”;

    比如:

    class  A{

    public  $p1 = 1;

    }

    $a1 = new A();

    echo   $a1->p1; //1

    echo   $a1->p2; //出错,未定义的属性!

    则:php中的重载技术,就是来应对上述“出错”的情况,使代码不出错,而且还能“优雅处理”;

    举例:

     

    结果为:

     

    使用php的重载技术,上述代码修改为:

     

    则结果是:

     

    属性重载

    就是对一个对象的不存在的属性进行使用的时候,这个类中预先设定好的应对办法(处理机制);

    属性,本质,就是变量,其只有4个操作:

    取值:

    当对一个对象的不存在的属性进行“取值”的时候,就会自动调用内部方法:__GET()

    赋值:

    当对一个对象的不存在的属性进行“赋值”的时候,就会自动调用内部方法:__SET()

    判断(isset):

    当对一个对象的不存在的属性进行isset()判断的时候,就会自动调用内部方法:__isset()

    销毁(unset):

    当对一个对象的不存在的属性进行unset()销毁的时候,就会自动调用内部方法:__unset()

    以上,4个方法,被称为“魔术方法”;

    __GET($属性名)

    在对一个对象的不存在的属性进行“取值”的时候,会自动调用的方法;

    我们其实是可以使用该方法来对这种“意外”情况进行某种特别的处理。

    其中,该方法可以带一个形参,表示这个要对之取值的不存在的属性名(字符串);

     

    __SET($属性名,值)

    当对一个对象的不存在的属性进行“赋值”的时候,就会自动调用这个内部的魔术方法;

    它有2个形参,分别代表要对不存在的属性进行赋值的时候的“属性名”和“属性值”;

    这个方法,结合__GET方法,往往可以使我们定义的类,就有一种“可方便扩展属性”的特性。

    即:类(或对象)的属性,可以更为方便自由,如下所示:

     

    __ISSET($属性名)

    当对一个对象的不存在的属性进行isset()判断的时候,就会自动调用内部方法:__isset()

    用法:

    $v1 = isset($对象 -> 不存在的属性); // 此时就会调用这个对象的所属类中的魔术方法:__isset()

     

     

    __UNSET($属性名)

    当对一个对象的不存在的属性进行unset()销毁操作的时候,就会自动调用内部方法:__unset()

     

    测试代码:

     

    结果:

     

    方法重载

    当对一个对象的不存在的实例方法进行“调用”的时候,会自动调用类中的__call()这个魔术方法;

    当对一个类的不存在的静态方法进行“调用”的时候,会自动调用类中的__callstatic()这个静态魔术方法

    基本应用实例:

     

    改为:

     

    利用php的重载技术,实现通常的“方法重载”:

     

    以下为测试代码:

     

  • 相关阅读:
    4、Cocos2dx 3.0三,找一个小游戏开发Hello World 分析
    Android Bluetooth开发
    详细解析BluetoothAdapter的详细api
    Android 蓝牙( Bluetooth)耳机连接分析及实现
    [Andriod官方API指南]连接之蓝牙
    Android蓝牙A2dp profile的使用
    Android中文API(129) —— AudioManager
    Android中的Audio播放:控制Audio输出通道切换
    JAVA ANDROID SOCKET通信检测(SERVER)连接是否断开
    Android Xfermode 实战 实现圆形、圆角图片
  • 原文地址:https://www.cnblogs.com/457248499-qq-com/p/7384534.html
Copyright © 2020-2023  润新知