如何创建与选中强制转换等效的PHP

如何创建与选中强制转换等效的PHP,php,casting,instanceof,Php,Casting,Instanceof,在PHP中模拟Java/C风格的检查强制转换(例如,(X)y)最简单的方法是什么?也就是说,语义应该是,如果y属于X或子类,则不执行任何操作,但如果不是,则应引发异常 我能想到的最快的方法是使用instanceof if(!(x instanceof Y)) throw new CastException(); 有没有比这更快或更好的方法?是否有一种方法可以将强制转换用作表达式(我的示例需要一条语句),以便在另一个表达式中使用它?您可以利用PHPs类型检查来自动执行传递的参数 class fo

在PHP中模拟Java/C风格的检查强制转换(例如,
(X)y
)最简单的方法是什么?也就是说,语义应该是,如果
y
属于
X
或子类,则不执行任何操作,但如果不是,则应引发异常

我能想到的最快的方法是使用
instanceof

if(!(x instanceof Y)) throw new CastException();

有没有比这更快或更好的方法?是否有一种方法可以将强制转换用作表达式(我的示例需要一条语句),以便在另一个表达式中使用它?

您可以利用PHPs类型检查来自动执行传递的参数

class foo {
}

function isAFoo(foo $foo) {
    return $foo;
}

$obj = new stdClass();

isAFoo($obj);
将触发错误:

可捕获致命错误:传递给isAFoo()的参数1必须是foo的实例,给定stdClass的实例


然而,这并不比只编写instanceof check并自己抛出异常要好,事实上更糟糕,因为您无法轻松控制异常类型。

PHP不允许您强制转换为任意内容,所以我不完全确定问题是什么?@PeeHaa:当然不允许这样。否则,我的问题的答案就是“使用提供的cast操作符”。因为它不允许这样做,所以我想寻找一种方法来编写一个表达式,它的语义与这样一个checked cast操作符相同。这个想法很有趣。我不知道参数列表中的类型注释。