PHP中多态的理解

面向对象编程语言的四大特性: 封装、抽象、继承、多态。

  • 封装:也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。对于封装这个特性,我们需要编程语言本身提供一定的语法机制来支持。这个语法机制就是 访问权限控制。(public、protected、private)
  • 抽象:讲的是如何隐藏方法的具体实现,让调用者只需要关心方法提供了哪些功能,并不需要知 道这些功能是如何实现的。(比如 Java 中的 interface 关键字 语法)或者抽象类(比如 Java 中的 abstract 关键字语法)。我们在定义(或者叫命名)类的方法的时候,也要有抽象思维,不要在 方法定义中,暴露太多的实现细节,以保证在某个时间点需要改变方法的实现逻辑的时候, 不用去修改其定义。
  • 继承:是用来表示类之间的 is-a 关系,分为两种模式:单继承和多继承。最大的一个好处就是代码复用。
  • 多态:是指,子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现。多态可 以提高代码的扩展性和复用性,是很多设计模式、设计原则、编程技巧的代码实现基础。

抽象类具有三个特性:

  • 抽象类不允许被实例化,只能被继承。也就是说,你不能 new 一个抽象类的对象出来。
  • 抽象类可以包含属性和方法。方法既可以包含代码实现,也可以不包含代码实现。不包含代码实现的 方法叫作抽象方法。
  • 子类继承抽象类,必须实现抽象类中的所有抽象方法。

设计模式的精髓是对多态的使用。

下面使用PHP的一个简单案例,说明多态的含义:

<?php
/**
 * PHP中的多态:
 * 定义一个抽象类:Person,有两个子类:Worker 和 Student
 */

/**
 * 定义一个抽象父类
 */
abstract class Person {
    public abstract function action();
}

/**
 * 两个子类,继承父类
 */
class Worker extends Person {
    public function action() {
        echo '工人去上班' . PHP_EOL;
    }
}

class Student extends Person {
    public function action() {
        echo '学生去上学' . PHP_EOL;
    }
}

/**
 * 其它的类, 不继承自Person
 */
class Ufo {
    public function action() {
        echo '外星人的行为...' . PHP_EOL;
    }
}

/**
 * 调用
 */
function main($person) {
    $person->action();
}

main(new Worker()); //工人去上班
main(new Student()); //学生去上学
main(new Ufo()); //外星人的行为...

 源代码:https://gitee.com/rxbook/php_design_pattern/blob/master/code01_Polymorphism.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单线程boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值