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

以下为测试代码:

PHP面向对象之重载的更多相关文章

  1. PHP面向对象_重载新的方法(parent::)

    在学习PHP 这种语言中你会发现, PHP中的方法是不能重载的, 所谓的方法重载就是定义相同的方法名,通过“参数的个数“不同或“参数的类型“不 同,来访问我们的相同方法名的不同方法.但是因为PHP是弱 ...

  2. JAVA面向对象之重载与重写

    重写:子类对父类方法的重新编写 返回值不变,形参不变 不能抛出新的或者范围更广的异常 class Animal{ public void move(){ System.out.println(&quo ...

  3. Python面向对象----继承, 重载

    1. 面向对象三大特性之继承. 继承的便捷是子类可以直接调用父类里面的方法和属性.(在强类型语言里面是只能调用公有成员), 不用重复的造轮子. 减少程序猿的负担.实现多态等上层结构 2. 父类代码 3 ...

  4. Java面向对象----方法重载

    方法重载(over load):方法名相同,参数列表不同,返回类型无关 package com.tanlei.newer; public class OverLoadDemo { public sta ...

  5. JAVA面向对象 - 方法重载与覆盖

    方法重载 方法重载就是在类的同种实现方式,到底采用哪种方式,取决与调用者给出的参数.方法重载特点是方法名相同,方法的参数类型,个数,顺序至少有一项不同,方法返回类型可以不同,方法的修饰符可以不同,只是 ...

  6. Python笔记_第三篇_面向对象_3.重载(overloading)和重写(overriding)

    1. 重载: overloading:就是将函数重新定义一遍. 1.1 __str__( )和__repr__( )的重载: 格式: __str__( ):在调用print打印对象时自动调用,是给用户 ...

  7. Java阶段性测试--知识点:数组,面向对象,集合、线程,IO流

    #Java基础测试 涉及知识点:数组,面向对象,重载,重写,继承,集合,排序,线程,文件流 一.多项选择题(可能是单选,也可能是多选) 1.下列标识符命名不合法的是(   D  ). A.$_Name ...

  8. PHP的重载及魔术方法

    首先你要知道什么是php的魔术方法,它不是变魔术的,如果你想学习变魔术来错地方了哦! 定义:PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法.所以在定义类方法时,除了上述魔术方法,建议不 ...

  9. override与重载(overload)的区别

    重载是相同函数名字.参数或参数类型不同,进行多次承载以适应不同的需要.(orerload)是面向过程的重载. (override)是面向对象的重载.是进行基类中的函数重写.

随机推荐

  1. 海面波浪模拟 MATLAB

    数学建模美赛集训的时候要用到一个海面模拟,分享一下海面模拟的MATLAB代码 先贴一下结果图: 下面是源代码~~~ function waterwave n = 64; % grid size g = ...

  2. gcd 模板

    声明 给 x,y 两个数,求 x,y 的最大公因数. 辗转相除法,直接套!!! function gcd(x,y:longint):longint; begin then exit(x) else e ...

  3. 20155235 《Java程序设计》 实验二 实验三 敏捷开发与XP实践

    20155235 <Java程序设计> 实验二 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验内容 没有Linux基础的同学建议先学习<Linux基础入 ...

  4. js创建对象 object.create()用法

    Object.create()方法是ECMAScript 5中新增的方法,这个方法用于创建一个新对象.被创建的对象继承另一个对象的原型,在创建新对象时可以指定一些属性. 语法: Object.crea ...

  5. PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理

    只要有人用了: select t.* from 表名  t where 字段=xxx  for update 而不是: select t.rowid,t.* from 表名  t where 字段=x ...

  6. linux、WINDOWS命令行下查找和统计行数

    linux : 例子: netstat -an | grep TIME_WAIT | wc -l |  管道符 grep 查找命令 wc 统计命令 windows: 例子: netstat -an | ...

  7. 使用闭包的方式实现一个累加函数 addNum

    使用闭包的方式实现一个累加函数 addNum,参数为 number 类型,每次返回的结果 = 上一次计算的值 + 传入的值,如: addNum(10); //10 addNum(12); //22 a ...

  8. InTelliJ 字体调整

    Java IDE 工具InTelliJ 调整字体大小 1.File -> Settings 2.左上的搜索框中输入 font. 等待自动查找结果. 3.修改size 大小

  9. fail-fast 机制 思考

    HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的. Iterator支持fail-fast机制,而Enum ...

  10. 基于 Agent 的模型入门:Python 实现隔离仿真

    2005 年诺贝尔经济学奖得主托马斯·谢林(Thomas Schelling)在上世纪 70 年代就纽约的人种居住分布得出了著名的 Schelling segregation model,这是一个 A ...