方法重载(overload)
- 重:重复、重叠的意思
- 定义:在一个类定义中,可以编写几个同名的方法,但是只要它们的参数个数不同,Java就会将它们看做唯一的方法。简单来说,一个类中的方法与另一个方法同名,但是参数个数不同,这种方法称之为重载方法。
- php中不支持方法重载,但是可以模拟类似java中的方法重载。
- 所以一般不建议这样写,作为了解
<?php
class Person
{
public function test()
{
$num = func_num_args();
switch ($num) {
case 0:
echo '这是没有参数的调用<br>';
break;
case 1:
echo '这是有1个参数的调用<br>';
break;
case 2:
echo '这是有2个参数的调用<br>';
break;
default:
echo '这是多个参数的调用<br>';
break;
}
}
}
$cc = new Person();
$cc->test();
$cc->test(1);
$cc->test(1, 2);
$cc->test(1, 2, 3);
方法重写(override)
- 重:重新、继承的意思
- 重写就是子类重写了父类的方法;
- 子类中的覆盖方法不能使用比父类中被覆盖的方法更严格的访问权限;
- 子类可以拥有与父类不同的参数数量;
- 构造函数重写
- 注意:父类是 public 子类也只能是 public,但是父类是 protected 子类可以是 public 也可以是protected,也就是说子类权限始终比父类松或是相等,不能严格于父类
class Father
{
public $name;
public function __construct($name = 'bob')
{
$this->name = $name;
}
public function test()
{
echo '我是父类的test方法<br>';
}
}
class Son extends Father
{
public $age;
function __construct($name = 'bob', $age = 22)
{
parent::__construct($name);
$this->age = $age;
}
public function test($text = '')
{
parent::test();
echo "我是 $text 重写添加的方法" . '<br>';
}
}
$cc = new Son('john');
echo $cc->name . '<br>';
echo $cc->age . '<br>';
$cc->test('子类') . '<br>';