try{}catch(){}块不会捕获您的异常,因为它不会在try-catch块中抛出。这表明对异步事件和WordPress挂钩/动作/事件系统缺乏了解。
对象的方法附加到init操作挂钩,并在启动init挂钩时抛出,而不是在创建对象时抛出,也不是在附加它们时抛出。
e、 g。
class SomeClass {
public function __construct() {
// when the init action/event happens, call the wp_some_method
add_action( \'init\', array( $this, \'wp_some_method\' ) );
}
function wp_some_method( $post_type ){
throw new \\Exception(\'error\');
}
}
try{
// great, no exceptions where thrown while creating the object
$o = new SomeClass();
} catch (\\Exception $ex) {
echo $ex->getMessage();
}
// a small period of time later somewhere in WP Core...
do_action( \'init\' ); // a method we attached to the init hook threw an exception, but nothing was there to catch it!
创建对象时不会调用方法。它附加到init事件是的,但没有调用它,正是因为“init”事件尚未发生。init事件发生在try{}catch语句运行很久之后。
因此,这些更合适:
在类方法中添加try-catch(最佳)不要在附加到挂钩/事件的函数中引发异常(甚至更好)将异常抛出到不是附加方法的新方法中,以便可以添加try-catch(好的,需要很好地分离关注点和抽象)
添加全局错误处理程序(hackish,强烈反对,将花费比它的价值更多的时间,可能会捕捉到你从未打算捕捉到的其他异常)否则,没有理性、逻辑、常识的理由说明
throw new \\Exception
应该像上面那样在try-catch块中执行,而不必像测试中那样手动调用它。