多态这个概念,在Java中指的是变量可以指向的对象的类型,可是变量声明类型的子类。对象一旦创建,它的类型是不变的,多态的是变量。

在PHP5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等。我们无法说PHP5中多态的是变量。

我们只能说在PHP5中,多态应用在方法参数的类型提示位置。

一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求。简单的说,一个类拥有其父类、和已实现接口的身份。

通过实现接口实现多态

下面的例子中,UserAdmin类的静态方法,要求一个User类型的参数。

在后面的使用中,传递了一个实现了User接口的类NormalUser的实例。代码成功运行。

interface User{ // User接口

public function getName();

public function setName($_name);

}

class NormalUser implements User { // 实现接口的类.

private $name;

public function getName(){

return $this->name;

}

public function setName($_name){

$this->name = $_name;

}

}

class UserAdmin{ //操作.

public static function ChangeUserName(User $_user,$_userName){

$_user->setName($_userName);

}

}

$normalUser = new NormalUser();

UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例.

echo $normalUser->getName();

?>

程序运行结果:

Tom

通过继承关系实现多态

下面是类和子类的关系。

class User{ // User接口

public function getName(){}

}

class NormalUser extends User { // 继承自User类

private $name;

public function getName(){

return $this->name;

}

public function setName($_name){

$this->name = $_name;

}

}

class UserAdmin{ //操作.

public static function ChangeUserName(User $_user,$_userName){

$_user->setName($_userName);

}

}

$normalUser = new NormalUser();

UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例.

echo $normalUser->getName();

?>

程序运行结果:

Tom

延伸阅读

此文章所在专题列表如下:

php多态实现,PHP面向对象之旅:PHP的多态相关推荐

  1. 面向对象的三大特性之多态

    面向对象的三大特性之多态 文章目录 面向对象的三大特性之多态 前言 一.静态多态 1.函数重载 2.函数模板 二.动态多态 1.函数重写 2.虚函数的继承特性 三.重定义 前言 多态的简单定义为同一种 ...

  2. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  3. 面向对象-封装、继承、多态

    面向对象-封装.继承.多态 面向对象-封装 一.封装: private 数据类型 _名字;   --成员变量 public 默认一致 名字 属性 {  get{ return _名字; }  set{ ...

  4. Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...

  5. polymorphism java_Java基础-面向对象第三大特性之多态(polymorphism)

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  6. java面向对象的多态_java面向对象(五)之多态

    多态 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. ...

  7. java 面向对象多态_乐字节Java面向对象三大特性以及Java多态

    ​ 以上就是本次学习的6大任务.我们依次来看. 1 Object类 Object类是所有Java类的根基类. 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类. cla ...

  8. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  9. Java面向对象 - 封装、继承和多态

    简介 面向对象的三个基本特征是:封装.继承和多态. 封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类).封装和继承的目的都是:代码重用.而多态则是为了实现另一个目的 -- 接口重 ...

最新文章

  1. json_encode时中文编码转正常状态
  2. linux sheet脚本去掉m,linux下的文本dos格式转unix格式,去除^M符号
  3. python软件开发-Python -- 软件开发规范
  4. BZOJ 1046: [HAOI2007]上升序列【贪心+二分状态+dp+递归】
  5. CCF201409-2 画图 java(100分)
  6. 强化学习-动态规划_强化学习-第5部分
  7. 我们究竟还要学习哪些Android知识?看这一篇就够了!
  8. pjsip的编译及简单使用
  9. UI实用素材|电商购物类APP界面设计原则!
  10. 步道乐跑怎么刷公里_车子一年跑不到5000公里,怎么保养比较好?这些方法最省钱...
  11. [WebApi] 捣鼓一个资源管理器--多文件上传
  12. iphone ping_如何在iPhone上运行Ping(网络诊断)
  13. mysql数据库输出数据语法错误_MySQL数据库定义存储过程总是报语法错误的解决方法...
  14. k8s搭建v1.18.3高可用集群时添加master节点报错:failure loading certificate for CA: couldn‘t load the certificate fil
  15. 《JavaScript百炼成仙》 全书知识点整理
  16. July大神的大数据解决思路
  17. 交换机短路_交换机端口短路 导致上网不正常
  18. Egret 使用反向遮罩做新手引导功能
  19. Android Wear 开发者预览版安装
  20. 技术实现之http请求封装

热门文章

  1. unity Android 指南针,Unity之一天一个技术点(十二)---指南针的实现
  2. c语言delay_利用C语言编程单片机,制作可以根据环境光照调整亮度的智能灯
  3. OpenCV C++ 08 - Homogeneous Blur on Images with OpenCV
  4. 博客园 页面定制CSS代码
  5. form表单的一个页面多个上传按钮实例
  6. tyvj 1067 合唱队形 dp LIS
  7. 002.ICMP--拼接ICMP包,实现简单Ping程序(原始套接字)
  8. [Python人工智能] 二十九.什么是生成对抗网络GAN?基础原理和代码普及(1)
  9. HarmonyOS之AI能力·文档检测校正
  10. iOS之高德地图定位偏移以及经纬度之间的转换