PHP доступ к глобальной переменной в функции



Согласно большинству правил области языков программирования, я могу получить доступ к переменным, которые определены вне функций внутри них, но почему этот код не работает?



<?php
$data='My data';
function menugen(){

echo "[".$data."]";
}
menugen();
?>


здесь [] в выход.

709   6  

6 ответов:

это не работает, потому что вы есть чтобы объявить, к каким глобальным переменным вы будете обращаться:

$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, я бы предложил вам вообще избегать использования глобалов и предпочитать передачу в качестве параметров.

Вы можете выполнить одно из следующих действий:

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

или

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

как говорится, чрезмерное использование глобалов может привести к некоторому плохому коду. Обычно лучше сдать то, что вам нужно. Например, вместо ссылки на объект глобальной базы данных вы должны передать дескриптор в базу данных и действовать в соответствии с этим. Это называется инъекцией зависимостей. Это делает вашу жизнь намного проще, когда вы внедряете автоматизированное тестирование (которое вы должны).

это вопрос масштаба. Короче говоря, глобальных переменных следует избегать так:

вы должны передать его в качестве параметра:

$data = 'My data';

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

или иметь его в классе и получить к нему доступ

class MyClass
{
    private $data = "";

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

}

Edit: см. ответ @MatteoTassinari, а также вы можете пометить его как глобальный, чтобы получить к нему доступ, но глобальные vars, как правило, не требуются, поэтому было бы разумно переосмыслить ваше кодирование.

другой способ сделать это:

<?php

$data = 'My data';

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

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

$menugen();

нужно передать переменную в функцию:

$data = 'My data';

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

Если вы хотите, вы можете использовать функцию "define", но эта функция создает константы, которые не могут быть изменены после определения.

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

function myTest() {
    echo GREETING;
}

myTest();
?>

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

Comments

    Ничего не найдено.