访问 PHP 函数中的全局变量
根据大多数编程语言的作用域规则,我可以访问在函数内部定义的变量,但为什么此代码不起作用?
<?php
$data = 'My data';
function menugen() {
echo "[" . $data . "]";
}
menugen();
?>
输出为 。[]
根据大多数编程语言的作用域规则,我可以访问在函数内部定义的变量,但为什么此代码不起作用?
<?php
$data = 'My data';
function menugen() {
echo "[" . $data . "]";
}
menugen();
?>
输出为 。[]
它不起作用,因为您必须声明您将要访问的全局变量:
$data = 'My data';
function menugen() {
global $data; // <-- Add this line
echo "[" . $data . "]";
}
menugen();
否则,您可以将其作为 访问。请参见变量作用域。$GLOBALS['data']
即使有点偏离主题,我也建议您避免使用全局变量,而更喜欢作为参数传递。
您可以执行下列操作之一:
<?php
$data = 'My data';
function menugen() {
global $data;
echo "[" . $data . "]";
}
menugen();
或
<?php
$data = 'My data';
function menugen() {
echo "[" . $GLOBALS['data'] . "]";
}
menugen();
话虽如此,过度使用全局变量可能会导致一些糟糕的代码。通常最好传递您需要的东西。例如,不应引用全局数据库对象,而应将句柄传递到数据库并对其执行操作。这称为依赖关系注入。当您实施自动化测试时,它使您的生活变得更加轻松(您应该这样做)。