【问题标题】:PHP Variable Scope understandingPHP 变量作用域理解
【发布时间】:2016-06-04 09:55:59
【问题描述】:

刚开始学习 PHP,在试验变量作用域时,我创建了以下代码:

<?php
    $x = 5;

    function scopeTest($x) {
        global $x;
        echo $x;            
    }

    scopeTest(4);
?>

在给定的函数中,我传递值4,在函数中该值存储在变量$x(函数本地)中。此代码的输出是5 而不是4

不知道值为4的变量去哪了? 我知道我可以通过改变函数中的局部变量名来做到这一点,但我想知道这个程序的流程,它是如何输出5的。

局部变量$x是否被全局变量$x覆盖?

有没有办法在函数内访问局部变量$x4

【问题讨论】:

  • 使用global 不是一个好主意的原因之一......这不是直观的行为
  • 访问两者的一种方法是将$x 参数分配给与全局function scopeTest($y) { global $x; echo $x; echo $y; } 不同的变量
  • @MarkBaker 谢谢,我已经在我的问题中写了那个东西。我知道我可以做到,但只是想知道幕后究竟发生了什么......
  • 另一种选择是将参数移动到另一个局部范围变量之前声明全局:function scopeTest($x) { $y = $x; global $x; echo $x; echo $y; }....函数中声明 global $x 的点,本地 $x 参数被覆盖
  • @RyanVincent - 使用global 的另一个原因是个坏主意

标签: php variables scope


【解决方案1】:

局部变量被global语句覆盖,由于它们共享相同的变量名,您失去了对它的引用。

但是通过这样做,您可以同时使用两者:

$x = 5;

function scopeTest($x) {
  echo $GLOBALS['x'], $x; // 54      
}

scopeTest(4);

或者..只是重命名局部变量

function scopeTest($y) {
  global $x;
  echo $x, $y;           
}

【讨论】:

    【解决方案2】:

    是的,您可以通过在全局 $x 之前回显 $x 来使用 $x 的值 4;

    global $x; //replace the value of $x to it's global value.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-03
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多