zoukankan      html  css  js  c++  java
  • php-instanceof运算符

    1、关于 instanceof 的一些基本概念

      1)、instanceof 用于确定一个PHP变量是否属于某一类class的实例:

    <?php
    class MyClass
    {
    }
    
    class NotMyClass
    {
    }
    $a = new MyClass;
    
    var_dump($a instanceof MyClass);
    var_dump($a instanceof NotMyClass);
    ?>


    输出结果:

    bool(true)
    bool(false)

      2)、instanceof 也用来确定一个变量是不是继承自某一父类的子类的实例:

    <?php
    class ParentClass
    {
    }
    
    class MyClass extends ParentClass
    {
    }
    
    $a = new MyClass;
    
    var_dump($a instanceof MyClass);
    var_dump($a instanceof ParentClass);
    ?>

    输出结果

    bool(true)
    bool(true)

      3)、instanceof 用于确定一个变量是不是实现了某个接口的对象的实例:

    <?php
    interface MyInterface
    {
    }
    
    class MyClass implements MyInterface
    {
    }
    
    $a = new MyClass;
    
    var_dump($a instanceof MyClass);
    var_dump($a instanceof MyInterface);
    ?>

    输出:

    bool(true)
    bool(true)

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

    输出:

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

    原文引用及推荐:

    详解PHP中instanceof关键字及instanceof关键字有什么作用

    php instanceof操作符

    php中instanceof 与 is_a()区别分析

  • 相关阅读:
    DTOJ #3328. 开箱子(unboxing)
    dtoi4649 光明
    dtoi4539「TJOI / HEOI2016」序列
    dtoi3031 交错和查询 (sum)
    dtoi4375「BJOI2019」删数
    dtoi4266 exchange
    dtoi4680 红黑兔
    dtoi1363 楼房重建 (rebuild)
    dtoi1927 [ONTAK2010]Peaks加强版
    dtoi4538 「TJOI / HEOI2016」排序
  • 原文地址:https://www.cnblogs.com/ddddemo/p/5623608.html
Copyright © 2011-2022 走看看