全局变量未按预期与框架一起工作
Global variables aren't working as expected with frameworks
我试图在我的 php 脚本中使用全局变量,我在 php.net 上发现了全局变量的用法。但它在我的本地服务器上不起作用。有没有我错过的配置?
在 that page 上找到了一个示例:
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>
上面的脚本会输出3.
然而我的输出是2!
另一个例子:
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;
?>
我收到错误:
Undefined index: a
那有什么关系呢?为什么我的代码没有按预期工作?
顺便说一下,我正在使用 Laravel.
所以我猜你正在使用你在 :
中所说的框架
@Rizier123 Yes, I'm using Laravel. Does it matter? – Kai 6 mins ago
如果重要呢?是的。
可能这里发生的事情是,您在这里向我们展示的代码被包装到其他地方的另一个函数中。
意味着 Sum()
函数中的变量在全局范围内,但它之外的其他变量则不是,因为它们可能在另一个函数 == 另一个范围内。
您可以使用此代码重现它:
function anotherFunction() {
$a = 1;
$b = 2;
function Sum() {
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;
}
anotherFunction();
如果您有 error reporting,您将获得:
Notice: Undefined index: a
Notice: Undefined index: b
2
只需将错误报告放在文件顶部即可获得有用的错误消息:
<?php
ini_set("display_errors", 1);
error_reporting(E_ALL);
?>
现在要解决这个问题,您还必须在全局范围内声明变量,或者使用:
$GLOBALS["a"] = 1;
$GLOBALS["b"] = 2;
或者像这样:
global $a, $b;
$a = 1;
$b = 2;
我试图在我的 php 脚本中使用全局变量,我在 php.net 上发现了全局变量的用法。但它在我的本地服务器上不起作用。有没有我错过的配置?
在 that page 上找到了一个示例:
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>
上面的脚本会输出3.
然而我的输出是2!
另一个例子:
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;
?>
我收到错误:
Undefined index: a
那有什么关系呢?为什么我的代码没有按预期工作?
顺便说一下,我正在使用 Laravel.
所以我猜你正在使用你在
@Rizier123 Yes, I'm using Laravel. Does it matter? – Kai 6 mins ago
如果重要呢?是的。
可能这里发生的事情是,您在这里向我们展示的代码被包装到其他地方的另一个函数中。
意味着 Sum()
函数中的变量在全局范围内,但它之外的其他变量则不是,因为它们可能在另一个函数 == 另一个范围内。
您可以使用此代码重现它:
function anotherFunction() {
$a = 1;
$b = 2;
function Sum() {
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;
}
anotherFunction();
如果您有 error reporting,您将获得:
Notice: Undefined index: a
Notice: Undefined index: b
2
只需将错误报告放在文件顶部即可获得有用的错误消息:
<?php
ini_set("display_errors", 1);
error_reporting(E_ALL);
?>
现在要解决这个问题,您还必须在全局范围内声明变量,或者使用:
$GLOBALS["a"] = 1;
$GLOBALS["b"] = 2;
或者像这样:
global $a, $b;
$a = 1;
$b = 2;