(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(); PHP验证码不显示的问题应该是经常的事情,我在这里把2种解决方案都发出来方便大家后期使用.因为是昨天晚上自己写验证码都没有显示,我就直接把之前和李炎恢老师上课写的验证码拿来还是不显示,醉了。首先是第一种方法:1、打开服务器安装目录下的php.ini文件;2、去掉;extension=php_gd.d...
/** * 计算两点地理坐标之间的距离 * @param Decimal $longitude1 起点经度 * @param Decimal $lati...
PHP的session文件夹默认保存在同一个文件,随着访客的增多,访问的速度会非常慢,例如部分管理系统后台每天登陆1000次,1个月就创建了30000个session文件,一年后是多少?假设这个系统的用户是上万人呢?方法1:每个网站使用自己的session文件夹,代码如下:<?php $pat...
第一步:服务端文件<?php $wsdlfile='webservice.wsdl'; ini_set('soap.wsdl_cache_enabled','0'); //关闭WSDL缓存 //001...
if($_SERVER['REQUEST_METHOD'] == 'POST') { echo('This is post '); } elseif ($_SERVER['...
php官方已经提供了Iterator(迭代器)接口,通过网上资料的学习,目前看适合超大集合或者数组提取使用。学习一个函数的实现对比内存占用差距.使用迭代器和普通循环实现range()函数。(1).普通循环实现range()函数。function newrange($low, $h...