PHP7引入了TypeError" exception" (我知道它实现了throwable而不是扩展异常,所以它并不严格地说是异常,但它们的行为基本上与我所知的方式相同)如果你为函数参数类型提示启用严格模式,它会被抛出。
declare (strict_types = 1);
function square (int $val) : int
{
return $val * $val;
}
var_dump (square ("123"));
上面的代码应抛出一个TypeError,您可以选择捕获并尝试从执行中恢复或终止执行,具体取决于最合适的操作过程。
然而,TypeError似乎有点过于通用,如果您能够扩展它以传达有关发生的故障的更多信息,那将会很好:
class TypeNotIntError extends TypeError {} // Throw this when an int was expected
class TypeNotFloatError extends TypeError {} // Throw this when a float was expected
class TypeNotStringError extends TypeError {} // Throw this when a string was expected
// etc
应该可以像这样扩展TypeError,因为PHP文档并没有声明它是最终的类。但是,虽然你可以扩展TypeError,但似乎并不是一种机制,它允许你抛出一个TypeError的子代,而不用手动抛出一个函数。因为如果传入一个无效的参数类型,引擎就会抛出TypeError,扩展TypeError的能力似乎非常有限。
如果传递了无效的参数类型,是否有可能告诉PHP函数/方法应该抛出什么类型的TypeError子类?如果是这样,怎么样?