donglu1913 2015-11-30 14:18
浏览 66
已采纳

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

The variable $maxTry is unassigned when an exception is raised and

the exception handling stops at nTry = 1.

How is this possible?

$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();

Expected output (if reached maxTry):

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

Actual output ($maxTry is not set):

PDOException
verify again
Reached max try (1 __ ) PDOException: HY000
  • 写回答

2条回答 默认 最新

  • dpjjr42626 2015-11-30 14:23
    关注

    Since you are using the variables in a function, but declaring them outside, they are not accessible. You need to add this right after the the opening of the function.

    function verify() { 
        global $maxTry, $nTry; // add this
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写