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)是面向对象的重载.是进行基类中的函数重写.
随机推荐
- 学习笔记二:异步FIFO
, ) //用格雷码的局限性:循环计数深度必须是2的n次幂,否则就失去了每次只变化一位的特性 (wclk,wrstn,wdata,wfull,winc,rclk,rrstn,rdata,rempt ...
- Shell 变量简介
1. 概述 概述 知识点又稀又碎, 面试一问就流泪 简单介绍下 shell 下的变量及其基本操作 2. 环境 操作系统 CentOS Linux release 7.5 用户 root 用户 约定 使 ...
- zabbix-3.2.3安装
环境:lapp 操作系统: rhel7.0apache: apache-2.4数据库: postgresql-9.2.10php: php-5.4.16-21zabbix: zabbix-3.2.3 ...
- python2.7入门---XML解析
首先我们先来考虑,什么是XML?XML 指可扩展标记语言(eXtensible Markup Language).XML 被设计用来传输和存储数据.XML是一套定义语义标记的规则,这些标记将文 ...
- Android开发——LinearLayout和RelativeLayout的性能对比
0. 前言 我们都知道新建一个Android项目自动生成的Xml布局文件的根节点默认是RelativeLayout,这不是IDE默认设置,而是由android-sdk\tools\templates\ ...
- 《图说VR入门》——googleVR入门代码分析
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53013843 作者:car ...
- [arc065E]Manhattan Compass[曼哈顿距离和切比雪夫距离转换]
Description 传送门 Solution 题目要求的是曼达顿距离,对于每个点(x,y),我们把它变为(x-y,x+y),就可以转换成求切比雪夫距离了. 证明如下:$max(\left | (x ...
- 第一篇:一天学会MongoDB数据库之Python操作
本文仅仅学习使用,转自:https://www.cnblogs.com/suoning/p/6759367.html#3682005 里面新增了如果用用Python代码进行增删改查 什么是MongoD ...
- 【SpringCloud】第十二篇: 断路器监控(Hystrix Turbine)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 在django中使用django_debug_toolbar
一.概述 django_debug_toolbar 是django的第三方工具包,给django扩展了调试功能. 包括查看执行的sql语句,db查询次数,request,headers,调试概览等. ...