重载overload

重载(overload),在一个类定义中,可以编写几个同名的方法,但是只要他们的参数个数不同,Java就会将他们看作唯一的方法。简单的说,一个类中的方法与另一个方法同名,但是参数个数不同,这种方法称之为重载方法。

PHP中不支持方法重载。但是可以模拟类似的Java中的方法重载。

<?php

class dong{

    public function test(){

    }
    /**
     * @param string $a
     * @param string $b
     * 在Java中实现方法的重载
    public function test($a="123",$b="232"){

    }*/
    public function php()
    {
        $num=func_num_args();
        $dataArr=func_get_args();
        switch($num){
            case 0:
                echo "这是0";
                break;
            case 1:
                echo "这是1";
                break;
            default:
                echo "54321";
                break;
        }
    }
}
$da=new dong();
echo $da->php()."<br/>";
echo $da->php("张三");

重写override

重写(override)是重写就是子类重写了父类的方法;

子类中的覆盖方法,不能使用比父类中被覆盖方法更严格的访问权限。

子类可以拥有与父类不同的参数数量。构造函数重写。

<?php

class dong{
    public $name;
    public function __construct($name="张珊")
    {
        $this->name=$name;
    }

    private  function test($a=11)
    {
        echo $a;
    }
}

class test extends dong{
    public $age;
    public function __construct($age="0",$name="张三")
    {
        $this->age=$age;
        $this->name=$name;
    }

    public function test()
    {   //这是正确方法 如果子父类调过来 则会报错 因为修饰权限

    }
}
$da=new dong();
echo $da->name;
echo "<hr/><br/>";
$dd=new test("23");
echo $dd->age."<br/>";
echo $dd->name;

如果说不想被重写那就用带关键字final

关键字final的用法

如果我们不希望一个类被继承,我们使用final来修饰这个类。

如果我们不希望以个类的方法能被重写,我们使用final来修饰这个方法。

在PHP中final可以修饰类,也可以修饰类的方法,但是不能修饰属性。

代码示例

<?php

final class A {
//通过  fianl修饰的类不能被继承
}
class B extends  A{

}
var_dump($a);
$b=new B();// Fatal error: Class B may not inherit from final class (A)

通过final关键字修饰的类不能被继承、修饰过的方法不能被重写

<?php

class Person{
    public $age=22;
    final public function getAge()
    {
        return $this->age;
    }
}
class Stu extends  Person{
    // final 修饰的方法不能被重写
    public function getAge(){
        return $this->age+1;
    }
}
$s= new Stu();//atal error: Cannot override final method Person::getAge()
Last modification:January 6, 2020
如果觉得我的文章对你有用,请随意赞赏