instanceof运算符的运用
在PHP5中,通过方法传递变量的类型有不确定性。我们很难判断,一些操作是否可以运行。
使用instanceof运算符,可以判断当前实例是否可以有这样的一个形态。当前实例使用 instanceof与当前类,父类(向上无限追溯),已经实现的接口比较时,返回真。
代码格式:实例名 instanceof 类名
instanceof 运算符的运用
如下例子可以运行。
没用instanceof运算符判断就会报错,示例代码如下:
<?php
class User{
private $name="zhenlw";
public function getName(){
return "UserName is ".$this->name;
}
}
class NormalUser extends User {
private $age = 99;
public function getAge(){
return "age is ".$this->age;
}
}
class UserAdmin{ //操作.
public static function getUserInfo(User $user){
echo $user->getAge();
}
}
$User = new User();
UserAdmin::getUserInfo($User);
?>
运行后报如下错误:
Fatal error: Call to undefined method User::getAge() in D:\xampp\htdocs\test\8\test.php on line 20
因为你传入的对象参数根本没有getAge方法,如果是NormalUser的对象的话就可以正常运行了,这个时候我们运用instanceof运算符来进行判断,修改后的示例代码如下:
<?php
class User{
private $name="zhenlw";
public function getName(){
return "UserName is ".$this->name;
}
}
class NormalUser extends User {
private $age = 99;
public function getAge(){
return "age is ".$this->age;
}
}
class UserAdmin{ //操作.
public static function getUserInfo(User $user){
if($user instanceof NormalUser){
echo $user->getAge();
} elseif($user instanceof User){
echo $user->getName();
}
}
}
$User = new User(); // 这里是User的对象.
UserAdmin::getUserInfo($User);
echo "<br>";
$normaluser = new NormalUser(); // 这里是NormalUser的对象.
UserAdmin::getUserInfo($normaluser);
?>
运行结果:
UserName is zhenlw
age is 99
看到运行结果就知道了吧,运用instanceof判断数据类型后就可以保证代码的健壮性,不论你传入的是哪个对象,都可以正确的对此对象进行处理。