是可变本地还是全球?

时间:2013-11-15 20:02:30

标签: c# php

尝试加快 PHP 的速度。

我正在查看基本的留言簿表单并尝试以我的风格重新创建它。

screenshot0

原始文件包含以下行:

$tmpDir = getenv('TEMP');

我知道 PHP 中的变量不必首先被声明(虽然这可能适合我),并且使用tmpDir之类的名称,它肯定听起来像一些本地,临时变量。

所以,我正在尝试使用试用版Komodo的一些代码,因为我希望它的自动完成功能可以帮助我更快地学习语言。

输入$t后,“自动完成”会向我显示可用内容。

screenshot1

那么,$tmpDir不只是这段代码的一些局部变量吗?

像我这样的假人怎么会知道这个?

Komodo有一个转到定义功能,但是当我在原始示例中执行此操作时,它所做的就是在代码中突出显示它的四个实例。

screenshot2

因此,无需去那里记住 PHP 所拥有的每个全局变量,有没有办法知道什么是全局变量,什么不是?

我无法在php.net/manual找到$tmpDir

更新

superglobal 是我错过的关键字或PHP定义。我将熟悉的C#术语全局与PHP术语混淆。

鉴于此,答案是:

  

如果PHP代码使用超全局变量tmpDir,则PHP代码必须显式调用$ GLOBALS [tmpDir]才能使用它。

感谢decezeWayne Whitty,尽管他们都没有将此作为回答。当其中一个人做的时候,我会标记它。

1 个答案:

答案 0 :(得分:2)

$tmpDir = getenv('TEMP');

在这种情况下,$ tmpDir将始终是局部变量,除非您专门将其设置为全局变量。但是,它可能存在于global scope中。您的IDE可能不太关心范围。它可能会显示您最近键入的变量名称列表。虽然,在这种情况下,我愿意打赌$tmpDir是一个存在于全局范围内的局部变量,这意味着它可供您使用(尝试将其打印出来,只是为了看看是什么发生)。

<?php
/* global scope */ 
$tmpDir = getenv('TEMP'); 

function test(){ 
    /* reference to local scope variable that doesn't exist */ 
    echo $tmpDir; 
} 

test();
?>

如果你运行上面的代码,你会发现它不起作用,因为尽管已在全局范围内声明$tmpDir,但它在函数{{1}的本地范围内不可用}}。这是因为test不是全局变量。