我知道那instanceof是一个运算符,那is_a是一种方法。
instanceof
is_a
该方法的性能是否较慢?你更喜欢用什么?
更新
从PHP 5.3.9开始, 的功能发生is_a()了变化。下面的原始答案声明is_a() 必须 接受 aObject作为第一个参数,但 PHP 版本 >= 5.3.9 现在接受可选的第三个布尔参数$allow_string(默认为false)以允许比较字符串类名:
is_a()
Object
$allow_string
false
class MyBaseClass {} class MyExtendingClass extends MyBaseClass {} // Original behavior, evaluates to false. is_a(MyExtendingClass::class, MyBaseClass::class); // New behavior, evaluates to true. is_a(MyExtendingClass::class, MyBaseClass::class, true);
instanceof和之间的新行为的主要区别在于is_a(),instanceof它将始终检查目标是指定类(包括扩展类)的实例化对象,而仅在参数设置为默认值is_a()时才要求实例化对象。$allow_string``false
$allow_string``false
原来的
实际上,is_a是一个函数,而是instanceof一个语言结构。 is_a会显着变慢(因为它具有执行函数调用的所有开销),但两种方法的总执行时间都很短。
从 5.3 开始,它不再被弃用,所以不用担心。
然而,有一个区别。 is_a作为一个函数,将一个对象作为参数 1,将一个字符串(变量、常量或文字)作为参数 2。所以:
is_a($object, $string); // <- Only way to call it
instanceof将对象作为参数 1,并且可以将类名(变量)、对象实例(变量)或类标识符(不带引号的类名)作为参数 2。
$object instanceof $string; // <- string class name $object instanceof $otherObject; // <- object instance $object instanceof ClassName; // <- identifier for the class