首页> 基础笔记 >PHP基础学习 >面向对象 面向对象
PHP面向对象多态性的应用
作者:小萝卜 2019-09-05 【 PHP 面向对象 】 浏览 1677
简介对象的多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。通过接口实现多态的应用,通过抽象类实现多态的应用,通过普通类实现多态的应用。
PHP面向对象多态性的应用
对于同一个方法,传入不同对象,实现了不同的效果,这个就是多态。需要使用的技术有继承或实现方法的覆盖(重写)。对象的多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。
例如:"几何图形"的"绘图"方法,"椭圆"和"多边形"都是"几何图"的子类,其"绘图"方法功能不同。
通过接口实现多态的应用1;
<?php
//定义一个USB接口,让每个USB设略都遵守这个规范
interface USB {
function run();
}
//声明一个电脑类, 去使用USB设置
class Computer {
//电脑类中的一个方法可以应用任何一种USB设备
function useUSB($usb) {
$usb -> run();
}
}
$computer = new Computer; //实例化一个电脑类的对象
$computer ->useUSB( new Ukey() ); //为电脑插入一个USB键盘设备,并运行
$computer ->useUSB( new Umouse() ); //为电脑插入一个USB鼠标设备,并运行
$computer ->useUSB( new Ustore() ); //为电脑插入一个USB存储设备,并运行
//扩展一个USB键盘设置,实现USB接口
class Ukey implements USB {
public function run() { //按键盘的功能实现接口中的方法
echo "运行USB键盘设备<br>";
}
}
//扩展一个USB鼠标设置,实现USB接口
class Umouse implements USB {
public function run() { //按鼠标的功能实现接口中的方法
echo "运行USB鼠标设备<br>";
}
}
//扩展一个USB存储设置,实现USB接口
class Ustore implements USB {
public function run() { //按存储的功能实现接口中的方法
echo "运行USB存储设备<br>";
}
}
通过接口实现多态的应用2:
<?php
//1. 通过接口实现多态的应用
//主板:
//定义主板上PCI接口规范
interface PCI{
public function start();
public function stop();
}
//主板类
class MainBoard{
//此处为多态的应用,方法要求传入一个PCI但是实际传入的是声卡或网卡等设备对象,导致执行效果的不同,即为多态效果。
public function running(PCI $pci){
$pci->start();
$pci->stop();
}
}
//声卡
class SoundCard implements PCI{
public function start(){
echo "声卡启动...<br/>";
}
public function stop(){
echo "声卡停止...<br/>";
}
}
//网卡
class NetworkCard implements PCI{
public function start(){
echo "网卡启动...<br/>";
}
public function stop(){
echo "网卡停止...<br/>";
}
}
//系统
$mb = new MainBoard();
$sc = new SoundCard();
$nc = new NetworkCard();
$mb->running($sc);
$mb->running($nc);
通过抽象类实现多态的应用:
<?php
//1. 通过抽象类实现多态的应用
//主板:
//定义主板上抽象PCI类规范
abstract class PCI{
public abstract function start();
public abstract function stop();
}
//主板类
class MainBoard{
//此处为多态的应用,方法要求传入一个PCI但是实际传入的是声卡或网卡等设备对象,导致执行效果的不同,即为多态效果。
public function running(PCI $pci){
$pci->start();
$pci->stop();
}
}
//声卡
class SoundCard extends PCI{
public function start(){
echo "声卡启动...<br/>";
}
public function stop(){
echo "声卡停止...<br/>";
}
}
//网卡
class NetworkCard extends PCI{
public function start(){
echo "网卡启动...<br/>";
}
public function stop(){
echo "网卡停止...<br/>";
}
}
//系统
$mb = new MainBoard();
$sc = new SoundCard();
$nc = new NetworkCard();
$mb->running($sc);
$mb->running($nc);
通过普通类实现多态的应用(不推荐)
<?php
//1. 通过普通类实现多态的应用(不推荐)
//主板:
//定义主板上PCI类规范(此规范对子类没有约束能力)
class PCI{
public function start(){
}
public function stop(){
}
}
//主板类
class MainBoard{
//此处为多态的应用,方法要求传入一个PCI但是实际传入的是声卡或网卡等设备对象,导致执行效果的不同,即为多态效果。
public function running(PCI $pci){
$pci->start();
$pci->stop();
}
}
//声卡
class SoundCard extends PCI{
public function start(){
echo "声卡启动...<br/>";
}
//此处没有按照父类的方法重写,导致声卡无法停止。
public function stop2(){
echo "声卡停止...<br/>";
}
}
//网卡
class NetworkCard extends PCI{
public function start(){
echo "网卡启动...<br/>";
}
public function stop(){
echo "网卡停止...<br/>";
}
}
//系统
$mb = new MainBoard();
$sc = new SoundCard();
$nc = new NetworkCard();
$mb->running($sc);
$mb->running($nc);
很赞哦! (0)
上一篇:与对象和类有关的扩展函数
下一篇:PHP抽象类与接口的区别