首页 > 开发 > PHP > 正文

PHP面向对象程序设计(OOP)之方法重写(override)操作示例

2024-05-04 22:41:43
字体:
来源:转载
供稿:网友

本文实例讲述了PHP面向对象程序设计(OOP)之方法重写(override)操作。分享给大家供大家参考,具体如下:

因为PHP是弱类型的语言, 所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的,所以php是不能重载的。

虽然说在PHP里面不能定义同名的方法, 但是在父子关系的两个类中,我们可以在子类中定义和父类同名的方法,这样就把父类中继承过来的方法覆盖掉了(重写父类方法)。

<?phpclass Person{//下面是人的成员属性var $name; //人的名子var $sex; //人的性别var $age; //人的年龄//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值function __construct($name, $sex, $age) {$this->name = $name;$this->sex = $sex;$this->age = $age;}//这个人可以说话的方法, 说出自己的属性function say() {echo "my name is:" . $this->name . " sex:" . $this->sex . " my age is:" . $this->age;}}//定义一个子类“学生类“使用”extends”关键字来继承”人”类:class Student extends Person{var $school; //学生所在学校的属性function __construct($name,$sex,$age,$school){parent::__construct($name,$sex,$age);$this->school = $school;}// 重写父类的say()方法function say(){echo "my name is:" . $this->name ." my school is:" . $this->school;}//这个学生学习的方法function study(){echo "my name is:" . $this->name . " my school is:" . $this->school;}}?>

另外在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。

例如,如果父类方法的访问权限是protected,那么子类中要覆盖的权限就要是protectedpublic,如果父类的方法是public那么子类中要覆盖的方法只能也是public,总之子类中的方法总是要高于或等于父类被覆盖方法的访问权限。

上面的例子, 我们就在“Student”子类里覆盖了继承父类里面的”say()”的方法,通过覆盖我们就实现了对“方法”扩展。但是,像这样 做虽然解决了我们上面说的问题,但是在实际开发中,一个方法不可能就一条代码或是几条代码,比如说“Person”类里面的“say()”方法有里面有 100条代码,如果我们想对这个方法覆盖保留原有的功能外加上一点点功能,就要把原有的100条代码重写一次, 再加上扩展的几条代码,这还算是好的,而有的情况,父类中的方法是看不见原代码的,这个时候你怎么去重写原有的代码呢?我们也有解决的办法,就是在子类这 个方法中可以调用到父类中被覆盖的方法, 也就是把被覆盖的方法原有的功能拿过来再加上自己的一点功能,可以通过两种方法实现在子类的方法中调用父类被覆盖的方法:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表