意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

深入理解php多态及代码演示

来源:恒创科技 编辑:恒创科技编辑部
2024-01-05 10:01:59


由于php是弱类型语言,变量没有类型约束,所以我们只能在参数类型约束的地方体现多态。



深入理解php多态及代码演示

// 训练动物的接口
interface AnimalTrain{
public function calculate($num,$num1);
}
// 抽象动物类
abstract class Animal {
public abstract function call();
}
// 猫
class Cat extends Animal implements AnimalTrain{
public function call(){
echo 'miao miao';
}
public function calculate($num,$num1){
echo $num + $num1 ;
}
}
// 狗
class Dog extends Animal implements AnimalTrain{
public function call(){
echo 'wang wang';
}
public function calculate($num,$num1){
echo $num * $num1 ;
}
}
$cat = new Cat();
$dog = new Dog();

var_dump($cat instanceof Cat); // 输出 true
var_dump($cat instanceof Animal); // 输出 true
var_dump($cat instanceof AnimalTrain); // 输出 true

var_dump($dog instanceof Dog); // 输出 true
var_dump($dog instanceof Animal); // 输出 true
var_dump($dog instanceof AnimalTrain); // 输出 true


由上面的代码我们可以看到new一个Cat,我们可以认为$cat是Cat的一个实例,也可以认为它是其父类Animal的一个实例,也可以认为它是其实现了的接口AnimalTrain的一个实例,所以我们利用php 5.1以后的参数类型约束,可以体验一把多态的快感。


// 遛小动物
class Walk{
public static function walkAnimal(Animal $animal){
echo $animal->call();
}

public static function calc(AnimalTrain $trainedAnimal,$num,$num1){
echo $trainedAnimal->calculate($num,$num1);
}

}
//遛猫让猫叫几声
Walk::walkAnimal($cat);// 输出 miao miao
//遛狗让狗叫几声
Walk::walkAnimal($dog);// 输出 wang wang

//让猫算数
Walk::calc($cat,1,2); // 输出 3
//让狗算数
Walk::calc($dog,1,2); // 输出 2



在不同的情况下表现出不同的状态,这就是我们所说的多态。

因为抽象类和接口都是不能实例化的),来实现多态。




上一篇: php com调用word获取文档总页码数与当前内容所在页码数 下一篇: phpStorm(1)——内置的REST Client (发送http请求)