Какой самый простой способ имитировать проверенное приведение стиля Java / C # в PHP (например, (X)y
)? Т.е. семантика должна состоять в том, что ничего не делается, если y
имеет X
или подкласс, но если это не так, должно быть выброшено исключение.
Самый быстрый способ, которым я могу придумать, — это использовать instanceof
if(!(x instanceof Y)) throw new CastException();
Есть ли более быстрый или лучший способ, чем этот? Есть ли способ, которым мы можем использовать приведение в качестве выражения (в моем примере требуется оператор), чтобы его можно было использовать в другом выражении?
Вы можете воспользоваться проверкой типа PHP для переданных параметров, чтобы сделать это автоматически.
class foo {
}
function isAFoo(foo $foo) {
return $foo;
}
$obj = new stdClass();
isAFoo($obj);
Сработает ошибка:
Исправляемая фатальная ошибка: аргумент 1, передаваемый isAFoo (), должен быть экземпляром foo, заданным экземпляром stdClass,
Однако это не лучше, чем просто написание экземпляра проверки и создание исключения самостоятельно, и на самом деле это хуже, так как вы не можете легко контролировать тип исключения.
Других решений пока нет …