在功能PHP访问的全局变量(PHP access global variable in functi

2019-08-18 04:03发布

按照大多数编程语言范围的规则,我可以访问内部它们的函数之外定义的变量,但是为什么这个代码不工作?

<?php
$data = 'My data';

function menugen(){   
    echo "[".$data."]";
}

menugen();
?>

[]中输出。

Answer 1:

这是行不通的,因为你必须声明其全局变量,你就可以访问:

$data = 'My data';

function menugen() {
    global $data; // <-- add this line

    echo "[".$data."]";
}

menugen();

否则,你可以访问它为$GLOBALS['data']见http://php.net/manual/en/language.variables.scope.php

即使一点点OT,我建议你避免全部采用全局,宁愿传递作为参数。



Answer 2:

您可以执行下列操作之一:

<?php
$data='My data';
function menugen(){
    global $data;
    echo "[".$data."]";
}
menugen();

要么

<?php
$data='My data';
function menugen(){
    echo "[".$GLOBALS['data']."]";
}
menugen();

话虽这么说,全局的过度使用可能会导致一些贫困的代码。 它通常是更好的,你需要的东西通过。 例如,而不是引用全局数据库对象,你应该传递一个句柄到数据库,并在该行动。 这就是所谓的依赖注入。 它使你的生活,当你实现自动化测试容易得多(你应该)。



Answer 3:

它的范围的问题。 总之,全局变量应该是这样避免:

你要么需要把它作为参数传递:

$data = 'My data';

function menugen($data)
{
    echo $data;
}

或者它在一个类和访问

class MyClass
{
    private $data = "";

    function menugen()
    {
        echo this->data;
    }

}

编辑:见@MatteoTassinari回答,以及你可以将其标记为全球访问,但全局变量则一般不需所以这将是明智的重新思考你的编码。



Answer 4:

另一种方式来做到这一点:

<?php

$data = 'My data';

$menugen = function() use ($data) {

    echo "[".$data."]";
};

$menugen();


Answer 5:

您需要将变量传递到函数:

$data = 'My data';

function menugen($data)
{
    echo $data;
}


Answer 6:

如果你愿意,你可以使用“定义”功能,但该功能创建不能更换一次定义的常量。

<?php
define("GREETING", "Welcome to W3Schools.com!");

function myTest() {
    echo GREETING;
}

myTest();
?>

http://www.w3schools.com/php/php_constants.asp



文章来源: PHP access global variable in function
标签: php scope