本地win10系统测试: 在异步进程处理curl访问的时候捕捉异常必须用 catch (\Error $e)才能捕捉到, 在外面代码捕捉mysql异常必须 catch (\Exception $e) 才能捕捉到,
请问要如何正确使用这种catch捕捉异常?我线上环境PHP版本和本地都一样,就是系统不一样会影响使用方式不?
我觉得和系统没关系,和GatewayWorker也没关系。这个是php的语法,主要看php版本,php版本一样,使用方式就一样
我是同PHP版本同代码测试的,使用方式不一样。
Error是 PHP 7 的新特性
即,PHP 7 开始,Error 与 Exception 都是继承自 Throwable。
从 Throwable 的继承关系,可以看到 Error 与 Exception 是平级的关系。
interface Throwable |- Error implements Throwable |- ArithmeticError extends Error |- DivisionByZeroError extends ArithmeticError |- AssertionError extends Error |- ParseError extends Error |- TypeError extends Error |- ArgumentCountError extends TypeError |- Exception implements Throwable |- ClosedGeneratorException extends Exception |- DOMException extends Exception |- ErrorException extends Exception |- IntlException extends Exception |- LogicException extends Exception |- BadFunctionCallException extends LogicException |- BadMethodCallException extends BadFunctionCallException |- DomainException extends LogicException |- InvalidArgumentException extends LogicException |- LengthException extends LogicException |- OutOfRangeException extends LogicException |- PharException extends Exception |- ReflectionException extends Exception |- RuntimeException extends Exception |- OutOfBoundsException extends RuntimeException |- OverflowException extends RuntimeException |- PDOException extends RuntimeException |- RangeException extends RuntimeException |- UnderflowException extends RuntimeException |- UnexpectedValueException extends RuntimeException
如果你用的是php7,直接 catch (\Throwable $e) 就行。否则Error 和 Exception 你就要2个都要catch
catch (\Throwable $e)
非常感谢
我觉得和系统没关系,和GatewayWorker也没关系。这个是php的语法,主要看php版本,php版本一样,使用方式就一样
我是同PHP版本同代码测试的,使用方式不一样。
Error是 PHP 7 的新特性
即,PHP 7 开始,Error 与 Exception 都是继承自 Throwable。
从 Throwable 的继承关系,可以看到 Error 与 Exception 是平级的关系。
如果你用的是php7,直接
catch (\Throwable $e)
就行。否则Error 和 Exception 你就要2个都要catch非常感谢