Подтвердить что ты не робот

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

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

<?php
$data = 'My data';

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

menugen();
?>

На выходе есть [].

4b9b3361

Ответ 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

Даже если немного ОТ, я бы посоветовал вам вообще не использовать глобальные переменные и предпочитать передачу в качестве параметров.

Ответ 2

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

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

или

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

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

Ответ 3

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

Вам либо нужно передать его как параметр:

$data = 'My data';

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

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

class MyClass
{
    private $data = "";

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

}

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

Ответ 4

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

<?php

$data = 'My data';

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

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

$menugen();

Ответ 5

В течение многих лет я всегда использовал этот формат:

   <?php
     $data = "Hello";

     function sayHello(){
       echo $GLOBALS["data"];
     }

    sayHello();

   ?>

Я считаю это простым и понятным. $ GLOBAL - это то, как PHP позволяет вам ссылаться на глобальную переменную. если вы использовали такие вещи, как $ _SERVER, $ _POST и т.д., то у вас есть ссылка на глобальную переменную, не зная об этом

Ответ 6

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

$data = 'My data';

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

Ответ 7

Это удивительный пост. Эта статья хороша. Для более подробной информации кратко нажмите здесь

HOW TO DEFINE CONSTANT IN PHP

Ответ 8

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

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

function myTest() {
    echo GREETING;
}

myTest();
?>

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