【问题标题】:global variables in php not workingphp中的全局变量不起作用
【发布时间】:2011-02-14 21:05:28
【问题描述】:

根据下面的示例,我希望输出为“测试值”,为什么我会得到“0”?

文件 main.php

<?php
include_once 'functions.php';
$var = '0'; 
test();
echo $var; 
?>

文件函数.php

<?php 
function test()
{
    global $var;
    $var = 'test value';
}
?>

【问题讨论】:

  • 这不是错误。这是一个机会。如果全局可以工作,您可以将您的函数耦合到全局范围。你会认为应该这样做。事实上,它不应该。 全局变量是邪恶的。你很幸运,它不起作用。现在您必须将值作为参数传递给函数。从长远来看,这将为您提供更清洁、更易于维护的代码!别担心,开心就好!!

标签: php include global-variables


【解决方案1】:

最好的办法是:

   include_once 'functions.php';
   $_GLOBALS["var"] = '0'; 
   test();
   echo $_GLOBALS["var"]; 

并且在函数中使用$_GLOBALS["var"] 而不使$_GLOBALS 成为全局,它已经是。

您的代码完美运行:http://codepad.org/zI9xg1sK

【讨论】:

  • 使用 $_GLOBALS 产生与原始代码相同的结果。
  • 您的代码完美运行:codepad.org/zI9xg1sK您使用的是什么 PHP 版本?
  • 我使用的是 PHP 5,但它不起作用,可能是因为 main.php 包含 functions.php 而 main.php 包含在另一个文件中?
  • @Gordon,我的评论完全错了,我已经有一段时间没有做过大规模的 PHP 工作了,也请阅读我的第一条评论。
【解决方案2】:

我能想到的唯一原因是 main.php 也被包含在一个函数中,使 $var 成为该函数范围内的局部变量。

在这种情况下,这会有所帮助:

<?php
 global $var;
 include_once 'functions.php';
 $var = '0'; 
 test();
 echo $var; 
 ?>

【讨论】:

  • main.php 包含在 start.php 中,但不在函数中。
【解决方案3】:

你为什么不做呢

return $var;

并以这种方式调用函数:

$var = test();

【讨论】:

    【解决方案4】:

    这是一个替代示例。 Ian 评论了 CappY 的回答,即真正的函数已经返回了一个值。我想这就是为什么他认为他需要一个全局变量。

    您不需要(ab)使用全局变量从函数返回多个值。两个替代(和更好的)选项是返回一个数组,或者通过引用传递变量。

    返回数组示例:

    function test() {
        return array('value 1', 'value 2');
    }
    
    // Example usage
    list($var1, $var2) = test();
    var_dump($var1); // outputs "value 1"
    var_dump($var2); // outputs "value 2"
    

    引用传递示例

    function test(&$var2) {
        $var2 = 'value 2';
        return 'value 1';
    }
    
    // Example usage
    $var1 = test($var2);
    var_dump($var1); // outputs "value 1"
    var_dump($var2); // outputs "value 2"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-21
      • 2010-10-20
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      相关资源
      最近更新 更多