Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090

Своя специальная переменная

19.04.2020, 11:50. Показов 1403. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не знаю, насколько правильно я сформулировал заголовок... в общем, мне нужно следующее:
Есть глобальная переменная, допустим, $GLOBALS['current_page']['qwerty']. Естественно, мне не удобно писать столько букв много раз в коде, да это и не читабельно. Мне бы хотелось определить свою специальную переменную $QWERTY, которая бы ссылалась на вышеупомянутую. Как мне это можно сделать? И на сколько это правильно вообще?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2020, 11:50
Ответы с готовыми решениями:

Специальная функция
Подскажите бесконечную простую функцию как синус и т.д. Чтобы кривая была гладкая и похожа на эту: Желательно с регулировками.

Специальная вставка
Добрый день. подскажите пожалуйста, в чем может быть причина разной вставки одного и того же диапазона в разных версиях MS Excel (2007 vs...

Специальная сортировка массива
Дан числовой массив размера N. Наименьший из элементов массива поместить на первое место в массиве, наименьший из оставшихся — на...

24
189 / 125 / 60
Регистрация: 18.05.2014
Сообщений: 264
19.04.2020, 12:24
Использовать ссылки:
PHP
1
2
3
$a = "some value";
$b =& $a;  // b = a = 'some value'
$b = "new value"; // b = a = 'new value'
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
19.04.2020, 12:50
Также, чтобы упростить запись глобальной переменной в пределах локальной области видимости, можно использовать объявление global:
PHP
1
2
3
global $current_page;
 
echo $current_page['qwerty'];
Есть и другие способы. Но нужно смотреть в контексте, для чего вам необходима глобальная переменная.
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
19.04.2020, 13:00
ChildOfFlowers, создайте константу, она будет доступна в любом месте программы.
0
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
20.04.2020, 17:53  [ТС]
Цитата Сообщение от dontknow Посмотреть сообщение
Использовать ссылки
Есть одна проблемка. Из функций к ним всё равно придётся обращаться через $GLOBALS
Цитата Сообщение от estic Посмотреть сообщение
можно использовать объявление global
Опять же, в каждой функции использовать такое объявление - не многим удобнее
Цитата Сообщение от Строитель Посмотреть сообщение
создайте константу
Как это вы себе представляете? Define не даёт возможности делать ссылку на динамический объект.
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
20.04.2020, 18:03
Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
Define не даёт возможности делать ссылку на динамический объект.
А где сказано в первом посту, что идёт работа с динамическими объектами?
0
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
20.04.2020, 18:17  [ТС]
Строитель, а что, переменная не динамический объект?
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
20.04.2020, 18:23
ChildOfFlowers, переменная - именованная область памяти, адрес которой можно использовать для осуществления доступа к данным и изменять значение в ходе выполнения программы.
Динамические объекты - это способ создания объектов налету. Определитесь сперва с терминологией, потом задавайте корректные вопросы, что бы получать корректные ответы.
1
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
20.04.2020, 18:51  [ТС]
Строитель, хотите позаниматься словоблудием? Ну давайте... Переменная в ООП является объектом. Что касается её динамичности, я это написал специально чтобы подчеркнуть разницу нужных мне свойств от свойств константы, которую вы с чего-то решили предложить. В теме нигде не было сказано, что значение переменной не будет меняться. Напротив, когда я пишу слово "переменная", я подразумеваю, что читающий по умолчанию поймёт, что её значение может динамически меняться. Потому что это основное свойство переменной, она поэтому так и называется. Иначе она бы называлась постоянной... ну или константой. Странно, что такие вещи вообще приходится объяснять.
0
20.04.2020, 18:54

Не по теме:

Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
хотите позаниматься словоблудием?
Лично я ничего не хочу, в отличии от вас - это ведь вам нужен ответ на вопрос, но вы упорно продолжаете оффтопить.

0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
20.04.2020, 19:33
Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
Есть одна проблемка. Из функций к ним всё равно придётся обращаться через $GLOBALS
Можно сделать локальную ссылку на глобальную переменную:
PHP
1
2
3
$current_page=&$GLOBALS['current_page'];
 
echo $current_page['qwerty'];
Это аналог показанного мной global. Но ведь можно сделать локальную ссылку прямо на $current_page['qwerty']

Добавлено через 2 минуты
Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
Переменная в ООП является объектом.
Полегче с терминологией! Пользуйтесь общепринятой
0
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
21.04.2020, 11:04  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Можно сделать локальную ссылку на глобальную переменную
Так всё равно мне в каждой функции придётся её объявлять. Мне такой вариант не подходит. Я думал есть способ зарезервировать определённое имя, чтобы оно работало из любой части кода. Как, например, $_SESSION. Она, ведь, тоже расположена в $GLOBALS, но мы это нигде не указывает, независимо от области видимости...
Цитата Сообщение от estic Посмотреть сообщение
Полегче с терминологией! Пользуйтесь общепринятой
Тут, конечно, ещё от языка зависит... возможно насчёт php я слегка погорячился. С другой стороны, ведь у переменных в php есть скрытые свойства: тип, длина, возможно что-то ещё... значит и значение является одним из свойств. Такую переменную точно нельзя назвать просто выделенной областью памяти. На мой взгляд, по всем признакам она является ни чем иным, как объектом.

Добавлено через 7 минут
Цитата Сообщение от Строитель Посмотреть сообщение
Лично я ничего не хочу
Однако в рейтинг нагадили. Ещё и чепухи наговорили, потратили на неё моё время. Что тут скажешь... желаю и вам по жизни таких же "помощников". Хотя от встречи с ними вряд ли вы сделаете правильные выводы.
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
21.04.2020, 11:43
Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
Как, например, $_SESSION.
Это т.н. "суперглобальная переменная", т.е. служебная. Самостоятельно такие переменные вы создавать не можете. Но можете использовать константы Вы зря со Строителем "грызетесь". Он ведь хотел вам помочь. Дело в том, что в PHP константы - не совсем константы. При определении они работают, как переменные. И только потом значение запрещено изменять. Глобальные переменные обычно используются точно так же (т.е. свойство констант не быть измененными здесь может быть только на пользу). Я вам писал, что многое зависит от контекста. Зачем вам понадобилось изменять глобальную переменную?
0
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
21.04.2020, 12:36  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Самостоятельно такие переменные вы создавать не можете
Увы... именно это мне было нужно
Цитата Сообщение от estic Посмотреть сообщение
Зачем вам понадобилось изменять глобальную переменную?
Не изменять, а создавать свою. В основном чтобы упорядочить код. Поскольку у меня многие функции используют одни и те же общие ресурсы, я поместил их в разные области $_SESSION. И всё бы хорошо, но длиннющие адреса таких ресурсов в коде ну совсем не наглядны. Хотелось сделать всё красиво и читабельно.
Я, вот, сейчас подумал, что для моих целей можно попробовать использовать классы. Они ведь тоже видны ото всюду...
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
21.04.2020, 14:02
Я не знаю, что такое "разные области" $_SESSION. Но у этой переменной вполне конкретное назначение. Использование ее не по назначению может привести к большим накладным расходам и не только.

Да, можно использовать статические свойства классов или статические переменные функций.
0
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
21.04.2020, 14:55  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Я не знаю, что такое "разные области"
Это ячейки массива, которые я же создал, чтобы не сваливать все ресурсы вместе. Например $_SESSION['user'], $_SESSION['current_page'], и т.д.
Цитата Сообщение от estic Посмотреть сообщение
Использование ее не по назначению может привести к большим накладным расходам и не только
Мне кажется, я использую её вполне по назначению - помещаю в неё информацию о сессии. И про какие "расходы и не только" вы говорите? Можно об этом поподробнее?
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
21.04.2020, 15:37
Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
Это ячейки массива
Элементы этого массива можно называть "сессионными переменными". Так вас быстрее поймут.

Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
Мне кажется, я использую её вполне по назначению - помещаю в неё информацию о сессии.
Тогда ладно. Просто выше вы говорили о совместном использовании ресурсов многими функциями. Надеюсь, слово "сессия" мы понимаем одинаково

Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
И про какие "расходы и не только" вы говорите? Можно об этом поподробнее?
Лучше, чем написано в документации, все равно не расскажу.

Добавлено через 4 минуты
Приведите конкретные примеры "совместно используемых ресурсов". А то сейчас мы вам тут насоветуем
0
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
21.04.2020, 21:55  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Приведите конкретные примеры
Ну например, в той же $_SESSION['user'] хранится значение role. Любая функция, которая обращается к БД сперва проверяет, можно ли дать доступ текущему пользователю на основании его роли.
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
22.04.2020, 09:23
По канону суперглобальные переменные, кроме $GLOBALS, внутри функций моделей нельзя использовать. Ведь их может и не быть

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

Добавлено через 7 минут
Также можно использовать косвенную передачу в виде необязательных аргументов с именами переменных/констант:
PHP
1
2
3
function getUserProfile($user='user')
{
    echo $GLOBALS[$user] или storage($user);
Добавлено через 5 минут
С константами, имена которых "не постоянны", аналогично:
PHP
1
2
3
function getUserProfile($user='USER')
{
    echo constant($user);
0
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
22.04.2020, 10:53  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Ведь их может и не быть
Об этом я как-то не подумал Впрочем, создать для своих целей переменную непосредственно в $GLOBALS вообще не проблема. С другой стороны, наличие таких важных переменных как $_SESSION, мне кажется, должно быть задукоментировано для каждой версии php. Т.е., она не должна пропасть ни с того, ни с сего...
Цитата Сообщение от estic Посмотреть сообщение
можно передавать в виде аргументов функций
Не можно. Это правило я для себя ввёл, чтобы не путаться в собственном коде. Глобальные значения размещаю глобально, в аргументах передаю только то, что относится непосредственно к функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2020, 10:53
Помогаю со студенческими работами здесь

Специальная теория относительности
Две частицы движутся навстречу друг другу со скоростями v1=2,7· 10^8 м/c и v2=2,1·10^8м/с по отношению к лабораторной системе отсчета....

Специальная правая часть
Не получается решить д.у. со специальной правой частью y-y''=-1

Специальная задержка curl
При загрузке сайта к которому подключаюсь через curl некоторая часть его HTML подгружается с задержкой несколько секунд через JS. Curl не...

Специальная графика. Функция ROSE
Добрый день. Имеется задание описать все возможные варианты синтаксиса функции rose в matlab с примерами использования. С тремя...

Куда специальная вставка-то делась?
Щас установил VS 2019 и обнаружил, что отсутствует спец вставка. Как так то? и как с этим бороться?)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru