是否可以将变量声明为 "always global"?



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

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

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

在不使用丑陋的global范式的情况下执行此操作的一种方法是使用类容器。对于某些人来说,这可能被称为"注册表"。

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

echo Container::$setting;

这使得这个变量的位置更加清晰,但是它有一个弱点,即不能动态设置属性,因为在PHP中你不能静态地做到这一点。

如果您不介意创建一个对象并以这种方式设置动态变量,它将起作用。

您需要将变量作为参数传递给该函数以避免使用 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

这种行为称为超全局变量。但是 php 的预定义列表有限:超全局变量。

因此,您不能添加自己的超全局变量。

可变范围

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

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

相关内容

  • 没有找到相关文章

最新更新