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);
?>
输出:
类型不对,不能使用这个方法.
原文引用及推荐: