扩展TypeError

时间:2016-08-08 10:33:59

标签: exception error-handling typeerror php-7

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子类?如果是这样,怎么样?

0 个答案:

没有答案