首先明确一点:PHP重载是用在面向对象的类当中,而不支持函数重载。
这点与C++不一样,在C++当中,重载可以用于面向过程和面向对象,而且方法也不一样。
在C++中,重载适用于当函数名相同时,函数所需的参数个数不相同或者参数个数相同,而参数的类型不同的情况,
在程序编译时,自动根据已提供的参数个数及类型选择相应的函数进行操作,比如下面一段C++代码:
#include<iostream> using namespace std; class Box{ private: int l,w; public: void set(){ l=0; w=0; } //此处重载的是set()函数 void set(int ll){ l=ll; w=0; } void set(int ll,int ww){ l=ll; w=ww; } void display(){ cout<<"L="<<l<<";"; cout<<"W="<<w<<endl; } }; int main() { Box box_1,box_2,box_3; box_1.set(); cout<<"box_1: "; box_1.display(); box_2.set(5); cout<<"box_2: "; box_2.display(); box_3.set(7,9); cout<<"box_3: "; box_3.display(); }
输出结果是:
box_1:
L=0;w=0
box_2:
L=5;W=0
box_3:
L=7;W=9
从结果当中可以看出,在参数个数不同的时候,执行了不同的函数。
回到正题,PHP的重载在我看来其实就是一种覆盖(或者修改),即在父类的基础上,进行修改,赋予子类一个新的功能,该功能是父类当中没有的。C++当中亦可如此,只不过在C++中不叫重载罢了。
参考一下代码:
<?php class Student{ public function display(){ echo "I am a student! <br>"; echo "I haven't graduate <br>"; } } class Graduate extends Student{ public function display(){ //要想实现重载,则子类当中需要重载的函数名必须与父类当中此函数的函数名相同 //此处以display()为例。 echo "I was a student before! <br>"; echo "but I have graduated! <br>"; } } $stu=new Student(); $stu->display(); $gra=new Graduate(); $gra->display(); ?>
输出结果:
I am a student!
I haven't graduate
I was a student before!
but I have graduated!