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

以下为测试代码:

PHP面向对象之重载的更多相关文章
- PHP面向对象_重载新的方法(parent::)
在学习PHP 这种语言中你会发现, PHP中的方法是不能重载的, 所谓的方法重载就是定义相同的方法名,通过“参数的个数“不同或“参数的类型“不 同,来访问我们的相同方法名的不同方法.但是因为PHP是弱 ...
- JAVA面向对象之重载与重写
重写:子类对父类方法的重新编写 返回值不变,形参不变 不能抛出新的或者范围更广的异常 class Animal{ public void move(){ System.out.println(&quo ...
- Python面向对象----继承, 重载
1. 面向对象三大特性之继承. 继承的便捷是子类可以直接调用父类里面的方法和属性.(在强类型语言里面是只能调用公有成员), 不用重复的造轮子. 减少程序猿的负担.实现多态等上层结构 2. 父类代码 3 ...
- Java面向对象----方法重载
方法重载(over load):方法名相同,参数列表不同,返回类型无关 package com.tanlei.newer; public class OverLoadDemo { public sta ...
- JAVA面向对象 - 方法重载与覆盖
方法重载 方法重载就是在类的同种实现方式,到底采用哪种方式,取决与调用者给出的参数.方法重载特点是方法名相同,方法的参数类型,个数,顺序至少有一项不同,方法返回类型可以不同,方法的修饰符可以不同,只是 ...
- Python笔记_第三篇_面向对象_3.重载(overloading)和重写(overriding)
1. 重载: overloading:就是将函数重新定义一遍. 1.1 __str__( )和__repr__( )的重载: 格式: __str__( ):在调用print打印对象时自动调用,是给用户 ...
- Java阶段性测试--知识点:数组,面向对象,集合、线程,IO流
#Java基础测试 涉及知识点:数组,面向对象,重载,重写,继承,集合,排序,线程,文件流 一.多项选择题(可能是单选,也可能是多选) 1.下列标识符命名不合法的是( D ). A.$_Name ...
- PHP的重载及魔术方法
首先你要知道什么是php的魔术方法,它不是变魔术的,如果你想学习变魔术来错地方了哦! 定义:PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法.所以在定义类方法时,除了上述魔术方法,建议不 ...
- override与重载(overload)的区别
重载是相同函数名字.参数或参数类型不同,进行多次承载以适应不同的需要.(orerload)是面向过程的重载. (override)是面向对象的重载.是进行基类中的函数重写.
随机推荐
- 搜索引擎的选择与在chrome上的设置
1 优缺点分析 百度:广告多,但是电脑端可以用Adblock Plus屏蔽:搜索内容有很多百度自家内容,如百家号.百度知道.百度文库.百度贴吧等,在搜索教程的时候很实用,但是不适合偏专业性搜索,很多 ...
- 20155227 2016-2017-2 《Java程序设计》第一周学习总结
20155227 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Java三个平台的区别. JDK.JRE.JVM区 ...
- 20155235 《Java程序设计》 实验二 实验三 敏捷开发与XP实践
20155235 <Java程序设计> 实验二 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验内容 没有Linux基础的同学建议先学习<Linux基础入 ...
- 20155310 2016-2017-2 《Java程序设计》第三周学习总结
20155310 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 1.对象(Object):存在的具体实体,具有明确的状态和行为. 2.类(Class):具有 ...
- adb的配置
http://jingyan.baidu.com/article/2fb0ba405e815f00f2ec5f9e.html 1. 用快捷键Ctrl + Alt + T 打开终端命令工具,电脑不要插入 ...
- java开发工具使用
一.MyEclipse软件的使用 1)ctrl+n新建文件 2)ctrl+d删除一行 3)alt+/提示补齐 (main/syso/syse/for遍历最近的数组) 4)ctrl+shift+f格式化 ...
- PostgreSQL参数学习:vacuum_defer_clean_age
官方文档: http://www.postgresql.org/docs/9.3/static/runtime-config-replication.html 为了防止slave端读取数据时,因为读到 ...
- 简单的Slony-I设置实例
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页 参考如下链接: http://lets.postg ...
- 试用一下markdown
1 2 3 4 5 6 Blog
- Scratch3.0设计的插件系统(上篇)
我们每个人在内心深处都怀有一个梦想: 希望创造出一个鲜活的世界,一个宇宙.处在我们生活的中间.被训练为架构师的那些人,拥有这样的渴望: 在某一天,在某一个地方,因为某种原因,创造出了一个不可思议的.美 ...