错误处理可能不适用于php脚本

时间:2019-02-16 08:20:17

标签: php html

我有一个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,但我无法理解是什么错误。请帮忙。谢谢!

1 个答案:

答案 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'];