Глобальная переменная доступа PHP в функции
Согласно большинству правил области действия языков программирования, я могу получить доступ к переменным, которые определены вне функций внутри них, но почему этот код не работает?
<?php
$data = 'My data';
function menugen(){
echo "[".$data."]";
}
menugen();
?>
На выходе есть []
.
Ответы
Ответ 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