📜  PHP的is_a()函数和 instanceof 有什么区别?

📅  最后修改于: 2022-05-13 01:54:10.757000             🧑  作者: Mango

PHP的is_a()函数和 instanceof 有什么区别?

is_a()函数

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;