当引发异常和时,变量$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);