【问题标题】:PHP Global Variables IssuePHP 全局变量问题
【发布时间】:2011-10-26 02:54:50
【问题描述】:

我在这里遇到了范围问题。不知道为什么它不起作用,我的设置如下:

functions.php

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

index.php

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

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

我做错了什么?

【问题讨论】:

  • 因为我没有看到任何函数或类,所以无论如何一切都在全局范围内发生。文件包含无关紧要。
  • 想知道为什么它返回空白然后:s奇怪
  • error_reporting(E_ALL); ini_set('error_display', true);
  • @Owen:我不想问,但是 $_GET['id'] 设置了吗?您是否尝试过为 $id 分配一个像 42 这样的静态值?
  • 有点不对! id 一直在使用 $.get 并推送了 project 的变量而不是 id。所以在 URL 栏中它说 ID 但 jquery 实际上已经发送了项目所以它现在正在工作:)

标签: php variables scope global


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 你问“我做错了什么?”。我不知道这不是那个问题的答案。
  • 也许吧,但它是一个全球性的事实并不会破坏它。这是我的问题。
  • 正如我在回答中所说,这就是为什么我怀疑$_GET['id'] 为空的问题是由您向我们展示的代码之外的东西引起的。
【解决方案2】:

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

函数.php

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

索引.php

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

【讨论】:

    【解决方案3】:

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

    file1.php:

    $name = 'Josh';
    

    file2.php:

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

    【讨论】:

    • 我知道这一点,我只是不知道为什么我得到空白结果
    【解决方案4】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      相关资源
      最近更新 更多