Exception 扩展类型错误

Exception 扩展类型错误,exception,error-handling,typeerror,php-7,Exception,Error Handling,Typeerror,Php 7,PHP7引入了TypeError“exception”(我知道它实现了throwable而不是extensed exception,所以严格来说它不是一个异常,但据我所知,它们的行为方式基本相同),如果启用函数参数类型暗示的strict模式,就会抛出该异常 declare (strict_types = 1); function square (int $val) : int { return $val * $val; } var_dump (square ("123")); 上面

PHP7引入了TypeError“exception”(我知道它实现了throwable而不是extensed exception,所以严格来说它不是一个异常,但据我所知,它们的行为方式基本相同),如果启用函数参数类型暗示的strict模式,就会抛出该异常

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

事实并非如此。不过,您可以使用
try{}catch{}
块抛出您自己的错误。不过,您可以使用
try{}catch{}
块并抛出自己的错误。