PHP 中的异常处理期间预分配变量已损坏

Preassigned Variable is Corrupted During Exception Handling in PHP

引发异常时变量 $maxTry 未赋值

异常处理在 nTry = 1 时停止。

这怎么可能?

$nTry=0;
$maxTry=100;
function verify() { 
  try{
      // Some DB Connection
      $st = $dbh->prepare(...);
      $result = $st->fetchColumn();
  }
  catch(PDOException $e) {
    $nTry++;
    echo 'PDOException<br/>';
    if($e->getCode()==='HY000') {
        echo 'verify again<br/>';
        if($nTry < $maxTry) {
            $maxTry=100;
            verify();      //recursion
        }
        else 
            echo "Reached maxTry ($nTry __ $maxTry) PDOException: HY000<br/>";
    }
}
verify();

预期输出(如果达到 maxTry):

PDOException
verify again
...
verify again
Reached max try (100 __ 100) PDOException: HY000

实际输出(未设置$maxTry):

PDOException
verify again
Reached max try (1 __ ) PDOException: HY000

由于您在函数中使用变量,但在外部声明它们,因此无法访问它们。需要在功能开启后立即添加。

function verify() { 
    global $maxTry, $nTry; // add this

变量超出范围,而是将它们作为参数传递:

function verify($nTry, $maxTry)
{
    try {
        // Some DB Connection
        $st = $dbh->prepare(...);
        $result = $st->fetchColumn();
    } catch (PDOException $e) {
        $nTry++;
        echo 'PDOException<br/>';
        if ($e->getCode() === 'HY000') {
            echo 'verify again<br/>';
            if ($nTry < $maxTry) {
                verify($nTry, $maxTry);      //recursion
            } else
                echo "Reached maxTry ($nTry __ $maxTry) PDOException: HY000<br/>";
        }
    }
}
varify(0, 100);