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!
原文:http://www.cnblogs.com/-beyond/p/5721219.html