💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
**多态定义**:只关心一个接口或者基类,而不关心一个对象的具体类。(**同一类型,不同结果**) 多态的应用:父类对象的引用指向子类对象,其实本质上就是一个**向上转型**。 多态的好处:大大提高程序的扩展,增强系统的灵活性,降低模块间的耦合。 ``` <?php // 举个模型例子,一家公司有员工类(Employee), //还有其子类:销售(Sales)、市场(Market)、工程师(Engineer) abstract class Employee { abstract public function continueToWork(); } class Sales extends Employee { private function makeSalePlan() { echo 'make sale plan'; } public function continueToWork() { $this->makeSalePlan(); } } class Market extends Employee { private function makeProductPrice() { echo 'make product price'; } public function continueToWork() { $this->makeProductPrice(); } } class Engineer extends Employee { private function makeNewProduct() { echo 'make new product'; } public function continueToWork() { $this->makeNewProduct(); } } class Demo { public function Work(Employee $employeeObj) { //添加父类类型限制传参类型,使其满足多态第三点要求,父类指向子类 $employeeObj->continueToWork(); } } //错误示范 $sales = new Sales(); $sales->continueToWork(); $market = new Market(); $market->continueToWork(); $engineer = new Engineer(); $engineer->continueToWork(); //以上的这种调用并不能称为多态,虽然看起来都通过调用continueToWork()来得到结果, //但是并不是通过同一接口来实现的,这只是不同类的对象都有相同名称的接口方法,用上述模型来说, //就是老板单独对销售部说你去工作,单独对市场部说你去工作,单独对工程师说你去工作, //而不是对所有的员工说。(不同类的不同实现) //正确调用(同类的不同实现) $obj = new Demo(); $obj->Work(new Sales()); $obj->Work(new Market()); $obj->Work(new Engineer()); ``` https://blog.csdn.net/whd526/article/details/70242918