重载技术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. python--基本类型之元组

    tuple(元组): 定义和创建和作用: 元组--只读列表,只可以被查询,不能被修改.所以,列表的切片操作同样适用与元组. 元组写在小括号(())里,元素之间用逗号隔开. 虽然元组的元素不可改变,但他 ...

  2. SSM-CRUD入门项目——查询

    查询 1.基础查询 分析:访问项目主页 index.jsp 时应该跳转到列表页 我们可以在index.jsp发出查询员工列表请求,来到 list.jsp 使用插件 pageHelper 完成分页功能— ...

  3. NoSQL入门第一天——NoSQL入门与基本概述

    一.课程大纲 二.入门概述 1.为什么用NoSQL 单机MySQL的年代: 一个网站的访问量一般都不大,用单个数据库完全可以轻松应付. 我们来看看数据存储的瓶颈是什么? 1.数据量的总大小 一个机器放 ...

  4. 推荐一个学习Flex chart的好网站

    推荐一个学习Flex chart的好网站 2013-03-04 14:16:56|  分类: Flex |  标签: |字号大中小 订阅     推荐一个学习Flex chart的好网站 最近在做一个 ...

  5. nowcoder wannafly 25 E:01串

    E:01 串 链接 分析: 线段树维护转移矩阵.每个节点是一个矩阵,区间内的矩阵乘起来就是答案矩阵.矩阵乘法满足结合律,所以线段树维护. 代码: #include<cstdio> #inc ...

  6. asp.net core 2.2 根据PC端和移动端自动显示不同视图而不改变url地址

    1.添加HttpRequest扩展方法 public static class RequestExtensions { //regex from http://detectmobilebrowsers ...

  7. 数据库表,id自动递增重置,从1开始

    问题: 删除数据表的数据后,发现下次插入数据,主键id并没有重置,还是在原来基础上继续增加 解决: ; TRUNCATE table table_name; ; 参考: https://stackov ...

  8. (python)剑指Offer 面试题51:数组中重复的数字

    问题描述 在长度为n的数组中,所有的元素都是0到n-1的范围内. 数组中的某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意重复的数字. 例如,输入长度为7的数组{2,3,1, ...

  9. 【坚持】Selenium+Python学习之从读懂代码开始 DAY2

    2018/05/10 [来源:菜鸟教程](http://www.runoob.com/python3/python3-examples.html) #No.1 # 二次方程式 ax**2 + bx + ...

  10. Javascript 初学笔记

    变量作用域 自 ES2015 起,JS 引入let 和 const 关键词定义变量的块作用域(Block Scope). var 仅支持全局作用域(Global Scope)和函数作用域(Functi ...