这篇文章主要介绍了PHP面向对象程序设计OOP之方法重写覆盖的操作示例,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
PHP方法重写是指把父类中继承过来的方法覆盖掉,也就是重写父类方法,其方法如:首先定义一个构造方法参数,接着定义一个子类把使用“延伸”关键字来继承;最后重写父类方法即可。
引用><强> PHP面向对象程序设计(OOP)之方法重写(覆盖)操作示例强>
本文实例讲述了PHP面向对象程序设计(OOP)之方法重写(覆盖)操作。分享给大家供大家参考,具体如下:
因为PHP是弱类型的语言,所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的,所以PHP是不能重载的。
虽然说在PHP里面不能定义同名的方法,但是在父子关系的两个类中,我们可以在子类中定义和父类同名的方法,这样就把父类中继承过来的方法覆盖掉了(重写父类方法)。
& lt; PHP ? 类人 {//下面是人的成员属性 var美元名称;//人的名子 var $性;//人的性别 var美元年龄;//人的年龄//定义一个构造方法参数为属性姓名名字,美元性别性和美元年龄美元时代进行赋值 函数__construct(姓名、性别、美元时代美元){ $ this→名称=$名称; 这→美元=$性;=$ $ this→年龄年龄; }//这个人可以说话的方法,说出自己的属性 函数表示(){ 回应“我的名字是:“。这→美元的名字。“;性:“;。$ this→性。“;我的年龄是:“。这比美元;年龄; } }//定义一个子类”学生类”使用“延伸”关键字来继承“人”类: 类学生扩展了人 { var美元学校;//学生所在学校的属性 函数__construct(姓名、性别、美元时代,美元学校) { 父:__construct(姓名、性别、美元时代美元);=$ $ this→学校学校; }//重写父类的说()方法 说()函数 { 回应“我的名字是:“。$ this→名字!”我的学校是:“。$ this→学校; }//这个学生学习的方法 研究()函数 { 回应“我的名字是:“。这→美元的名字。“;我的学校是:“。$ this→学校; } } ?在另外在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。
例如,如果父类方法的访问权限是保护,那么子类中要覆盖的权限就要是保护和公众,如果父类的方法是公共那么子类中要覆盖的方法只能也是公共的,总之子类中的方法总是要高于或等于父类被覆盖方法的访问权限。
上面的例子,我们就在“学生”子类里覆盖了继承父类里面的“说()”的方法,通过覆盖我们就实现了对“方法”扩展。但是,像这样做虽然解决了我们上面说的问题,但是在实际开发中,一个方法不可能就一条代码或是几条代码,比如说“人”类里面的”说()方法有里面有100条代码,如果我们想对这个方法覆盖保留原有的功能外加上一点点功能,就要把原有100条的代码重写一次,再加上扩展的几条代码,这还算是好的,而有的情况,父类中的方法是看不见原代码的,这个时候你怎么去重写原有的代码呢?我们也有解决的办法,就是在子类这个方法中可以调用到父类中被覆盖的方法,也就是把被覆盖的方法原有的功能拿过来再加上自己的一点功能,可以通过两种方法实现在子类的方法中调用父类被覆盖的方法:
一种是使用父类的“类名::“来调用父类中被覆盖的方法;
一种是使用“父::”的方试来调用父类中被覆盖的方法;
//定义一个子类”学生类”使用“延伸”关键字来继承“人”类: 类学生扩展了人 { var美元学校;//学生所在学校的属性 函数__construct(姓名、性别、美元时代,美元学校) { 父:__construct(姓名、性别、美元时代美元);=$ $ this→学校学校; }//重写父类的说()方法 说()函数 {//使用父类的“类名::“来调用父类中被覆盖的方法;//人:说();//或者使用“父:“的方试来调用父类中被覆盖的方法; 父:说(); 回应“我的名字是:“。$ this→名字!”我的学校是:“。$ this→学校; }//这个学生学习的方法 研究()函数 { 回应“我的名字是:“。这→美元的名字。“;我的学校是:“。$ this→学校; } }PHP面向对象程序设计OOP之方法重写覆盖的操作示例