【发布时间】:2016-03-04 05:07:04
【问题描述】:
变量 $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
【问题讨论】:
-
您的范围界定错误。
$maxTry不存在于verify函数范围内(直到您尝试使用它之后)。 -
简单的作用域问题 - 在函数内部无法访问变量
-
与 javascript 范围混淆。增加 $nTry 时没有引发任何错误消息,这让情况变得更糟。