php get instance of,PHP面向对象之旅:instanceof运算符

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

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

代码格式:实例名 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);

?>

程序运行结果:

类型不对,不能使用这个方法.

延伸阅读

此文章所在专题列表如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值