zoukankan      html  css  js  c++  java
  • PHP面向对象:instanceof 运算符 (备忘)

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

    感谢分享

    在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:PHPProjectsNowaMagicphpphp_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);
    ?>

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

    最后

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

    程序运行结果:

    age is 99

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

  • 相关阅读:
    Java hibernate 遇到的问题:could not read a hi value
    Java 小知识
    Java 在使用@Select遇到的问题:拼接字符串将数组拼为了字符串
    飞逝的光阴
    终于回来了
    再说创客
    离开一段时间
    抛弃QP
    关于创客
    对DTU系统结构的重新思考
  • 原文地址:https://www.cnblogs.com/lazyx/p/4897066.html
Copyright © 2011-2022 走看看