是否可以将变量声明为“始终全局”?

时间:2014-02-27 05:42:20

标签: php global-variables global

有没有什么方法可以定义变量,这样我在每个函数中都不需要global $var1;?只需在开始时定义它并在需要的地方继续使用。我知道$ GLOBALS存在,但不想使用它。

3 个答案:

答案 0 :(得分:2)

首先让我试着解释为什么你不应该使用全局变量,因为它们非常难以管理。假设团队成员将文件中的$ADMIN变量覆盖为1,然后引用$ADMIN变量的所有代码现在将具有值1。

globals是如此PHP4,所以你需要选择一个更好的设计模式,特别是如果这是新代码。

在不使用丑陋global范例的情况下执行此操作的方法是使用类容器。这可能被称为某些人的“注册表”。

class Container {
  public static $setting = "foo";
}


echo Container::$setting;

这使得此变量的位置更加清晰,但是它具有无法动态设置属性的弱点,因为在PHP中您不能静态地执行此操作。

如果你不介意创建一个对象,并以这种方式设置动态变量,那就可以了。

答案 1 :(得分:1)

您需要将变量作为参数传递给该函数,以避免使用GLOBALS。

有问题的场景(有效!但不惜一切代价避免使用)

<?php
$test = 1;
function test()
{
global $test; 
echo $test; // <--- Prints 1
}
test();  

正确的方式......

<?php
$test = 1;
function test($test)
{
    echo $test; // <--- Prints 1 
}
test($test); //<--- Pass the $test param here

答案 2 :(得分:0)

此行为称为超全局变量。但是php限制了它们的预定义列表:Superglobals

所以你不能添加你自己的超全局变量。

Variable scope

我的建议从最不那么激进:

  • 编辑PHP的源代码并添加自己的超级全局。
  • 根本不要编写代码。
  • 不要使用PHP(使用不同的语言和不同的变量范围策略)。
  • 不要使用函数(写简单脚本)。
  • 使用常量而不是变量。
  • 使用函数参数而不是使用全局变量。
  • 使用静态变量而不是全局变量。 (\G::$variable