PHP的INSTANCEOF使用方式介绍
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的用法: if ( ! emptyempty( $current_user ) ) { if ( $current_user instanceof WP_User ) return; // Upgrade stdClass to WP_User if ( is_object( $current_user ) && isset( $current_user->ID ) ) { $cur_id = $current_user->ID; $current_user = null; wp_set_current_user( $cur_id ); return; //开源软件:Cuoxin.com } // $current_user has a junk value. Force to WP_User with ID 0. $current_user = null; wp_set_current_user( 0 ); 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 引起的类名查找和致命错误问题. <?php $d = 'NotMyClass'; var_dump($a instanceof $d); // no fatal error here ?> 代码格式:实例名 instanceof 类名 instanceof 运算符的运用 如下例子可以运行: <?php class User{ private $name; 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(); } } $normalUser = new NormalUser(); UserAdmin::getUserInfo($normalUser); ?> //程序运行结果: age is 99 在User类中因为没有这个方法而报错: <?php class User{ private $name; 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(); // 这里new的是User. UserAdmin::getUserInfo($User); ?> 程序运行结果:Fatal error: Call to undefined method User::getAge() in E:\PHPProjects\NowaMagic\php\php_InstanceofOperator.php on line 99 使用instatnceof运算符保障代码安全,使用instatnceof运算符,在操作前先进行类型判断,以保障代码的安全性. <?php class User{ private $name; 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(); }else{ echo "类型不对,不能使用这个方法."; } } } $User = new User(); // 这里new的是User. UserAdmin::getUserInfo($User); ?> 程序运行结果:类型不对,不能使用这个方法. 这就是php关键字instanceof的用法. (编辑:银川站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |