首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中与instanceof一起使用任意类名时不会发生错误

在PHP中与instanceof一起使用任意类名时不会发生错误
EN

Stack Overflow用户
提问于 2017-11-21 11:26:46
回答 1查看 350关注 0票数 1

在下面的代码中,使用任意任意类名(ABCDException)和instanceof不会发生任何致命错误。

代码语言:javascript
复制
<?php

function fn($x)
{
    if ($x === 0) {
        throw new InvalidArgumentException('cannot be zero');
    }
}

try {
    fn(0);
}
catch (Exception $ex) {
    if ($ex instanceof ABCDException) {
        echo 'instance of ABCDException';
    }
}

http://php.net/manual/en/language.operators.type.php页面中,它指定了:

有几个陷阱需要注意。在PHP5.1.0之前,如果类名不存在,instanceof将调用__autoload()。此外,如果未加载类,则会发生致命错误。

但仍不清楚为什么会出现致命错误。

我想知道为什么在这种情况下不会出现错误。

EN

回答 1

Stack Overflow用户

发布于 2017-11-21 11:34:29

PHP不需要知道ABCDException的实现细节,就可以知道$ex是否是instanceof。它所需要做的就是检查对象本身是否是该名称的类的实例,或者对象的类是否继承自该名称的任何父类,或者这些对象是否实现了该名称的任何接口。该名称是否实际定义为类或接口与此目的无关,因为实现细节不会更改任何有关结果的内容。

我认为PHP开发人员停止了加载实际类的尝试,因为这会不必要地导致性能损失。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47411972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档