Try catch 用了 但是沒有辦法捕捉到 我用的\Throwable
<?php
/**
* This file is part of workerman.
*
* Licensed under The MIT License
* For full copyright and license information, please see the MIT-LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @author walkor<walkor@workerman.net>
* @copyright walkor<walkor@workerman.net>
* @link http://m.wtbis.cn/
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
/**
* 用于檢測業(yè)務(wù)代碼死循環(huán)或者長時間阻塞等問題
* 如果發(fā)現(xiàn)業(yè)務(wù)卡死,可以將下面declare打開(去掉//注釋),并執(zhí)行php start.php reload
* 然后觀察一段時間workerman.log看是否有process_timeout異常
*/
//declare(ticks=1);
use \GatewayWorker\Lib\Gateway;
/**
* 主邏輯
* 主要是處理 onConnect onMessage onClose 三個方法
* onConnect 和 onClose 如果不需要可以不用實現(xiàn)并刪除
*/
class Events
{
public static function onWorkerStart()
{
$aTest = [];
try {
$a = $aTest[1];
} catch (\Throwable $aErr) {
echo 'Err----';
// var_dump($aErr->getMessage());
}
}
/**
* 當(dāng)客戶端連接時觸發(fā)
* 如果業(yè)務(wù)不需此回調(diào)可以刪除onConnect
*
* @param int $client_id 連接id
*/
public static function onConnect($client_id)
{
}
/**
* 當(dāng)客戶端發(fā)來消息時觸發(fā)
* @param int $client_id 連接id
* @param mixed $message 具體消息
*/
public static function onMessage($client_id, $message)
{
}
/**
* 當(dāng)用戶斷開連接時觸發(fā)
* @param int $client_id 連接id
*/
public static function onClose($client_id)
{
}
}
直接在官網(wǎng)下載的最新版本,然后在Events里面加了一個onWorkerStart
PHP 8.1
Try catch 捕獲不到 Warning Notice這些。Try catch 只能捕獲異常Exception或者Error。
onWorkerStart 里執(zhí)行一句
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
throw new \Exception($errstr, 0, $errno, $errfile, $errline);
});
這樣當(dāng)發(fā)生Warning Notice這些會觸發(fā)異常,就能捕獲了