重载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()