Глобальная переменная PHP не определена в функции, даже если глобальное ключевое слово используется

Да я знаю, что глобальные переменные являются плохой практикой, но ослабьте то правило для этого :P

Мой код:

include('something.php'); //where $from is declared

function myfunc() {
    global $from;
    echo "from(myfunc)=$from<br />";
    ...
}

echo "from=$from<br />";
myfunc();

Результат:

from=2010-05-01
from(myfunc)=

Что продолжается?:(

Править: Если это помогает, весь код выше в файле представления в CodeIgniter (и да, я знаю, что функции, как предполагается, не являются внутренними представлениями :P)

14
задан Obay 7 July 2010 в 10:15
поделиться

2 ответа

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

В таком случае, $from, который вы определяете в something.php, не является глобальным, а тот, на который вы ссылаетесь в функции - является.

Возможно, это сработает, если вы добавите global $from; внутри something.php перед определением $from.

Нет нужды говорить, что это не очень хорошая практика в любом случае, и вы должны следовать совету Гордона.

25
ответ дан 1 December 2019 в 07:05
поделиться

Сделайте себе одолжение и используйте Dependency Injection.

function myfunc($from) {
    return "from(myfunc)=$from<br />";
}
$from = '2010-05-01';
echo myfunc($from);

Это сделает ваш код более сопровождаемым, менее связанным и более легко поддающимся юнит-тестированию, поскольку он изолирован от глобальной области видимости. Кроме того, когда вы это делаете, люди думают, что вы крутой.

14
ответ дан 1 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: