PHP面向对象:instanceof 运算符

http://www.nowamagic.net/php/php_InstanceofOperator.php

在PHP5中,通过方法传递变量的类型有不确定性。于是我们很难判断,一些操作是否可以运行。

使用instanceof运算符,可以判断当前实例是否可以有这样的一个形态。当前实例使用 instanceof与当前类,父类(向上无限追溯),已经实现的接口比较时,返回真。

代码格式:实例名 instanceof 类名

instanceof 运算符的运用

如下例子可以运行。

01 <?
02 class User{
03     private $name;
04     public function  getName(){
05         return "UserName is ".$this->name;
06     }
07 }
08  
09 class NormalUser extends User {
10     private $age = 99;
11     public function getAge(){
12         return "age is ".$this->age;
13     }
14 }
15  
16 class UserAdmin{ //操作.
17     public static function  getUserInfo(User $_user){
18         echo $_user->getAge();
19     }
20 }
21 $normalUser new NormalUser();
22 UserAdmin::getUserInfo($normalUser);
23 ?>

程序运行结果:

1 age is 99

在User类中因为没有这个方法而报错:

01 <?
02 class User{
03     private $name;
04     public function  getName(){
05         return "UserName is ".$this->name;
06     }
07 }
08  
09 class NormalUser extends User {
10     private $age = 99;
11     public function getAge(){
12         return "age is ".$this->age;
13     }
14 }
15  
16 class UserAdmin{ //操作.
17     public static function  getUserInfo(User $_user){
18         echo $_user->getAge();
19     }
20 }
21 $User new User(); // 这里new的是User.
22 UserAdmin::getUserInfo($User);
23 ?>

程序运行结果:

1 Fatal error:  Call to undefined method User::getAge() in E:\PHPProjects\NowaMagic\php\php_InstanceofOperator.php on line 99

使用instatnceof运算符保障代码安全

使用instatnceof运算符,在操作前先进行类型判断。以保障代码的安全性。

01 <?
02 class User{
03     private $name;
04     public function  getName(){
05         return "UserName is ".$this->name;
06     }
07 }
08  
09 class NormalUser extends User {
10     private $age = 99;
11     public function getAge(){
12         return "age is ".$this->age;
13     }
14 }
15  
16 class UserAdmin{ //操作.
17     public static function  getUserInfo(User $_user){
18         if($_user instanceof NormalUser ){
19             echo $_user->getAge();
20         }else{
21             echo "类型不对,不能使用这个方法.";
22         }
23     }
24 }
25 $User new User(); // 这里new的是User.
26 UserAdmin::getUserInfo($User);
27 ?>

程序运行结果:

1 类型不对,不能使用这个方法.
posted @ 2016-03-23 10:37  tiandi2050  阅读(584)  评论(0编辑  收藏  举报