【发布时间】: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覆盖?
有没有办法在函数内访问局部变量$x值4?
【问题讨论】:
-
使用
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的另一个原因是个坏主意