модификатор глобальной переменной 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 при перезагрузке страниц обнуляется.
Она и должна обнуляться. Если Вам необходимо передавать информацию при переходе по страницам или при обновлении текущей — выходов два:
Источник