PHP的INSTANCEOF使用方法介绍
发布:smiling 来源: PHP粉丝网 添加日期:2015-04-08 14:16:29 浏览: 评论:0
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; //开源软件:phpfensi.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的用法.
Tags: INSTANCEOF PHP运算符
- 上一篇:PHP预定义接口使用学习笔记
- 下一篇:PHP使用traits实现代码复用的例子
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)