php全局变量修饰符不工作
我使用基本php示例作为全局修饰符,但它不适用于我:-|php全局变量修饰符不工作,php,global,modifier,Php,Global,Modifier,我使用基本php示例作为全局修饰符,但它不适用于我:-| $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo "***: ".$b; 这是结果。。。 $***:2 php.ini上是否有任何参数可能会影响这一点?您上面的示例代码适合我。但也可以使用超变量 function Sum() { $a = $GLOBALS["a"]; $b =& $GLO
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo "***: ".$b;
这是结果。。。
$***:2
php.ini上是否有任何参数可能会影响这一点?您上面的示例代码适合我。但也可以使用超变量
function Sum()
{
$a = $GLOBALS["a"];
$b =& $GLOBALS["b"];
$b = $a + $b;
}
如果您可以帮助,则不应使用全局变量。有更好的方法来实现您的功能。使用(可能)和
有了它,您可以在几年后不必阅读代码就可以理解函数的功能。使用好的函数,您还可以在编写函数时获得解释和参数顺序。我能想象的唯一错误是,如果您在首先调用函数后在全局范围内分配变量。也就是说,函数实际上是在声明变量,然后在其他地方覆盖它们。例如,调用
Sum()
,然后执行$a=1
,$b=2
,信不信由你,我得到的答案是:2。
这意味着在某些情况下,global确实不起作用
已尝试查找原因:
如果您有一个函数,并将OP的代码(这是一个php.net示例)放在该函数中,您将得到答案2。
这有点奇怪,在某种程度上说是有道理的
(我在WinXP中使用Apache2.2.8下的PHP5.2.5)
乐:
我的解决方案
好的,解决了这个问题:当你在第二个函数中使用global时,你显然得到了超全局变量,这些变量对每个人都是可用的(即,在任何函数之外都被标记),但是由于$a和$b是在第一个函数中声明的,它们不属于该范围,也不适用于第二个函数。
我猜解决方案是将$a和$b声明为全局的,在第二个函数之外,也就是在第一个函数之内。
!! 请注意,由于各种原因,第一个问题可能不太明显,例如您的文件(仅包含第二个函数)包含在不同文件中不同函数体的某个位置。我和您一样有同样的问题,最终找到了答案 工作代码/ 非工作代码/ 如您所见,在嵌套函数定义中使用global关键字时会出现问题
更多信息:我也面临着你的问题。当我使用框架(Yii)时,我并没有完全意识到我的代码确实嵌套在函数中,因此,
global
的行为并不像预期的那样(正如omadmedia和其他人所解释的那样)
我的解决方案非常简单:
global $a;
global $b;
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo "***: ".$b;
正如@AgelessEssence所回答的,如果您有嵌套函数,则全局关键字不起作用。这在他的例子中是显而易见的。但是,如果不清楚是否包含文件。这是一个例子
//a.php
function f() {
require_once('./a_inc.php');
}
f();
//a_inc.php
$a = 12;
function g() {
global $a;
var_dump($a);
}
g();
//result
null
在上面的代码中,$a看起来像一个全局变量。实际上,这并不是因为它包含在a.php的函数f()中,$a是函数f()的一部分
因此,当您的全局关键字不起作用时,请检查它是否包含在函数中。由于这个问题的解决方案在其他答案中有很好的解释,所以我没有在这里添加它 这是准确的密码吗?你是否在这里留下任何信息?当然,他有-比如PHP的确切版本…?请参阅本期的可复制版本。同样适用于Laravel!这也适用于,什么是最好的解决方法?因为这正是我需要的。(我认为我需要的)
function encapsulation() {
$a=1;
function showA() {
global $a;
var_export($a);
};
showA();
}
encapsulation(); // outputs "NULL"
global $a;
global $b;
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo "***: ".$b;
//a.php
function f() {
require_once('./a_inc.php');
}
f();
//a_inc.php
$a = 12;
function g() {
global $a;
var_dump($a);
}
g();
//result
null