名站导航为爱好php程序的朋友们提供php相关的教程知识。
多态这个概念,在Java中指的是变量可以指向的对象的类型,可是变量声明类型的子类。对象一旦创建,它的类型是不变的,多态的是变量。
在PhP程序5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等。我们无法说PhP程序5中多态的是变量。
我们只能说在PhP程序5中,多态应用在方法参数的类型提示位置。
一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求。简单的说,一个类拥有其父类、和已实现接口的身份。
通过实现接口实现多态
下面的例子中,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程序面向对象之旅:instanceof运算符
使用instanceof运算符,可以判断当前具体实例操作是否可以有这样的一个形态。当前具体实例操作使用 instanceof与当前类,父类(向上无限追溯),已经实现的接口比较时,返回真。