PHP全局变量问题

时间:2011-10-26 02:54:50

标签: php variables scope globals

我这里有范围问题。并且不知道为什么它不起作用,我有一个如下设置:

的functions.php

global $id;
$id = $_GET['id'];

的index.php

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

现在在functions.php里面我可以回显$ id。不过我的回音$ id;在index.php里面是空白。绝对没有。

我做错了什么?

4 个答案:

答案 0 :(得分:3)

在PHP中,global关键字允许您从本地范围内引用全局范围中的变量 - 例如,访问函数内的全局变量。您的示例中不需要global,因为无论如何您都在全局范围内。

我怀疑您向我们展示了您所拥有的简化版本,问题出在您未向我们展示的代码中。

为什么你不应该使用全局

这样的困惑是为什么使用全局变量是一个坏主意的一部分,应该避免。

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

答案 1 :(得分:1)

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

的functions.php

<?php
$foobar = "Hello";
?>

的index.php

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

答案 2 :(得分:0)

你不应该使用全局变量,但是你有倒退。在包含其定义后,您可以声明变量global:

file1.php:

$name = 'Josh';

file2.php:

require_once('file1.php');

global $name;

echo $name;

答案 3 :(得分:0)

@thomasrutter是正确的(+1)全局变量是A Bad Thing。始终寻求替代品。

也许你可以使用$ _SESSION(我知道这类似于同一个东西),或者声明一个具有static variable并使用getter()和setter()的类? (后者绝对更干净,但$ _SESSION可能与你的设计更好地结合,我不能说)

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

否则fucntions.ph p将变得异常庞大且难以监督。如果您要使用OO,则每个类使用一个文件,否则请尝试将您的函数分组到单独的文件中(file_management.phpdatabse.phpforms.php等。

如果您刚刚开始,我会建议您使用Netbeans并使用PhpDoc条评论您的代码,以便您生成可在浏览器中查看的良好文档(包括你的男女同校的结构,在哪里被宣告,在哪里使用,在函数参数和返回值的下降等等)

顺便说一句,我注意到您使用include()我更喜欢require_once_once有助于发挥一点点的性能,而require可以确保您更快地了解丢失的文件。

哦,并学习使用Xdebug,plays well with NetBeans