php中重写方法的规则有:1、final修饰的类方法不能被子类重写;2、如果要重写父类方法,那么参数个数必须一致;3、在重写时,访问级别只可以等于或大于父类,不可提升访问级别。

方法重写规则:

(学习视频分享:java视频教程)

1、final修饰的类方法不可被子类重写

final修饰的类方法不可被子类重写 即便final private方法无法被继承 子类仍不能对齐进行重写class FinalMethod

{

//可继承不可重写

final public function finalPublic()

{

echo "can be inherited, but be overrided";

}

//可继承不可重写

final protected function finalProtected()

{

echo "can be inherited, but be overrided";

}

//不可继承不可重写 虽然子类继承不到父类的private方法 但同时也会被final限制无法重写

final private function finalPrivate()

{

echo "can not be inherited or be overrided";

}

//虽然不可继承 但子类里可重写此方法

private function private()

{

echo "can not be inherited ,but be overrided";

}

}

class Override extends FinalMethod

{

//error

public function finalPublic()

{

}

//error

protected function finalProtected()

{

}

//error

private function finalPrivate()

{

}

//correct

public/protected/private function private()

{

//子类继承父类重写父类方法时访问级别只能更加宽松 不可更为严格

}

}

2、PHP是否重写父类方法只会根据方法名是否一致判断(5.3以后重写父类方法参数个数必须一致)

这里并不是说方法参数无任何作用 PHP无重载机制 所以判断是不是重写只会通过方法名(C/C++不仅要方法名相同,参数也相同时才被视为重写,否则即为重载,即新定义了一个多态函数的态) 当方法名相同时即被认为是在重写父类方法,5.2可以参数不同,5.3以后参数需和父类方法一致,且都追寻继承访问级别的规则。class Father

{

public function index($args_1)

{

}

}

class Child extends Father

{

//5.3以后重写方法必须与父类保持参数个数相同

public function index($args_1, $args_2)

{

//在C/C++中此为重载非重写,因为C/C++具有标准的多态机制,会因参数不同而视为某一方法的另一种态

//but在php中此依然为重写 但5.3以后此为非法 必须与父类的方法参数个数保持一致

}

//5.3以后重写方法必须与父类保持参数个数相同

private function index($args_1, $args_2)

{

//C/C++会因为参数不同于父类方法而视为重载,即新定义了一个函数的态,所以不会受到继承访问权限的限制

//但php仍然会被视为对父类方法的重写,会受到继承访问权限的升降规则限制

}

}

3、重写时访问级别只可以等于或者宽松于父类 不可提升访问级别

父类的public方法不能被子类重写为protected或者private,protected方法不能被重写为private,可以宽松er,不可以严格erclass Father

{

public function index()

{

}

}

class Child extends Father

{

protected/private function index()

{

//访问权限提升 错误

//父类为public 则子类重写也只能为public

//父类为protected 则子类可为public/protected

//父类为private 则子类public/protected/private皆可

}

}

相关推荐:php培训

PHP中类重写方法,php中重写方法有什么规则相关推荐

  1. Java实现二树杈_HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用。...

    HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用. HashSet: 首先,hashset底层是 ...

  2. php create()方法,ThinkPHP中create()方法自动验证实例

    ThinkPHP中create()方法自动验证实例2020-06-16 04:24:32 自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验 ...

  3. python 实例化方法_Python中__new__()方法的使用和实例化

    new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决 ...

  4. python中魔法方法repr_python中魔法方法__str__与__repr__的区别

    提出问题 当我们自定义一个类时,打印这个类对象或者在交互模式下直接输入这个类对象按回车,默认显示出来的信息好像用处不大.如下所示 In [1]: classPeople: ...:def __init ...

  5. php5的魔术方法,php5中魔术方法学习笔记

    1.__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用. PHP实例代码如下: classTest {function__construct() {echo"b ...

  6. python中 普通方法_python中普通方法classmethod和staticmethod的区别与用法

    class Foo(object): #实例方法,第一个承诺书必须是实例对象,一般习惯用self. def ins_m(self): print("是类{}的实例方法,只能被实例调用&quo ...

  7. python里的join方法_python中join()方法介绍

    描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str . join ( sequence ) 参数 sequence -- ...

  8. java中方法_java中的方法

    java中的方法 java作为一种面向对象的语言,具有以下特性:继承.封装.多态.抽象.类.对象.实例.方法和重载. 今天讲解的是java方法的概念. 什么是方法? java方法是语句的集合,他们在一 ...

  9. java方法重载和重载方法_Java中的方法重载

    java方法重载和重载方法 The concept of Method Overloading in Java is where a class can have multiple methods w ...

最新文章

  1. Unity提出ProtoRes模型:稀疏可变的输入也能构建完整人体姿态
  2. 多个ViewPager引发的Fragment未初始化
  3. 无法从“cstring”转换为“lpcstr”_U盘重装系统后,无法使用?
  4. python和json转换_【Python】python和json数据相互转换,json读取和写入,repr和eval()使用...
  5. makefile 无法工作_什么是Makefile,它如何工作?
  6. Reactjs不能忽略的key
  7. 安装新版Magisk卡在启动页面等问题以及解决办法
  8. 使用ConfigurationManager来写自己的配置文件
  9. Win32 Application和Win32 Console Application
  10. 人脸识别Demo解析C#
  11. CISSP备考大全(完整版)
  12. Spring Gateway 报错java.lang.IllegalStateException: COMPLETED 解决
  13. 一个由服务器时区引发的Bug
  14. 科学计算基础软件包NumPy入门讲座(4):操作数组
  15. SwiftUI系列教程第1章第3节:Text的段落属性
  16. google提供免费企业邮局
  17. Transformer的position embedding
  18. 读《Analyzing Unaligned Multimodal Sequence via Graph Convolution and Graph Pooling Fusion》
  19. JDBC最详讲解(快速入门)
  20. 分享十个前端Web3D可视化框架附地址

热门文章

  1. mysql转达梦7_从mysql换成达梦7后,查询语句报错,这个是druid的问题吗
  2. java select 不是date,iPhonedateselect器,而不是键盘?
  3. 超像素分割算法matlab_像素不够,算法来凑。这个图像超分辨率项目帮你「拍」出高清照片...
  4. 实验1 数字图像处理的MATLAB基础,《数字图像处理(实验部分)》实验1_数字图像处理中MATLAB使用基础...
  5. FusionChartsFree免费的报表
  6. Java中堆、栈、常量池等概念解析
  7. 基于JAVA+SpringMVC+MYSQL的勤工助学管理系统
  8. java怎么使两个界面联系_怎么样用java编写界面实现两个数的加法运算
  9. java复制和上传_java文件上传复制等功能
  10. 1029 最大公约数和最小公倍数问题(gcd) luogu洛谷