Php global не работает

модификатор глобальной переменной php не работает

Я использую простой пример php для глобального модификатора, и он не работает для меня: — |

Вот результат . $ ***: 2

Есть ли какой-либо параметр в php.ini, который может повлиять на это?

6 ответов

Я также столкнулся с вашей проблемой. Поскольку я использую фреймворк (Yii), я точно не знал, что мой код действительно был вложен в функции и, следовательно, global не вел себя так, как ожидалось (как объяснили omadmedia и другие).

Мое решение довольно простое:

Хотите верьте, хотите нет, но я также получил ответ: 2. Это означает, что действительно есть некоторые случаи, когда глобальный не работает.

Пытался найти причину: Кажется, что если у вас есть функция и вы поместили код OP (который является примером php.net) внутри этой функции, вы получите ответ 2. Это немного странно и, в некотором смысле, имеет смысл .

(я использую PHP 5.2.5 под Apache 2.2.8 в Win XP)

LE: МОЕ РЕШЕНИЕ Хорошо, решил это: когда вы используете global во 2-й функции, вы, очевидно, получаете суперглобальные переменные, которые доступны всем (т. Е. Декалярированы вне любой функции), но поскольку $ a и $ b объявлены внутри 1-й функции, они часть этой области и не доступны для 2-й функции. Мое предположение для решения состоит в том, чтобы объявить глобальные $ a и $ b вне 2-й функции, то есть внутри 1-й функции. !! Обратите внимание, что 1-й может быть не столь очевидным по разным причинам, например, ваш файл (содержащий только 2-ю функцию) включен где-то в теле другой функции в другом файле.

Как ответил @AgelessEssence, глобальное ключевое слово не работает, если у вас есть вложенная функция. Это очевидно в его примере. Однако, если неясно, включен ли файл. Вот пример.

В приведенном выше коде $ a выглядит как глобальная переменная. На самом деле это не потому, что он включен в функцию f () в a.php, а $ a является частью функции f ().

Итак, когда ваше глобальное ключевое слово не работает, проверьте, включено ли оно в функцию. Как решение этой проблемы хорошо объяснено в других ответах, поэтому я не добавил его сюда.

Ваш пример кода выше работает для меня. Но вы также можете использовать $ GLOBALS supervariable.

Глобальные переменные не должны использоваться, если вы можете помочь. Есть лучшие способы сделать ваши функции. Используйте параметры (аргументы) (возможно, пройти мимо ссылка ) и вернуть значение .

С помощью PHPDOC вы можете понять, что делают ваши функции лет без чтения кода. С хорошей IDE вы также можете получить объяснение и порядок аргументов при написании функции.

У меня есть ЖЕ ПРОБЛЕМА , как и вы, и, наконец, нашел ответ

рабочий код / DEMO

нерабочий код / DEMO

Как вы можете видеть, проблема возникает при использовании global ключевое слово внутри определения вложенной функции

Единственное, что я могу себе представить, это что-то не так, если вы назначаете переменные в глобальной области видимости после первого вызова функции. То есть ваша функция фактически объявляет переменные, а затем вы просто перезаписываете их в другом месте. Например, вызов Sum() и then для выполнения $a=1 , $b=2 .

Источник

PHP: global внутри функции не показывает переменную

В теле метода класса подключается файл ($dataFile):

В подключаемом файле следующая логика:

Этот подключаемый файл последовательно выполняет код используя некоторые функции объявленные в нём же и в конце возвращает некий результат.

И вот проблема в том, что внутри функции getCountryTitle глобальная переменная $lang не видна, она null соответственно. Аналогично с другими переменными и другими функциями.

Смотрю под отладчиком — при выполнении логики в файле не заходя в функцию глобальные переменные инициализированы и всё хорошо. При заходе в функцию и объявляя их глобальными — они невидимы.

В чём может быть проблема?

1 ответ 1

Здесь следует отметить, что представленный вами элемент кода следует рассматривать, как плохой стиль проектирования и программирования, поскольку он рассматривает подключаемый файл как моментально выполняемый набор операций.

Наиболее правильный подход заключался бы в том, чтобы поместить набор операций в виде функций/класса с собственным именем в файл, подключить файл (без какого-либо оператора возврата за пределами функций), а затем вызывать функцию явно с требуемым набором аргументов.

Так в чем проблема-то?

Все предельно просто, вы делаете include внутри метода method, а значит переменные указанные в подключаемом файле инициализируются в области видимости метода method. Следовательно, переменная $lang не является глобальной, а ограничена видимостью метода, а вы обращаетесь к глобальной переменной, поэтому при использовании модификатора global она будет равна null.

Если делать include в глобальной области видимости, тогда переменная lang станет общедоступной (global) и ее использование станет возможным. Это легко проверить, достаточно в подключаемом файле перед началом определения какой-либо переменной написать global $переменная.

Пример:

  • file1.php определен в глобальной области видимости.
  • file2.php определен в локальной области видимости функции include2.

Подход с глобальными переменными и таким include — это костыль, который принесет вам проблем в будущем. Функции должны быть определены явно, иметь уникальное имя и выполняться по требованию.

А почему подход с глобальными переменными плохой?

Дело в том, что глобальные переменные видимы отовсюду, глобально. Это удобно: ведь нет никаких ограничителей. С другой стороны, становится совершенно невозможно отследить, кто меняет данные. Неконтролируемые изменения — это первое, что обычно приходит в голову на вопрос о том, чем же плохи глобальные переменные.

Предположим, у вас есть функция, результат которой зависит от глобальной переменной. Вы вызываете её, вызываете — но через 10 минут функция начинает возвращать неверные результаты. Что случилось? Ведь на вход вы передаёте ей всё тот же набор параметров? Гм, кто-то поменял значение глобальной переменной. Кто это мог быть? Да кто угодно — ведь глобальная переменная доступна всем..

Лучший рецепт при проектировании подпрограмм: сделать так, чтобы результат вашей функции зависел бы только от аргументов. Это идеал, к которому нужно стремиться.

Не используйте глобальные переменные в проекте без необходимости, пользуйтесь всеми возможностями локальной области видимости, передачи параметров в аргументы функции и код будет легче писать, поддерживать и тестировать.

Знаете какой наилучший префикс для глобальных переменных?

Источник

Php global не работает

Здесь могла бы быть ваша реклама

Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

Источник

Не работает глобальная переменная

Прикол в том, что $mysqli передается/видна и работа с базой отпрабатывает если выполнить запрос, но $isEnabledFullNames которая находится в томже месте и объявляется аналогично вообще не видна в этом методе!? какая то мистика(

Добавлено через 18 минут
Upd разобрался! оказывает пых при булевых false значениях вообще отбрасывает их, т.е. как будто переменная пуста, а я думал что ее вовсе нет).
например есть поставить вместо false true то будет показывать значение переменной = 1 т.е. в цифры еще переводит)

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Не работает глобальная переменная
Всем привет! В общем проблема у меня в том, что не увеличивается значение на +1 когда я нажимаю на.

Глобальная переменная
Здравствуйте, как мне создать переменную которая будет хранится до тех пор пока пользователь не.

Глобальная переменная
Хочу что бы при нажатии кнопки test1 присваивалась 6 (так все и есть), а при нажатии test2.

Глобальная переменная
Здраствуйте, вот интересует такой вопрос: можно ли как-то переменную сделать глобальной так, чтобы.

Источник

$GLOBALS[«моя переменная»] не работает

Подскажите люди добрые — почему может не работать $GLOBALS[«моя переменная»]?
Использую в header.php при перезагрузке страниц обнуляется.

Код
«; $GLOBALS[«моя переменная»] = что то

Установил последний битрикс Малый Бизнес

UPDATED — помог вызов такой функции определенной в init.php внутри header.php — global_session(«моя переменная»);

ТКНИТЕ ПЛИЗ ГДЕ ПОЧИТАТЬ что происходит И ЕСТЬ ЛИ В API BITRIX функции наподобие global_session

Цитата
Pyotr Gerasimov пишет:
Использую в header.php при перезагрузке страниц обнуляется.
Цитата
Руслан пишет:
а что мешает использовать $_SESSION, $_COOKIE ?
Цитата
Евгений Жуков пишет:
Цитата
Pyotr Gerasimov пишет:

Использую в header.php при перезагрузке страниц обнуляется.

Она и должна обнуляться. Если Вам необходимо передавать информацию при переходе по страницам или при обновлении текущей — выходов два:

Источник

Читайте также:  Как настроить теле2 по всей россии
Оцените статью