博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP面向对象:instanceof 运算符 (备忘)
阅读量:4677 次
发布时间:2019-06-09

本文共 2150 字,大约阅读时间需要 7 分钟。

转载:http://www.nowamagic.net/php/php_InstanceofOperator.php

感谢分享

 

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

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

代码格式:实例名 instanceof 类名

 

instanceof 运算符的运用

如下例子可以运行。

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

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

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);?>

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

最后

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 instanceof NormalUser; // true if($_user instanceof User ){ //这里是User echo $_user->getAge(); }else{ echo "类型不对,不能使用这个方法."; } }}$User = new NormalUser(); // 这里new的是NormalUser.UserAdmin::getUserInfo($User);?>

程序运行结果:

age is 99

 

同样证实上面的说法,直白说就是返回在当前实例中类是否有效

转载于:https://www.cnblogs.com/lazyx/p/4897066.html

你可能感兴趣的文章
centos 7 下vnc弹出窗口太小解决方法
查看>>
SpringCloud Feign的分析
查看>>
使用MD5WithRSA来签名和验签(.NET)
查看>>
异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.
查看>>
使用gifplayer操作gif的方法
查看>>
利用SOAtest建立自动化测试验证网站是否成功加载
查看>>
一些鲜为人知却非常实用的数据结构 - Haippy
查看>>
【C#】C#线程_I/O限制的异步操作
查看>>
Flask-SQLAlchemy
查看>>
kettle参数、变量详细讲解[转]
查看>>
C# - Generics
查看>>
.NET LINQ 转换数据类型
查看>>
[LGP2791] 幼儿园篮球题
查看>>
170. Two Sum III - Data structure design
查看>>
os & sys
查看>>
Shell 常用命令总结
查看>>
vector
查看>>
杨辉三角
查看>>
用分布式缓存提升ASP.NET Core性能
查看>>
[MySQL FAQ]系列 -- mysql如何计算打开文件数
查看>>