gpt4 book ai didi

php - is_a 和 instanceof 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 11:40:34 26 4
gpt4 key购买 nike

我知道 instanceof是一个运算符,而 is_a是一种方法。

该方法的性能是否较慢?你更喜欢用什么?

最佳答案

更新

截至 PHP 5.3.9is_a() 的功能发生了变化。下面的原始答案指出 is_a() must 接受一个 Object 作为第一个参数,但 PHP 版本 >= 5.3.9 现在接受一个可选的第三个 bool 参数 $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);

instanceofis_a() 之间新行为的主要区别在于 instanceof 将始终检查目标是否为实例化对象指定类(包括扩展类),而 is_a() 只要求在 $allow_string 参数设置为 的默认值时实例化对象错误


原创

实际上,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

关于php - is_a 和 instanceof 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3017684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com