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

Да, я знаю, что глобальные переменные - плохая практика, но упростите это правило: 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)

Ответы [ 2 ]

25 голосов
/ 07 июля 2010

Бьюсь об заклад, пиво с этим фрагментом вы не в глобальном масштабе.Вы вызываете это изнутри функции?

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

Вероятно, это сработает, если вы добавите global $from; внутрь something.php до того, как определите $from.

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

14 голосов
/ 07 июля 2010

Сделайте себе одолжение и используйте Инъекция зависимости.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...