2010-05-07 159 views
2

所以我有一个PHPUnit测试,并在一个函数内发现了这个代码。

global $argv, $argc; 
echo $argc; 
print_r($argv); 

我了解这些变量代表(在命令行中传递的参数),但我从来没有见过这样的语法:global $argv, $argc;

具体是怎么回事呢?

回答

3

global关键字告诉PHP使用变量的全局范围版本,并使其对当前范围也可见,以便在函数/类之外声明的变量也可以在其中被访问。

否则,试图读取/分配这些变量将运行在它们的不同本地版本上。

比较:

$foo = 1; 

function test() { 
    $foo = 2; 
} 

echo $foo; // prints 1 

与...

$foo = 1; 

function test() { 
    global $foo; 
    $foo = 2; 
} 

echo $foo; // prints 2 
+0

谢谢,这很有帮助,但我感到困惑的是这些变量已经定义好了。我没有定义它们。此外,逗号分隔$ argv,$ argc。我以前没有见过。 – Andrew 2010-05-07 17:58:48

+0

它只是制造变种变种。通过使它成为全局变量,你可以像Dav那样在函数中使用变量 – ggfan 2010-05-07 18:33:52

+0

基本上Andrew,PHP自动在上面的例子中完成了'$ foo = 1;'; 'global'关键字就像上面的函数一样用来访问PHP在一个不是全局的范围内定义的全局变量。 – Amber 2010-05-07 19:27:23

1

global关键字使指定变量..以及全局变量,可以从该文件的任何位置访问。

+2

不完全是。函数'foo'中的'global $ a'不会自动使'$ a'指向另一个函数'bar'中的同一个全局变量。相反,'global'关键字更多地使得给定名称在全局'关键字被使用的范围内引用全局版本。 – Amber 2010-05-07 17:57:02

2

argvarc是运行在命令行PHP脚本时传递的参数。据我所知,这些变量不应该使用HTTP出现。

请参阅:argcargv在PHP手册中的条目。

其他人已经解释了什么是全球性的手段。逗号只是组合类似的声明。

例如,这条线将宣布一堆私有变量的一类:

private $name, $email, $datejoined; 

这是同样的事情写:

private $name; 
private $email; 
private $datejoined; 
3

在像Java这样的语言,它们允许你在逗号分隔的一行上声明多个相同类型的变量。

int sum, counter, days, number; 

没有一个IDE测试代码,我会说,它同关于PHP,它只是声明了这两个变量global。你可以分别写在两条分开的线上,

global $argv; 
global $argc;