这篇文章将为大家详细讲解有关PHP中方法重写覆盖怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
具体如下:
因为PHP是弱类型的语言,所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的,所以PHP是不能重载的。
虽然说在PHP里面不能定义同名的方法,但是在父子关系的两个类中,我们可以在子类中定义和父类同名的方法,这样就把父类中继承过来的方法覆盖掉了(重写父类方法)。
& lt; PHP ? class 人 {//下面是人的成员属性 var 名称;美元,//人的名子 var 性别;美元,//人的性别 var 年龄;美元,//人的年龄//定义一个构造方法参数为属性姓名名字,美元性别性和美元年龄美元时代进行赋值 function __construct(名称、美元,性,美元,美元时代),{=$ this→name 美元名称; 美元=$ this→sex 性别; 美元=$ this→age 年龄; }//这个人可以说话的方法,,说出自己的属性 function 说(),{ echo “my name 是:“,只这→美元name 只“,性:“,只这→美元sex 只“,my age 是:“,只这美元→年龄; } }//定义一个子类”学生类”使用“延伸”关键字来继承“人”类: class Student  extends 人 { var 学校;美元,//学生所在学校的属性 function __construct(姓名、性别、美元时代,美元学校) { 父:__construct(姓名、性别、美元时代美元); 美元=$ this→school 学校; }//,重写父类的说()方法 function 说() { echo “my name 是:“,只这→美元name 干净,my school 是:“,只这美元→学校; }//这个学生学习的方法 function 研究() { echo “my name 是:“,只这→美元name 只“,my school 是:“,只这美元→学校; } } ?在
另外在子类覆盖父类的方法时也要注意一点,<强>子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。强>
例如,如果父类方法的访问权限是<代码> 代码>保护,那么子类中要覆盖的权限就要是保护<代码> 代码>和<代码>公共> 代码,如果父类的方法是公共那么子类中要覆盖的方法只能也是<代码>公共> 代码,总之子类中的方法总是要高于或等于父类被覆盖方法的访问权限。
上面的例子,我们就在“学生”子类里覆盖了继承父类里面的“()”的方法,通过覆盖我们就实现了对“方法”扩展。但是,像这样做虽然解决了我们上面说的问题,但是在实际开发中,一个方法不可能就一条代码或是几条代码,比如说“人”类里面的“说”()方法有里面有100条代码,如果我们想对这个方法覆盖保留原有的功能外加上一点点功能,就要把原有100条的代码重写一次,再加上扩展的几条代码,这还算是好的,而有的情况,父类中的方法是看不见原代码的,这个时候你怎么去重写原有的代码呢?我们也有解决的办法,就是在子类这个方法中可以调用到父类中被覆盖的方法,也就是把被覆盖的方法原有的功能拿过来再加上自己的一点功能,可以通过两种方法实现在子类的方法中调用父类被覆盖的方法:
- <李>
一种是使用父类的“<代码>类名::> 代码”来调用父类中被覆盖的方法;
李> <李>一种是使用“<代码>父::> 代码”的方试来调用父类中被覆盖的方法;
李>//定义一个子类”学生类”使用“延伸”关键字来继承“人”类: class Student  extends 人 { var 学校;美元,//学生所在学校的属性 function __construct(姓名、性别、美元时代,美元学校) { 父:__construct(姓名、性别、美元时代美元); 美元=$ this→school 学校; }//,重写父类的说()方法 function 说() {//使用父类的“类名::“来调用父类中被覆盖的方法;//,人:说();//或者使用“父:“的方试来调用父类中被覆盖的方法; 父:说(); echo “my name 是:“,只这→美元name 干净,my school 是:“,只这美元→学校; }//这个学生学习的方法 function 研究() { echo “my name 是:“,只这→美元name 只“,my school 是:“,只这美元→学校; } }PHP中方法重写覆盖怎么用