instanceof php 的几个具体例子

在PHP5中,通过方法传递变量的类型有不确定性。于是我们很难判断,一些操作是否可以运行。
使用instanceof运算符,可以判断当前实例是否可以有这样的一个形态。当前实例使用 instanceof与当前类,父类(向上无限追溯),已经实现的接口比较时,返回真。

"instanceof"操作符的使用非常简单,它用两个参数来完成其功能。

第一个参数是你想要检查的对象,第二个参数是类名(事实上是一个接口名),用于确定是否这个对象是相应类的一个实例。它的基本语法如下:
if (object instanceof class name){//继承关系

}

下面举几个例子:

一:Manual的例子是这样的

<?php
class test
{    var $var;
    function disp()
   {
       echo "Inside the class";
   }
}

$obj=new test;

var_dump($obj instanceof test); // Prints bool(true)

?>


二:下面举个更具体的例子:

    <?
    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类中因为没有getAge()这个方法而被调用则会报错:
    <?
    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运算符,在操作前先进行类型判断。以保障代码的安全性。
    <?
    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);
    ?>

程序运行结果:
    类型不对.



二:下面贴出的是LZ项目代码的一部分(不解释O(∩_∩)O~)

   /***
    * Add item to the shopping cart
    * If the position was previously added to the cart,
    * then information about it is updated, and count increases by $quantity
    * @param IECartPosition $position
    * @param int count of elements positions
    * @return bool
    */
    public function put(IECartPosition $position, $quantity = 1) {
        $key = $position->getId();
        if ($this->itemAt($key) instanceof IECartPosition) {
            $position = $this->itemAt($key);
            $oldQuantity = $position->getQuantity();
            $quantity += $oldQuantity;
        }
        if($this->update($position, $quantity))
            return true;

    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值