PHP面向对象:PHP中的多态
2014-05-01 01:44
393 查看
多态这个概念,在Java中指的是变量可以指向的对象的类型,可是变量声明类型的子类。对象一旦创建,它的类型是不变的,多态的是变量。
在PHP5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等。我们无法说PHP5中多态的是变量。
我们只能说在PHP5中,多态应用在方法参数的类型提示位置。
一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求。简单的说,一个类拥有其父类、和已实现接口的身份。
下面的例子中,UserAdmin类的静态方法,要求一个User类型的参数。
在后面的使用中,传递了一个实现了User接口的类NormalUser的实例。代码成功运行。
程序运行结果:
下面是类和子类的关系。
程序运行结果:
在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中的钩子
- discuz密码加密的方式
- sphinx全文检索之PHP使用教程
- PHP设计模式之:单例模式
- PHP设计模式之:单例模式
- php写的一个简单路由控制类
- php 双向队列类
- php 双向队列类
- 一个简单的PHP登录与注册程序源码
- php提取csv格式文件中的字符串出现的问题及解决办法
- Ubuntu 配置 ftp freemind adb
- thinkphp3.2开发排错一例——当输入数据长度超过表里设置的长度后,提示操作失败,没有提示超过长度
- PHP中实现在数据库中的增、删、查、改
- 在PHP中如何连接到数据库
- 如何在CLI命令行下运行PHP脚本,同时向PHP脚本传递参数?
- PHP容易出错的地方!
- BUSYBOX下的TFTP介绍
- PHP浏览器状态管理!
- PHP register_shutdown_function