如果设置了函数参数类型并且将错误类型的参数传递给此函数,则会触发错误。问题是@
运算符不会抑制此错误。准确地说,错误消息是静音的,但无论如何都会停止执行。
function callback( DateTime $arg ) {
return 'Success';
}
function doAction( callable $callback ) {
$value = 'Empty';
$value = @$callback( 123 );
var_dump( $value ); // Expect `Empty` or NULL here
}
doAction( 'callback' );
在PHP 7中,try-catch可以捕获此错误。
如何使此错误不停止在PHP 5.x.x上执行?
答案 0 :(得分:0)
设置自定义错误处理程序,将此错误转换为异常:
Point
答案 1 :(得分:0)
您有两种选择。
function callback( DateTime $arg ) {
return 'Success';
}
function doAction( callable $callback ) {
$value = 'Empty';
set_error_handler( function( $errno, $errstr, $errfile, $errline ) {
if ( $errno === E_RECOVERABLE_ERROR )
throw new ErrorException( $errstr, $errno, 0, $errfile, $errline );
return false;
});
try {
$value = @$callback( 123 );
} catch ( Exception $e ) { // For PHP 5
} catch ( Error $e ) { // For PHP 7
}
restore_error_handler();
var_dump( $value ); // Expect `Empty` or NULL here
}
doAction( 'callback' );
中的参数类型,然后再使用它。 (我会优先考虑这个) 注意: 使用错误控制操作符是不好的做法。
答案 2 :(得分:-1)
你可以检查传入函数是否是DateTime类的实例并相应地抛出错误。
function test( DateTime $arg ) {
if ($arg isinstanceof DateTime) {
return 'Success';
} else {
return false;
}
}