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

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

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

代码格式:实例名 instanceof 类名

instanceof 运算符的运用

如下例子可以运行。

01 <?
02 class User{
03     private $name;
04     public function  getName(){
05         return "UserName is ".$this->name;
06     }
07 }
08  
09 class NormalUser extends User {
10     private $age = 99;
11     public function getAge(){
12         return "age is ".$this->age;
13     }
14 }
15  
16 class UserAdmin{ //操作.
17     public static function  getUserInfo(User $_user){
18         echo $_user->getAge();
19     }
20 }
21 $normalUser new NormalUser();
22 UserAdmin::getUserInfo($normalUser);
23 ?>

程序运行结果:

1 age is 99

在User类中因为没有这个方法而报错:

01 <?
02 class User{
03     private $name;
04     public function  getName(){
05         return "UserName is ".$this->name;
06     }
07 }
08  
09 class NormalUser extends User {
10     private $age = 99;
11     public function getAge(){
12         return "age is ".$this->age;
13     }
14 }
15  
16 class UserAdmin{ //操作.
17     public static function  getUserInfo(User $_user){
18         echo $_user->getAge();
19     }
20 }
21 $User new User(); // 这里new的是User.
22 UserAdmin::getUserInfo($User);
23 ?>

程序运行结果:

1 Fatal error:  Call to undefined method User::getAge() in E:\PHPProjects\NowaMagic\php\php_InstanceofOperator.php on line 99

使用instatnceof运算符保障代码安全

使用instatnceof运算符,在操作前先进行类型判断。以保障代码的安全性。

01 <?
02 class User{
03     private $name;
04     public function  getName(){
05         return "UserName is ".$this->name;
06     }
07 }
08  
09 class NormalUser extends User {
10     private $age = 99;
11     public function getAge(){
12         return "age is ".$this->age;
13     }
14 }
15  
16 class UserAdmin{ //操作.
17     public static function  getUserInfo(User $_user){
18         if($_user instanceof NormalUser ){
19             echo $_user->getAge();
20         }else{
21             echo "类型不对,不能使用这个方法.";
22         }
23     }
24 }
25 $User new User(); // 这里new的是User.
26 UserAdmin::getUserInfo($User);
27 ?>

程序运行结果:

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

PHP面向对象:instanceof 运算符的更多相关文章

  1. JavaScript instanceof 运算符深入剖析

    简介: 随着 web 的发展,越来越多的产品功能都放在前端进行实现,增强用户体验.而前端开发的主要语言则是 JavaScript.学好 JavaScript 对开发前端应用已经越来越重要.在开发复杂产 ...

  2. tips instanceof运算符和typeof运算符的区别

    tips instanceof运算符和typeof运算符的区别  一.instanceof运算符:       此运算符可以判断一个变量是否是某个对象(类)的实例,返回值是布尔类型的(true和fal ...

  3. JavaScript instanceof 运算符深入剖析【转载】

    http://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/   instanceof 运算符简介 在 JavaScript ...

  4. java抽象类,接口(接口定义,实现接口,instanceof运算符,对象转换)

    抽象类 在面向对象的概念中,所有的对象都是通过类来表述的,但并不是所有的类都能够完整的描绘对象,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类.抽象类往往用来表征对问题领域进行 ...

  5. instanceof 运算符

    java中的instanceof=======>二元运算符 用法: result = object instanceof class 参数: result 是boolean类型 object 是 ...

  6. instanceof运算符

    instanceof运算符:判断该对象是否是某一个类的实例. 语法格式:boolean b = 对象A instanceof 类B://判断A对象是否是B类的实例,如果是返回true. 若对象是类的实 ...

  7. Object.prototype 与 Function.prototype 与 instanceof 运算符

    方法: hasOwnProperty isPrototypeOf propertyIsEnumerable hasOwnProperty 该方法用来判断一个对象中的某一个属性是否是自己提供的( 住要用 ...

  8. JavaScript原型链和instanceof运算符的暧昧关系

    时间回到两个月前,简单地理了理原型链.prototype以及__proto__之间的乱七八糟的关系,同时也简单了解了下typeof和instanceof两个运算符,但是,anyway,试试以下两题: ...

  9. js的in运算符与instanceof运算符

    in运算符:希望他的左操作数是一个字符串或可以转换为字符串,希望他的右操作数是一个对象.如果右操作数的对象拥有一个名为左操作数值的属性名,那么表达式返回true. var point= {x:1,y: ...

随机推荐

  1. CF 717A Festival Organization——斯特林数+递推求通项+扩域

    题目:http://codeforces.com/contest/717/problem/A 是 BJOI2019 勘破神机 的弱化版. 令 \( g[i] \) 表示长为 i .以 1 结尾的方案数 ...

  2. JS知识—面试准备(一)

    1.JS内置类型 分为基本数据类型和Object.基本数据类型有:null,undefined,string,boolean,number,symbol. console.log(typeof nul ...

  3. (转)超详细java中的ClassLoader详解

    转:https://blog.csdn.net/briblue/article/details/54973413 ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于 ...

  4. 高并发大流量专题---3、前端优化(减少HTTP请求次数)

    高并发大流量专题---3.前端优化(减少HTTP请求次数) 一.总结 一句话总结: 图片地图:使用<map><area></area></map>标签. ...

  5. 使用Docker快速部署Gitlab

    使用Docker部署Gitlab 1. 下载gitlab镜像 docker pull gitlab/gitlab-ce 2. 运行gitlab实例 GITLAB_HOME=`pwd`/data/git ...

  6. sqlserver数据库里怎样设置datetime类型的小数位数为3位

    要用datetime2(7)这种类型!将7改为3就行了

  7. 用shell脚本实现MongoDB数据库自动备份

    一.创建MongoDB备份目录 用来存放数据 mkdir -p /data/mongodb_bak/mongodb_bak_now mkdir -p /data/mongodb_bak/mongodb ...

  8. 微众银行c++选择题后记

    一个类的成员可以有:另一个类的对象,类的自身指针,自身类对象的引用(私有的如何初始化呢,所以不行,换成静态的可以),自身类对象(构造时如何初始化呢?) class A{ public: A(){} A ...

  9. 平衡二叉搜索树AVL

    package com.sunshine.AlgorithmTemplate; import com.sunshine.OFFER66_SECOND.BalanceTreeNode; import c ...

  10. <每日一题>题目4:for循环套生成器的面试题

    题目: def add(n,i): return n+i def test(): for i in range(4): yield i g = test() for n in [1,10,5]: g ...