我有一个PHP脚本,类似于:-
<?php session_start() ?>
<body>
<?php
try{
$userId=$_GET['userId'];
}
catch(Exception $e){
$userId=$_SESSION['userId2'];
}?>
$userId=$_GET['userId'];
是我的第23行。
我正在使用http://localhost/checkIdAbout.php?all=ALL
加载脚本。
现在,我的URL显然没有$userId
的值,因此会出现错误,这对我来说是可以理解的。我不明白的是,为什么try-catch块不起作用?我已经存储了$_SESSION['userId2']
的值。因此,在执行过程中,代码是否不应从尝试中跳转并为我提供$userId
所需的值?
我得到了错误:Notice: Undefined index: userId in /var/www/html/checkIdAbout.php on line 23
,但我无法理解是什么错误。请帮忙。谢谢!
答案 0 :(得分:0)
通知也不例外。
您可以编写自定义处理程序,以将通知转换为异常:
set_error_handler(function ($errno , $errstr, $errfile, $errline) {
if (!(error_reporting() & $errno)) {
return false;
}
throw new ErrorException($errstr, $errno, $errno, $errfile, $errline);
}, E_NOTICE);
try {
$foo++;
} catch (ErrorException $e) {
echo 'Notice cast to exception: '. $e->getMessage(), PHP_EOL;
}
...,但这通常是一个坏主意,因为引发异常会中断脚本流,直到下一次捕获为止(如果没有,则完全中止脚本)。而且,在这种情况下,我认为在有更简单的替代方法(例如:
)时故意发出通知以仅能够使用异常处理是没有道理的$userId = filter_input(INPUT_GET, 'userId') ?? $_SESSION['userId2'];