Ошибка не возникает, когда произвольное имя класса используется с instanceof в переполнении стека

В следующем коде, используя любой произвольный имя класса (ABCDException) с instanceof Не возникает ни одной фатальной ошибки.

<?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, он указал:

Есть несколько подводных камней, о которых нужно знать. До версии PHP 5.1.0,
instanceof будет вызывать __autoload (), если имя класса не существует. В
Кроме того, если класс не был загружен, произойдет фатальная ошибка.

но до сих пор не ясно, почему возникшая фатальная ошибка была устранена.

Я хочу знать, почему ошибка не происходит в этом случае.

0

Решение

PHP не нужно знать о деталях реализации ABCDException выяснить, $ex является instanceof Это. Все, что ему нужно сделать, — это проверить, является ли сам объект экземпляром класса с таким именем или наследует ли класс объекта какой-либо родительский объект с таким именем или реализует ли какой-либо из них какой-либо интерфейс с таким именем. То, определено ли это имя как класс или интерфейс, довольно не имеет значения для этой цели, поскольку детали реализации ничего не изменят в результате.

Я предполагаю, что разработчики PHP перестали пытаться загрузить реальный класс, так как это просто излишне снижает производительность.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]