• 售前

  • 售后

热门帖子
入门百科

PHP面向对象步伐设计(OOP)之方法重写(override)操纵示例

[复制链接]
六月清晨搅 显示全部楼层 发表于 2021-10-26 12:49:27 |阅读模式 打印 上一主题 下一主题
本文实例报告了PHP面向对象步调计划(OOP)之方法重写(override)操作。分享给各人供各人参考,详细如下:
由于PHP是弱范例的语言, 以是在方法的参数中本身就可以吸收差别范例的数据,又由于PHP的方法可以吸收不定个数的参数,以是通过传递差别个数的参数调用不雷同方法名的差别方法也是不成立的,以是php是不能重载的。
虽然说在PHP内里不能定义同名的方法, 但是在父子关系的两个类中,我们可以在子类中定义和父类同名的方法,如许就把父类中继承过来的方法覆盖掉了(重写父类方法)。
  1. <?php
  2. class Person
  3. {
  4. //下面是人的成员属性
  5. var $name; //人的名子
  6. var $sex; //人的性别
  7. var $age; //人的年龄
  8. //定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
  9. function __construct($name, $sex, $age) {
  10. $this->name = $name;
  11. $this->sex = $sex;
  12. $this->age = $age;
  13. }
  14. //这个人可以说话的方法, 说出自己的属性
  15. function say() {
  16. echo "my name is:" . $this->name . " sex:" . $this->sex . " my age is:" . $this->age;
  17. }
  18. }
  19. //定义一个子类“学生类“使用”extends”关键字来继承”人”类:
  20. class Student extends Person
  21. {
  22. var $school; //学生所在学校的属性
  23. function __construct($name,$sex,$age,$school)
  24. {
  25. parent::__construct($name,$sex,$age);
  26. $this->school = $school;
  27. }
  28. // 重写父类的say()方法
  29. function say()
  30. {
  31. echo "my name is:" . $this->name ." my school is:" . $this->school;
  32. }
  33. //这个学生学习的方法
  34. function study()
  35. {
  36. echo "my name is:" . $this->name . " my school is:" . $this->school;
  37. }
  38. }
  39. ?>
复制代码
别的在子类覆盖父类的方法时也要留意一点,子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。
例如,如果父类方法的访问权限是
  1. protected
复制代码
,那么子类中要覆盖的权限就要是
  1. protected
复制代码
  1. public
复制代码
,如果父类的方法是public那么子类中要覆盖的方法只能也是
  1. public
复制代码
,总之子类中的方法总是要高于或等于父类被覆盖方法的访问权限。
上面的例子, 我们就在“Student”子类里覆盖了继承父类内里的”say()”的方法,通过覆盖我们就实现了对“方法”扩展。但是,像如许 做虽然办理了我们上面说的题目,但是在实际开发中,一个方法不大概就一条代码或是几条代码,比如说“Person”类内里的“say()”方法有内里有 100条代码,如果我们想对这个方法覆盖生存原有的功能外加上一点点功能,就要把原有的100条代码重写一次, 再加上扩展的几条代码,这还算是好的,而有的情况,父类中的方法是看不见原代码的,这个时候你怎么去重写原有的代码呢?我们也有办理的办法,就是在子类这 个方法中可以调用到父类中被覆盖的方法, 也就是把被覆盖的方法原有的功能拿过来再加上本身的一点功能,可以通过两种方法实现在子类的方法中调用父类被覆盖的方法:
      
  • 一种是使用父类的“
    1. 类名::
    复制代码
    “来调用父类中被覆盖的方法;  
  • 一种是使用“
    1. parent::
    复制代码
    ”的方试来调用父类中被覆盖的方法;
  1. //定义一个子类“学生类“使用”extends”关键字来继承”人”类:
  2. class Student extends Person
  3. {
  4. var $school; //学生所在学校的属性
  5. function __construct($name,$sex,$age,$school)
  6. {
  7. parent::__construct($name,$sex,$age);
  8. $this->school = $school;
  9. }
  10. // 重写父类的say()方法
  11. function say()
  12. {
  13. //使用父类的"类名::"来调用父类中被覆盖的方法;
  14. // Person::say();
  15. //或者使用"parent::"的方试来调用父类中被覆盖的方法;
  16. parent::say();
  17. echo "my name is:" . $this->name ." my school is:" . $this->school;
  18. }
  19. //这个学生学习的方法
  20. function study()
  21. {
  22. echo "my name is:" . $this->name . " my school is:" . $this->school;
  23. }
  24. }
复制代码
现在用两种方式都可以访问到父类中被覆盖的方法,我们选那种方式最好呢?用户大概会发现本身写的代码访问了父类的变量和函数。如果子类非常精粹大概父类非 常专业化的时候尤其是如许。 不要用代码中父类文字上的名字,应该用特殊的名字
  1. parent
复制代码
,它指的就是子类在
  1. extends
复制代码
声明中所指的父类的名字。如许做可以避免在多个地方使用父类的名字。如果继承树在实现的过程中要修改,只要简朴地修改类中
  1. extends
复制代码
声明的部分。
更多关于PHP相干内容感兴趣的读者可检察本站专题:《php面向对象步调计划入门教程》、《PHP数组(Array)操作本领大全》、《PHP根本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作本领汇总》
盼望本文所述对各人PHP步调计划有所资助。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作