PHP 不像 Java 那样支持同一个类中定义多个同名方法(参数数量或类型不同,这种叫做方法重载),另外,由于子类
一定包含
了父类的公开
方法,所以当类作为参数类型声明时,如果声明类型为父类,则可以传入子类对象
,反过来,如果声明类型为子类,则不能传入父类对象
测试代码
class Car{
public function drive()
{
echo 'Car drive';
}
}
class Benz extends Car{
public function drive()
{
echo 'benz-';
parent::drive();
}
}
class TestCarDrive
{
public function testDrive(Car $car)
{
$car->drive();
}
public function testBenzDrive(Benz $benz)
{
$benz->drive();
}
}
进行测试
// 初始化类对象
$car = new Car();
$benz = new Benz();
$test = new Test();
// 测试子类转父类
$test->testDrive($benz); //返回结果 benz-Car drive
// 测试父类转子类
$test->testBenzDrive($car);
//返回结果 Argument 1 passed to Test::testBenzDrive() must be an instance of Benz, instance of Car given, called in /Users/renzhifan/Sites/demo/routes/web.php on line 48