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();

目录
相关文章
|
13天前
|
PHP UED 开发者
PHP中的异常处理:一个全面的指南
【4月更文挑战第25天】 在PHP编程中,异常处理是一个关键的环节,它帮助我们捕获和处理程序运行过程中可能出现的错误。本文将深入探讨PHP中的异常处理,包括如何抛出和捕获异常,以及如何使用自定义异常类。我们将通过实例代码来演示异常处理的实际应用,并讨论其在提高程序健壮性和用户体验方面的重要性。无论你是PHP初学者还是有经验的开发者,本文都将为你提供有关PHP异常处理的全面理解和实用技巧。
|
13天前
|
搜索推荐 PHP 开发者
PHP编程中的异常处理与最佳实践
异常处理在PHP编程中扮演着至关重要的角色,它不仅能够提高程序的稳定性和可靠性,还能使开发者更好地理解和调试代码。本文将深入探讨PHP中的异常处理机制,并介绍一些最佳实践,帮助读者更好地理解和运用异常处理技术。
|
1天前
|
PHP 数据库 开发者
PHP中的异常处理:提升代码稳定性的关键
【5月更文挑战第27天】在软件开发中,异常处理是一种重要的错误管理技术。它允许开发者优雅地处理运行时出现的错误,而不是让程序崩溃。本文将深入探讨PHP中的异常处理机制,包括异常的基本概念,如何抛出和捕获异常,以及如何使用自定义异常类。通过理解和应用这些概念,开发者可以编写出更健壮、更稳定的代码。
|
3天前
|
PHP UED 开发者
PHP中的异常处理:深入理解try-catch语句
本文将深入探讨PHP中的异常处理机制,特别是try-catch语句的使用。我们将通过实例来理解如何在PHP代码中有效地使用try-catch语句,以及它们在错误处理和程序流程控制中的重要性。
|
13天前
|
关系型数据库 数据库连接 PHP
PHP中的异常处理及最佳实践
异常处理在PHP开发中至关重要,它能够有效地捕获和处理程序运行过程中可能发生的错误,提高代码的稳定性和可维护性。本文将介绍PHP中异常处理的基本概念,以及一些最佳实践,帮助开发者更好地利用异常处理机制提升代码质量。
14 0
|
13天前
|
前端开发 PHP 开发者
PHP编程中的异常处理与调试技巧
在PHP编程中,异常处理和调试是至关重要的环节。本文将深入探讨PHP中异常处理的机制,介绍常见的异常类型以及如何合理地进行异常处理。同时,还将分享一些实用的调试技巧,帮助开发者快速定位和解决问题,提高代码质量和效率。
21 4
|
13天前
|
PHP 开发者 UED
PHP 中的异常处理:提高代码健壮性的关键
【2月更文挑战第28天】在 PHP 开发中,异常处理是确保应用程序稳定性和可靠性的重要环节。本文将深入探讨 PHP 异常的概念、类型及其处理机制,并通过实例演示如何有效地捕获和处理异常,以增强代码的健壮性和用户体验。
|
10月前
|
程序员 PHP
PHP快速入门12-异常处理,自定义异常、抛出异常、断言异常等示例
PHP的异常处理机制可以帮助我们在程序运行时遇到错误或异常情况时,及时发出警告并停止程序继续运行。下面是10个例子,分别展示了PHP异常处理的不同用法。
|
存储 PHP
PHP为什么需要设置session_set_cookie_params()函数来配置session的cookie参数?
PHP为什么需要设置session_set_cookie_params()函数来配置session的cookie参数?
105 0
|
PHP
PHP7的异常处理详解
PHP7的异常处理详解
67 0