-1

我这里有一个范围问题。不知道为什么它不工作,我得到了如下设置:

函数.php

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

索引.php

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

现在在functions.php里面我可以回显出$id。但是我的回声 $id; index.php 内部出现空白。绝对没有。

我究竟做错了什么?

4

4 回答 4

3

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

我怀疑您正在向我们展示您所拥有的简化版本,问题在于您没有向我们展示的代码。

为什么你不应该使用全局变量

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

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

于 2011-10-26T03:01:51.293 回答
1

您不需要文件之间的全局变量,仅用于函数。

函数.php

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

索引.php

<?php
include('Functions.php');
echo $foobar;
?>
于 2011-10-26T02:59:22.840 回答
0

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

文件1.php:

$name = 'Josh';

文件2.php:

require_once('file1.php');

global $name;

echo $name;
于 2011-10-26T02:56:51.880 回答
0

@thomasrutter 是正确的 (+1) 全局变量是A Bad Thing. 总是寻找替代品。

也许您可以使用 $_SESSION (我知道这相当于同一件事),或者声明一个具有静态变量的类并使用 getter() 和 setter() ?(后者的 uis 绝对更干净,但 $_SESSION 可能更适合您的设计,我不能说)

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

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

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

顺便说一句,我注意到你使用include()I prefer require_once。这_once有助于加快执行速度,并且require可以确保您更快地意识到丢失的文件。

哦,学习使用 Xdebug,它与 NetBeans 配合得很好

于 2011-10-26T03:18:25.313 回答