php类方法重写有哪些原则-创新互联

创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!

成都创新互联公司服务项目包括雷山网站建设、雷山网站制作、雷山网页制作以及雷山网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,雷山网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到雷山省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

本篇文章为大家展示了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。

class Father
{
    public function index()
    {
    }
}

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

上述内容就是php类方法重写有哪些原则,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联-成都网站建设公司行业资讯频道。


当前标题:php类方法重写有哪些原则-创新互联
本文来源:http://ybzwz.com/article/dcseph.html