PHP全局变量问题


PHP Global Variables Issue

这里有一个作用域问题。不知道为什么不工作,我有如下设置:

显然也
global $id;
$id = $_GET['id'];

index . php

require_once('functions.php');
echo $id;

现在在functions.php中,我可以回显$id。然而,我的echo $id;在index。php中显示空白。绝对没有。

我做错了什么?

在PHP中,global关键字允许您在局部作用域中引用全局作用域中的变量-例如访问函数中的全局变量。在您的示例中不需要global,因为无论如何您都处于全局作用域中。

我怀疑你是在向我们展示你所拥有的简化版本,问题在你没有向我们展示的代码中。

为什么不能使用全局变量

像这样的混淆是为什么使用全局变量是一个坏主意,应该避免的部分原因。

另一种方法是显式地传递变量,例如,如果您调用函数或从另一个文件实例化类,则将变量作为参数传递给该函数或构造函数。这样做,而不是使用全局变量,可以更容易地跟踪哪个函数访问了哪个变量,因为您可以更容易地跟踪跟踪。

文件之间不需要全局变量,只有函数之间才需要。

显然也
<?php
$foobar = "Hello";
?>

index . php

<?php
include('Functions.php');
echo $foobar;
?>

你不应该使用全局变量,但是你把它弄反了。在包含变量的定义之后声明该变量为全局变量:

file1.php:

$name = 'Josh';

php:

require_once('file1.php');
global $name;
echo $name;

@thomasrutter正确(+1)全局变量为A Bad Thing。总是寻找替代方案。

也许你可以使用$_SESSION(这类相当于相同的东西,我知道),或者声明一个类有一个静态变量,并使用getter()和setter() ?(后者显然更简洁,但$_SESSION可能更适合您的设计,我不能说)

顺便说一句,我希望functions.php只是一个示例名称,或者您有一个非常简单的项目。

否则 fucntions.php将变得非常大,难以监督。如果你是面向对象的,那么每个类使用一个文件,否则尝试将你的函数分组到单独的文件(file_management.php, databse.php, forms.php等)。

如果你刚刚开始,我建议你使用Netbeans,用PhpDoc注释来记录你的代码,这将允许你生成好的文档,你可以在浏览器中查看(包括你的代码结构,在哪里声明什么,在哪里使用,函数参数和返回值的描述,等等)

顺便说一句,我注意到你使用include(),我更喜欢require_once_once有助于提高性能,require确保您更快地意识到丢失的文件。

哦,还要学习使用Xdebug,它可以很好地与NetBeans配合使用。