• 技术文章 >后端开发 >PHP问题

    php中重写方法有什么规则

    王林王林2020-11-10 15:01:01原创893

    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,不可以严格er

    class Father
    {
        public function index()
        {
        }
    }
    
    class Child extends Father
    {
        protected/private function index()
        {
           //访问权限提升 错误
           //父类为public 则子类重写也只能为public
           //父类为protected 则子类可为public/protected
           //父类为private 则子类public/protected/private皆可
        }
    }

    相关推荐:php培训

    以上就是php中重写方法有什么规则的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 方法
    上一篇:php中双引号和单引号的区别是什么 下一篇:php $_session用法是什么
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 深入讲解js覆盖原有方法 提供重写方法• php类方法重写原则有哪些• PHP类方法重写原则是什么• php中的方法重写是什么意思
    1/1

    PHP中文网