【问题标题】:Is it possible do use global variables in IF's?是否可以在 IF 中使用全局变量?
【发布时间】:2012-04-30 10:41:31
【问题描述】:

在 IF 的一部分中定义的变量是否可以在同一 IF 的另一部分中访问?

例如:

if ($a == 1)
{
  $b = "ABC";
}
elseif ($a == 2)
{
 echo $b;
}

在函数中我使用 global $variable 但在 IF 语句中我不知道。

我问这个的原因是因为我正在一步一步地制作注册页面。
这意味着我需要多次检查该 If 语句,并且在最后一步中,我需要从所有 IF 中收集所有变量。

【问题讨论】:

  • 是的,您为什么不尝试?变量就是变量……虽然它并不一定很有意义。一次只执行if-else 语句的一个分支。只有当语句被执行两次才会有意义。
  • 我不明白你为什么要在 if 和 else 中显示相同的变量?
  • 我正在一步一步制作注册页面。我希望在最后一步可以访问所有变量。
  • @xRed:那么您应该使用会话来跟踪数据。全局变量对你没有帮助(在 99% 的情况下使用全局变量是个坏主意)。

标签: php if-statement global-variables accessible


【解决方案1】:

按照您理解的方式,没有“全局”变量。
所有 PHP 变量在执行后注定会随着所有 PHP 脚本而死。

您需要一些存储空间来保存请求之间的变量。
PHP sessions 是一个不错的选择。

【讨论】:

    【解决方案2】:

    PHP 中的 IF 语句改变变量范围 - 不像函数。因此,只要您保持在同一范围内,您在 IF 中所做的任何事情都将在 if 之外可见。您不需要使用 GLOBAL。确实,应该尽量少用全局作用域。

    global 语句只是拓宽了允许 PHP “看到”否则会被隐藏的东西的范围。您仍然需要了解变量作用域,因为作用域的交互并不总是显而易见的。我建议回去阅读优秀的 PHP 文档。在点击之前,您可能需要通读几遍并进行一些试验。

    你的代码的问题是,除非它在你没有显示的循环中,否则你永远不会看到 $b 的值,因为 if 语句是一个 branch 并且你只会执行的分支之一永远不会超过 1。

    您的示例的另一个问题是您使用了链接的 if 语句,这会更好地写成:

    switch ($a) {
        case 1:
            $b = "ABC";
            break;
        case 2:
            # $b will ALWAYS be empty unless you set it BEFORE the switch OR
            # you loop back to the switch AFTER $a=1
            echo $b;
            break;
        default:
            echo "i is not equal to 1 or 2";
    }
    

    见:http://php.net/manual/en/control-structures.switch.php

    随着案例数量的增加,这种表格更易读,更简单,更健壮。

    【讨论】:

      【解决方案3】:

      好吧,不看 $a 只有 1 个值,它可能是 1 或 2 或其他值,如果它的 1 则 $b = ABC 并且它永远不会出现在你的 elseif 条件中,如果 $a 是 2 那么它永远不会进入你的第一个条件但是是的,您可以在条件之前定义 $b。

      $b = "something";
      if ($a == 1)
      {
        $b = "ABC"; // $b is ABC if $a = 1
      }
      elseif ($a == 2)
      {
       echo $b; // output : something, if $a  = 2
      }
      

      【讨论】:

        【解决方案4】:
        $b = Null
        if ($a == 1)
        {
          $b = "ABC";
        }
        elseif ($a == 2)
        {
         echo $b;
        }
        

        【讨论】:

          猜你喜欢
          • 2013-11-05
          • 2015-09-27
          • 1970-01-01
          • 2017-03-10
          • 1970-01-01
          • 2014-01-22
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          相关资源
          最近更新 更多