PHP的is_a()函数和 instanceof 有什么区别?
is_a() 是PHP的一个内置函数,用于检查给定对象是否属于给定类。它还检查给定的类是否是给定对象的父类之一。
句法:
bool is_a( $object, $class_name, $allow_string )
参数:该函数接受上面提到和下面描述的三个参数:
- object:该参数用于保存被测对象。
- class_name:该参数用于保存类名。
- allow_string:如果此参数设置为False,则不允许将字符串类名作为对象。
返回值:如果对象属于此类或将此类作为其父项之一,则此函数返回 True,否则将返回 False 值。
下面的程序说明了 is_a()函数:
输出:
Yes
在PHP使用 instanceof运算符来确定对象是否是类的实例化实例。
句法:
$a instanceof MyClass
操作数:此运算符包含以下列出的两个操作数:
- $a:用作对象。
- MyClass:这是一个类名。
返回值:如果对象属于此类或将此类作为其父项之一,则返回 True,否则返回 False 值。
下面的程序说明了PHP的 instanceof运算符:
输出:
Yes
is_a()函数和 instanceof运算符的区别:
- is_a() 是一个函数,而 instanceof 是一个语言结构。 is_a()函数会明显变慢,因为它具有执行函数调用的所有开销。
- 在函数中回调的情况下(如 array_map) instanceof 不是函数,它是一种语言结构,因此不能用作回调。另一方面,回调可以在 is_a()函数。
- 与 instanceof 一起使用直接类名比 is_a() 函数短。
例子:// Short syntax (comparatively) $a instanceof MyClass is_a( $a, MyClass::class )
- is_a() 是一个函数,以对象为参数一,字符串为参数二,而instanceof以对象为参数一,可以采用类名、对象实例或类标识符(类名不带引号)作为参数二。
is_a() 示例:
// Only way to call it is_a( $object, $string );
实例的例子:
// Object instance $object instanceof $otherObject; // String class name $object instanceof $string; // Identifier for the class $object instanceof ClassName;