最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

PHP类方法重写原则是什么

来源:动视网 责编:小采 时间:2020-11-02 17:28:51
文档

PHP类方法重写原则是什么

PHP类方法重写原则是什么:PHP类方法重写原则:1、final修饰的类方法不可被子类重写;2、PHP是否重写父类方法只会根据方法名是否一致判断;3、重写时访问级别只可以等于或者宽松于父类,不可提升访问级别。PHP类方法重写原则:1、final修饰的类方法不可被子类重写final修饰的类方
推荐度:
导读PHP类方法重写原则是什么:PHP类方法重写原则:1、final修饰的类方法不可被子类重写;2、PHP是否重写父类方法只会根据方法名是否一致判断;3、重写时访问级别只可以等于或者宽松于父类,不可提升访问级别。PHP类方法重写原则:1、final修饰的类方法不可被子类重写final修饰的类方


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类方法重写原则:1、final修饰的类方法不可被子类重写;2、PHP是否重写父类方法只会根据方法名是否一致判断;3、重写时访问级别只可以等于或者宽松于父类,不可提升访问级别。PHP类方法重写原则:1、final修饰的类方法不可被子类重写final修饰的类方
推荐度:
标签: 方法 php 重写
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top