首页 > 后端开发 > 正文

PHP类方法重写原则是什么

2024-07-20 22:17:34 | 我爱编程网

今天我爱编程网小编整理了PHP类方法重写原则是什么相关信息,希望在这方面能够更好的大家。

本文目录一览:

PHP类方法重写原则是什么

php 方法重写和多态的区别

重写是多态实现方法的一种,多态的实现方法包括但不局限于重写,二者不是并列关系!多态是一种思想,重写是一种方法!
换句话说,只会执行子类,不会执行父类。如果一定要执行父类,那么就要用到关键词parent。

PHP类方法重写原则是什么

PHP类方法重写原则是什么


PHP类方法重写原则:1、final修饰的类方法不可被子类重写;2、PHP是否重写父类方法只会根据方法名是否一致判断;3、重写时访问级别只可以等于或者宽松于父类,不可提升访问级别。
PHP类方法重写原则:
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,不可以严格er
class Father
{
public function index()
{
}
}
class Child extends Father
{
protected/private function index()
{
//访问权限提升 错误
//父类为public 则子类重写也只能为public
//父类为protected 则子类可为public/protected
//父类为private 则子类public/protected/private皆可
}
}其实关于访问级别继承规则有很多有趣的地方
private在我们常识中是无法被继承的,子类拿不到,但其访问级别已是最高,所以你在子类中可以写成private protected public 仿佛是我们自己重新定义了一个函数一样,这点在5.2版本之前尤其突出,因为5.2之前的版本在继承重写父类方法是可以不保持参数个数相同,但5.3以后加强了这方面的限制,参数个数必须与父类相同
注:
子类实现父类的抽象方法或某类实现接口的方法时其实仍属于继承关系,仍追寻访问等级只能降低不可提升的规则
而且
抽象方法不可被声明为private,abstract修饰的方法肯定是用于继承实现的,所以只能是public或者protected 接口的方法声明必须为public,interface里声明的方法也肯定是被继承实现的,且只能是public, implements 此接口的类也指定重写成public类型的方法
相关视频推荐:PHP编程从入门到精通

PHP类方法重写原则是什么

如何在php里重写php的内置函数或类

我爱编程网(https://www.52biancheng.com)小编还为大家带来如何在php里重写php的内置函数或类的相关内容。

不能重写。

只能改其它名字自己写函数。

如果需要兼容PHP版本,比如新版本有这个函数,旧版本没有,旧版本上运行起来会出错。

可以用function_exists加个判断

如:

if(!function_exists('array_combine')){
    function array_combine($arr1,$arr2){
        //处理逻辑
    }
}

这样旧版本也可以运行相关的程序了
我爱编程网

以上就是我爱编程网小编给大家带来的PHP类方法重写原则是什么全部内容,希望对大家有所帮助!更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“PHP类方法重写原则是什么”相关推荐
PHP怎么调用其他类的方法
PHP怎么调用其他类的方法

php"直接用类名"和"new实例化"调用函数哪种方法效率更高?1.首先用法不同,__new__()用于创建实例,所以该方法是在实例创建之前被调用,它是类级别的方法,是个静态方法;而__init__()用于初始化实例,所以该方法是在实例对象创建后被调用,它是实例级别的方法,用于设置对象属性的一些初始值。由此可知,__new__()在__init__()之前被调用。如果__new_

2024-07-19 01:34:22
php实现静态化方法是什么
php实现静态化方法是什么

php静态方法和实例方法的区别static关键字用来修饰属性、方法,称这些属性、方法为静态属性、静态方法。static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用。static关键字可以用来修饰变量、方法。不经过实例化,

2024-07-20 17:51:09
主类是什么意思,为什么main方法是程序的入口,他是什么逻辑运行的?
主类是什么意思,为什么main方法是程序的入口,他是什么逻辑运行的?

java程序一般应当含有main方法,因为它是所有java程序执行的入口。是对还是错?错误java程序分为java应用程序+小应用程序applet如果是java应用程序,一般应当含有main方法,因为它是所有java程序执行的入口如果是applet,不用main方法。。。由init初始化,start启用主类是什么意思,为什么main方法是程序的入口,他是什么逻辑运行的

2024-04-10 01:35:24
解决win8.1正式版中Java程序无法运行的方法 Java编写程序实现方法重载。
解决win8.1正式版中Java程序无法运行的方法 Java编写程序实现方法重载。

解决win8.1正式版中Java程序无法运行的方法解决win8.1正式版中Java程序无法运行的方法分享给大家,JAVA,一种可以撰写跨平台应用软件的面向对象的程序设计语言,在win8.1系统下,有用户在使用Java时,页面上出现空白和黑色叉叉,有时候甚至无法运行,这是怎回事呢?对于刚安装win8.1系统的新用户来说,一切都是陌生又措手不及的,因此小编下面就来教教大家如何

2024-06-14 08:52:01
怎么实现javascript中调用java类中的方法
怎么实现javascript中调用java类中的方法

怎么实现javascript中调用java类中的方法实现javascript中调用java类中的方法如下:只要调用addJavascriptInterface方法即可映射一个Java对象到JavaScript对象上。1、映射Java对象到JavaScript对象上代码如下:mWebView=(WebView)findViewById(R.id.wv_content);mW

2024-03-21 08:15:37
python类是什么
python类是什么

python类是什么在这篇文章之中我们来了解一下关于类的知识,有些朋友可能是刚刚接触到python这一编程语言,对于什么是python类是什么意思都不明白,但是没关系接下来这篇文章将会带大家来学习什么是“类”。一、python类的定义类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。二、如何创建类使用c

2024-02-20 03:37:04
变量命名的基本规则是什么?
变量命名的基本规则是什么?

python变量命名规则python变量命名需要遵循以下两个规则:1、变量名由英文字母、下划线_或数字组成,并且第一个字符必须是英文字母或下划线。2、变量名不能是Python关键字(又称关键词)。上面的两个原则很简单,却非常重要,一定要仔细理解。从第1个原则可以知道,变量只可以包含英文字母(大写和小写都行)、下划线或数字,不能包含这3种字符之外的其他字符(如空格

2024-03-04 18:58:00
php小写函数 php strncasecmp定义和用法
php小写函数 php strncasecmp定义和用法

求一个php数字小写转为大写的函数(在线等,谢谢)PHP把阿拉伯数字转换成中文,需要定义一个转换的算法:算法实例:<?php/将数字转换为汉字,比如1210转换为一千二百一十 $num = "842105580";//九位数 function del0($num) //去掉数字段前面的0 { return "".intval($num); } function n2c($x

2024-07-20 11:49:43