PHP中类重写方法,php中重写方法有什么规则
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中重写方法有什么规则相关推荐
- Java实现二树杈_HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用。...
HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用. HashSet: 首先,hashset底层是 ...
- php create()方法,ThinkPHP中create()方法自动验证实例
ThinkPHP中create()方法自动验证实例2020-06-16 04:24:32 自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验 ...
- python 实例化方法_Python中__new__()方法的使用和实例化
new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决 ...
- python中魔法方法repr_python中魔法方法__str__与__repr__的区别
提出问题 当我们自定义一个类时,打印这个类对象或者在交互模式下直接输入这个类对象按回车,默认显示出来的信息好像用处不大.如下所示 In [1]: classPeople: ...:def __init ...
- php5的魔术方法,php5中魔术方法学习笔记
1.__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用. PHP实例代码如下: classTest {function__construct() {echo"b ...
- python中 普通方法_python中普通方法classmethod和staticmethod的区别与用法
class Foo(object): #实例方法,第一个承诺书必须是实例对象,一般习惯用self. def ins_m(self): print("是类{}的实例方法,只能被实例调用&quo ...
- python里的join方法_python中join()方法介绍
描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str . join ( sequence ) 参数 sequence -- ...
- java中方法_java中的方法
java中的方法 java作为一种面向对象的语言,具有以下特性:继承.封装.多态.抽象.类.对象.实例.方法和重载. 今天讲解的是java方法的概念. 什么是方法? java方法是语句的集合,他们在一 ...
- java方法重载和重载方法_Java中的方法重载
java方法重载和重载方法 The concept of Method Overloading in Java is where a class can have multiple methods w ...
最新文章
- Unity提出ProtoRes模型:稀疏可变的输入也能构建完整人体姿态
- 多个ViewPager引发的Fragment未初始化
- 无法从“cstring”转换为“lpcstr”_U盘重装系统后,无法使用?
- python和json转换_【Python】python和json数据相互转换,json读取和写入,repr和eval()使用...
- makefile 无法工作_什么是Makefile,它如何工作?
- Reactjs不能忽略的key
- 安装新版Magisk卡在启动页面等问题以及解决办法
- 使用ConfigurationManager来写自己的配置文件
- Win32 Application和Win32 Console Application
- 人脸识别Demo解析C#
- CISSP备考大全(完整版)
- Spring Gateway 报错java.lang.IllegalStateException: COMPLETED 解决
- 一个由服务器时区引发的Bug
- 科学计算基础软件包NumPy入门讲座(4):操作数组
- SwiftUI系列教程第1章第3节:Text的段落属性
- google提供免费企业邮局
- Transformer的position embedding
- 读《Analyzing Unaligned Multimodal Sequence via Graph Convolution and Graph Pooling Fusion》
- JDBC最详讲解(快速入门)
- 分享十个前端Web3D可视化框架附地址
热门文章
- mysql转达梦7_从mysql换成达梦7后,查询语句报错,这个是druid的问题吗
- java select 不是date,iPhonedateselect器,而不是键盘?
- 超像素分割算法matlab_像素不够,算法来凑。这个图像超分辨率项目帮你「拍」出高清照片...
- 实验1 数字图像处理的MATLAB基础,《数字图像处理(实验部分)》实验1_数字图像处理中MATLAB使用基础...
- FusionChartsFree免费的报表
- Java中堆、栈、常量池等概念解析
- 基于JAVA+SpringMVC+MYSQL的勤工助学管理系统
- java怎么使两个界面联系_怎么样用java编写界面实现两个数的加法运算
- java复制和上传_java文件上传复制等功能
- 1029 最大公约数和最小公倍数问题(gcd) luogu洛谷