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:\n"; box_1.display(); box_2.set(5); cout<<"box_2:\n"; box_2.display(); box_3.set(7,9); cout<<"box_3:\n"; box_3.display(); }
输出结果是:
box_1:
L=0;w=0
box_2:
L=5;W=0
box_3:
L=7;W=9从结果当中可以看出,在参数个数不同的时候,执行了不同的函数。
回到正题,PHP的重载在我看来其实就是一种覆盖(或者修改),即在父类的基础上,进行修改,赋予子类一个新的功能,该功能是父类当中没有的。C++当中亦可如此,只不过在C++中不叫重载罢了。
参考一下代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>重载</title> </head> <body> <?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(); ?> </body> </html>
输出结果:
I am a student!
I haven‘t graduate
I was a student before!
but I have graduated!
时间: 2024-10-06 13:43:35