php类方法重写原则有哪些-PHP问题

资源魔 32 0

php类办法重写准则有:一、final润饰的类办法不成以被子类重写;二、php能否重写父类办法只会依据办法名能否分歧判别;三、正在重写时,拜访级别只能够等于或许宽松于父类,不成以晋升拜访级别。

PHP类办法重写规定:

(保举教程:php教程)

一、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()
    {
        //子类承继父类重写父类办法时拜访级别只能愈加宽松 不成更为严格
    }
}

二、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依然会被视为对父类办法的重写,会遭到承继拜访权限的起落规定限度
    }
}

三、重写时拜访级别只能够等于或许宽松于父类,不成晋升拜访级别

父类的public办法不克不及被子类重写为protected或许private,protected办法不克不及被重写为private。

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教程 php故障解决 php使用问题 类方法 重写

抱歉,评论功能暂时关闭!