Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php全局变量修饰符不工作_Php_Global_Modifier - Fatal编程技术网

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

我使用基本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 =& $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