有什么方法可以定义一个变量,这样我就不需要在每个函数中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
)