【问题标题】:Using a variable outside of the while loop (scope)在 while 循环(范围)之外使用变量
【发布时间】:2011-11-12 08:34:57
【问题描述】:

关于 PHP 范围的小问题,我似乎无法在 while 循环之外调用变量 $report。我尝试了各种方法,包括return。这不起作用,这里唯一起作用的两个函数是如果我在循环内echo 变量$report,或者如果我print 它。我不想这样做,虽然它解决了问题,但我不希望用户屏幕上出现乱码。

过去 15 分钟左右我一直在四处寻找,我还没有看到像这里这样的问题。

任何帮助将不胜感激。

<?
require "functions2.php";
require "members.php";
$query = "SELECT MAX(DOCid) as prevDOCid from reports";
$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {
    $prevDOCid = $row[prevDOCid];

$thisDOCid = $prevDOCid+1;
$report = "a"."b".$thisDOCid;


}
echo $report;
?>

【问题讨论】:

  • 如果你在 while 循环中回显 $report ,你有什么操作吗?
  • PHP 并没有真正的作用域概念,比如 Java 中这会成为问题的地方。如果在到达echo 语句时没有声明$report,我猜PHP 从来没有进入while 循环。
  • 嗯,它不工作。我显然不只是想回应 $report,为了简单起见,我只是以这种方式发布代码。我可以在循环外使用变量的唯一方法是先回显它。
  • PS:你真的不应该使用$row[prevDOCid]。使用引号:$row['prevDOCid']。它可能有效,但it's wrong.
  • 它给出了未定义的变量,这是正确的。

标签: php loops scope while-loop


【解决方案1】:

您可以尝试在循环之前定义变量,例如

$report = "";
while ($row = mysql_fetch_array($result)) {
    $report .= "a"."b".$row["prevDOCid"]+1;
}
echo $report;

希望对你有帮助!

编辑使用 .= 不是 +=

【讨论】:

  • @RVward 你错了。它们可以在循环中声明并在循环之外使用。这是proof。不同之处在于这会将新值连接到 $report,而不是在循环的每次迭代中覆盖它。
  • @RVWard 很有趣。因此,如果您完全按照问题中的方式运行脚本,它会告诉您 $report 未定义?
  • 您实际期望的结果是什么? Purhaps 在最后一个循环中,您只需用空值覆盖变量...
  • @Vilius 如果我想在 while 循环的顶部访问这个 var 怎么办?
猜你喜欢
  • 1970-01-01
  • 2013-02-25
  • 2014-05-19
  • 2016-01-24
  • 1970-01-01
  • 2015-10-09
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多