php instance of接口_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 ( ! empty( $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;

}

// $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 引起的类名查找和致命错误问题

$d = 'NotMyClass';

var_dump($a instanceof $d); // no fatal error here

?>

代码格式:实例名 instanceof 类名

instanceof 运算符的运用

如下例子可以运行。

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类中因为没有这个方法而报错:

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运算符,在操作前先进行类型判断。以保障代码的安全性。

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的用法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值