php event异常处理,php set_exception_handler无效

简介: php event异常处理,php set_exception_handler无效

(1).今天遇到一件奇怪的事情,在event事件中是无法自定义异常处理,例如我们使用set_exception_handler来统一处理异常。例如下面的代码:

<?php
error_reporting(E_ALL);
set_error_handler(function ($errno, $errStr, $errFile, $errLine){

var_dump($errno, $errStr, $errFile, $errLine);

});
set_exception_handler(function ($exception){

var_dump($exception->getMessage());

});

function aa()
{

a();

}

//创建event配置.[空配置]
$eventConfig = new EventConfig();

//创建eventBase对象.event的所有基础类
$eventBase = new EventBase($eventConfig);

//创建event事件
$event = new Event($eventBase,-1,Event::TIMEOUT | Event::PERSIST,function(){

echo 'date:'.date('Y-m-d H:i:s').PHP_EOL;
aa();

});

//将创建的event事件扔到eventBase中,并设置超时时间为0.5秒
$event->add(2);

//让eventBase对象开始进入事件循环
$eventBase->loop();
我本来以为掉用不存在的a方法应该会触发set_exception_handler方法捕捉到。事实上上面的代码运行后不会报错,并且输出一次日期后就阻塞了。

(2).实际上event和swoole是一样的,运行以后会接管系统控制权,在其内部已经存在一个大的try catch,已经将异常捕获到了,捕获到异常的event还不打算退出进程,并且event扩展不继续把异常向上抛,这就导致了程序依然在阻塞,但是并不执行。我们来验证这件事情。例如我们是无法捕获整个event异常的

<?php
function aa()
{

a();

}

try
{

//创建event配置.[空配置]
$eventConfig = new EventConfig();

//创建eventBase对象.event的所有基础类
$eventBase = new EventBase($eventConfig);

//创建event事件
$event = new Event($eventBase,-1,Event::TIMEOUT | Event::PERSIST,function(){
    echo 'date:'.date('Y-m-d H:i:s').PHP_EOL;
    aa();
});

//将创建的event事件扔到eventBase中,并设置超时时间为0.5秒
$event->add(2);

//让eventBase对象开始进入事件循环
$eventBase->loop();

}
catch (Throwable $exception)
{

var_dump($exception->getMessage());

}
(3).既然对event整体没有办法捕捉异常,那我们可以对其执行的代码做异常啊,毕竟是先实例化的event,例如下面的代码成功捕获异常

<?php
function aa()
{

a();

}

//创建event配置.[空配置]
$eventConfig = new EventConfig();

//创建eventBase对象.event的所有基础类
$eventBase = new EventBase($eventConfig);

//创建event事件
$event = new Event($eventBase, -1, Event::TIMEOUT | Event::PERSIST, function () {

echo 'date:' . date('Y-m-d H:i:s') . PHP_EOL;
try
{
    aa();
}
catch (Throwable $exception)
{
    var_dump($exception->getMessage());
}

});

//将创建的event事件扔到eventBase中,并设置超时时间为0.5秒
$event->add(2);

//让eventBase对象开始进入事件循环
$eventBase->loop();

目录
相关文章
|
1月前
|
PHP UED 开发者
PHP中的异常处理:深入理解try-catch语句
【6月更文挑战第7天】在编程的世界中,异常处理是一个不可或缺的部分。它允许我们优雅地处理程序运行时可能出现的错误或异常情况。在PHP中,try-catch语句是处理异常的主要工具。本文将深入探讨PHP中的异常处理,特别是try-catch语句的使用和理解。我们将从基本概念开始,然后通过实例来展示如何在PHP中使用try-catch语句来处理异常。
|
15天前
|
PHP 开发者
PHP中的异常处理与错误调试
【6月更文挑战第29天】在PHP开发过程中,异常处理和错误调试是保证代码质量与应用稳定性的重要环节。本文将深入探讨PHP的异常处理机制,介绍如何通过try-catch语句捕获异常,以及自定义异常类的创建和使用。同时,文章还将讨论PHP错误类型、错误日志记录和有效的错误调试方法,帮助开发者提高问题诊断与解决能力。
|
29天前
|
PHP 开发者 UED
深入理解PHP中的异常处理机制
【6月更文挑战第15天】在编程的世界中,异常处理是维持程序稳定性和可靠性的关键因素。PHP作为一种广泛使用的服务器端脚本语言,其异常处理机制为开发者提供了一种优雅的方式来应对运行时错误。本文将探讨PHP中异常处理的基本概念、使用方法以及如何通过自定义异常来增强程序的健壮性。
|
1月前
|
程序员 PHP 开发者
PHP中的异常处理:深入理解try-catch语句
【6月更文挑战第14天】在PHP编程的世界中,异常处理是一项关键的技术,它允许开发者优雅地管理错误和意外情况。本文将深入探讨PHP中try-catch语句的使用,揭示其背后的原理,并通过实际代码示例展示如何在项目中有效应用这一机制。
25 3
|
1月前
|
PHP UED
PHP中的异常处理:理论与实践
【6月更文挑战第14天】本文将深入探讨PHP中的异常处理机制,包括其理论基础和实际应用。我们将从基本的异常处理概念开始,然后逐步深入到如何在PHP中有效地使用它们。我们还将讨论一些常见的错误类型和如何避免它们,以及如何编写健壮的代码来处理可能的错误。最后,我们将通过一些实际的例子来演示如何在PHP中实现异常处理。
|
1月前
|
程序员 PHP 数据安全/隐私保护
PHP中的异常处理机制及其重要性
【6月更文挑战第10天】在编程的世界中,错误和异常是常态。本文将深入探讨PHP中的异常处理机制,包括其工作原理、使用方法以及为何正确处理异常对于构建健壮的应用程序至关重要。通过具体示例,我们将揭示如何有效地利用PHP的异常处理功能来提高代码的可靠性和用户体验。
|
1月前
|
PHP 数据库
PHP中的异常处理机制
【6月更文挑战第8天】在编程世界中,错误和异常是常见的现象。本文将探讨PHP中的异常处理机制,包括如何抛出异常、捕获异常以及自定义异常类。通过了解这些概念,我们可以更好地编写健壮的代码,确保程序在遇到错误时能够正常运行。
|
1月前
|
PHP
PHP中的异常处理:深入理解try-catch-finally语句
【6月更文挑战第11天】在编程的世界中,异常处理是一种重要的错误管理机制。在PHP中,我们使用try-catch-finally语句来处理可能出现的异常。本文将深入探讨这个主题,帮助你更好地理解和使用PHP的异常处理。
|
1月前
|
PHP
PHP中的异常处理:深入理解try-catch-finally语句
【6月更文挑战第7天】本文将深入探讨PHP中的异常处理机制,特别是try-catch-finally语句的使用方法。我们将通过实例来展示如何在PHP代码中有效地使用这些语句来捕获和处理可能出现的错误和异常,从而提高代码的稳定性和可靠性。
|
1月前
|
PHP 开发者
PHP中的异常处理:深入理解try-catch语句
【6月更文挑战第5天】在编程世界中,异常处理是一项至关重要的技能,它允许开发者优雅地管理错误和意外情况。本文将深入探讨PHP中try-catch语句的用法,揭示如何有效地捕获和处理异常,以及这样做的重要性。我们将通过实际代码示例来展示try-catch语句的工作机制,并讨论其在不同场景下的应用。
18 1