我这里有范围问题。并且不知道为什么它不起作用,我有一个如下设置:
的functions.php
global $id;
$id = $_GET['id'];
的index.php
require_once('functions.php');
echo $id;
现在在functions.php里面我可以回显$ id。不过我的回音$ id;在index.php里面是空白。绝对没有。
我做错了什么?
答案 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.php
,databse.php
,forms.php
等。
如果您刚刚开始,我会建议您使用Netbeans并使用PhpDoc条评论您的代码,以便您生成可在浏览器中查看的良好文档(包括你的男女同校的结构,在哪里被宣告,在哪里使用,在函数参数和返回值的下降等等)
顺便说一句,我注意到您使用include()
我更喜欢require_once
。 _once
有助于发挥一点点的性能,而require
可以确保您更快地了解丢失的文件。
哦,并学习使用Xdebug,plays well with NetBeans。