重载技术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的重载技术,实现通常的“方法重载”:

以下为测试代码:

最新文章

  1. NOIP2013pj车站分级[拓扑排序]
  2. 第三方支付过程中session失效问题
  3. WPF 复制和粘贴
  4. 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
  5. Game start
  6. aix5下安装python和cx_Oracle
  7. SQL Server查询性能优化——堆表、碎片与索引(二)
  8. 抓取锁的sql语句-第七次修改
  9. 将域名转移到 Google Domains
  10. ubuntu 一些琐碎知识
  11. 【HTTP协议】
  12. 机器学习之类别不平衡问题 (2) —— ROC和PR曲线
  13. Shell 正则表达式总结及其含义举例
  14. SQL Sever AlwaysOn的数据同步原理
  15. kylin cubing algorithm(算法)
  16. DOM(三)
  17. kvm 虚拟机XML文件
  18. 蜕变成蝶~Linux设备驱动之中断与定时器
  19. mybatis 插件安装与使用
  20. Flask简介,安装,demo,快速入门

热门文章

  1. ubuntu配置机器学习环境(二) cuda 和cudnn 安装
  2. Linux入门第五天——shell脚本入门(上)基本概念
  3. 小程序if else 判断显示隐藏
  4. 修改Tomcat控制台标题(转)
  5. 树链剖分学习&BZOJ1036
  6. [agc006E]Rotate 3x3
  7. IDEA 运行报错 failed to create a child event loop
  8. 通过java反射机制获取该类的所有属性类型、值
  9. spark submit参数及调优(转载)
  10. 06004_Redis的启动、使用和停止