首页 > 语言 > PHP > 正文

PHP的INSTANCEOF使用方法介绍

2024-09-04 11:43:47
字体:
来源:转载
供稿:网友

php的instanceof是什么意思?instanceof由两个单词组成,instance和of,instance表示实例的意思,从字面上就可以理解这是实例引用的意思,instanceof是PHP5引入的新关键字.

instanceof 运算符是 PHP 5 引进的,在此之前用 is_a(),但是 is_a() 已经过时了,最好用 instanceof.

1、用来确定一个变量是否属于某个类的实例;

2、用来确定一个变量是否是继承自某一父类的子类的实例;

3、用来确定一个变量是否是实现了某个接口的对象的实例。

在 PHP 5.1.0之前,如果要检查的类名称不存在,instanceof 会调用 __autoload(),另外,如果该类没有被装载则会产生一个致命错误,可以通过使用动态类引用(dynamic class reference)或用一个包含类名的字符串变量来避开这种问题.

下面举例说明php instanceof的用法:

  1. if ( ! emptyempty$current_user ) ) { 
  2.  if ( $current_user instanceof WP_User ) 
  3.   return
  4.  
  5.  // Upgrade stdClass to WP_User 
  6.  if ( is_object$current_user ) && isset( $current_user->ID ) ) { 
  7.   $cur_id = $current_user->ID; 
  8.   $current_user = null; 
  9.   wp_set_current_user( $cur_id ); 
  10.   return;  //开源软件:Vevb.com 
  11.  } 
  12.  
  13.  // $current_user has a junk value. Force to WP_User with ID 0. 
  14.  $current_user = null; 
  15.  wp_set_current_user( 0 ); 
  16.  return false; 

如代码中高亮的部分,if ( $current_user instanceof WP_User),WP_User是一个类名,在这里这句话是判断$current_user是否是WP_User这个类的实例,也就是判断前面的代码中是否已经有$current_user=new WP_User().

使用instanceof这个关键字可以确定一个对象是类的实例、类的子类,还是实现了某个特定接口,并进行相应的操作.

Example #6 避免 PHP 5.0 中 instanceof 引起的类名查找和致命错误问题.

  1. <?php 
  2. $d = 'NotMyClass'
  3. var_dump($a instanceof $d); // no fatal error here 
  4. ?> 

代码格式:实例名 instanceof 类名

instanceof 运算符的运用

如下例子可以运行:

  1. <?php 
  2. class User{ 
  3.  private $name
  4.  public function  getName(){ 
  5.   return "UserName is ".$this->name; 
  6.  } 
  7. class NormalUser extends User { 
  8.  private $age = 99; 
  9.  public function getAge(){ 
  10.   return "age is ".$this->age; 
  11.  } 
  12. class UserAdmin{ //操作. 
  13.  public static function  getUserInfo(User $_user){ 
  14.   echo $_user->getAge(); 
  15.  } 
  16. $normalUser = new NormalUser(); 
  17. UserAdmin::getUserInfo($normalUser); 
  18. ?> 
  19. //程序运行结果: 
  20. age is 99 

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

  1. <?php 
  2. class User{ 
  3.  private $name
  4.  public function  getName(){ 
  5.   return "UserName is ".$this->name; 
  6.  } 
  7. class NormalUser extends User { 
  8.  private $age = 99; 
  9.  public function getAge(){ 
  10.   return "age is ".$this->age; 
  11.  } 
  12. class UserAdmin{ //操作. 
  13.  public static function  getUserInfo(User $_user){ 
  14.   echo $_user->getAge(); 
  15.  } 
  16. $User = new User(); // 这里new的是User. 
  17. UserAdmin::getUserInfo($User); 
  18. ?> 

程序运行结果:Fatal error:  Call to undefined method User::getAge() in E:\PHPProjects\NowaMagic\php\php_InstanceofOperator.php on line 99

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

  1. <?php 
  2. class User{ 
  3.  private $name
  4.  public function  getName(){ 
  5.   return "UserName is ".$this->name; 
  6.  } 
  7. class NormalUser extends User { 
  8.  private $age = 99; 
  9.  public function getAge(){ 
  10.   return "age is ".$this->age; 
  11.  } 
  12. class UserAdmin{ //操作. 
  13.  public static function  getUserInfo(User $_user){ 
  14.   if($_user instanceof NormalUser ){ 
  15.    echo $_user->getAge(); 
  16.   }else
  17.    echo "类型不对,不能使用这个方法."
  18.   } 
  19.  } 
  20. $User = new User(); // 这里new的是User. 
  21. UserAdmin::getUserInfo($User); 
  22. ?> 

程序运行结果:类型不对,不能使用这个方法.

这就是php关键字instanceof的用法.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表