Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100

Как лучше всего сделать объект видимым глобально?

22.07.2018, 13:18. Показов 1842. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Иногда, нам нужно иметь переменную или объект доступный из любого места.

Например, соединение с БД.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$mysqli = new mysqli($hostname, $username, $password, $base_name);
 
//Используем mysqli ниже
 
//Тут область видимости значения не имеет
$mysqli_result=$mysqli->query("SELECT * FROM `data`");
 
 
//А тут, разумеется, объект не виден
function test()
{
$mysqli_result=$mysqli->query("SELECT * FROM `data`");
}
 
 
//А тут уже виден
function test1()
{
global $mysqli;
$mysqli_result=$mysqli->query("SELECT * FROM `data`");
}

Могу ли я сделать как то так?
PHP
1
global $mysqli = new mysqli($hostname, $username, $password, $base_name);
Один раз указать, что этот объект всегда должен быть виден глобально.

А далее
PHP
1
2
3
4
function test()
{
$mysqli_result=$mysqli->query("SELECT * FROM `data`");
}
И он будет виден в любой функции.

Обычно в программировании так и делается. Вверху файла указываются переменные видимые в глобальной области, в данном файле и т.д.
Но в php, как я понял из мануала, наоборот?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2018, 13:18
Ответы с готовыми решениями:

Как лучше всего сделать авторизацию и распределение прав+защиту от несанкц. входа?
Подскажите пожалуйста, каким образом лучше всего реализовать вход пользователя в систему? Я вроде и пытался делать сессиями, с другой...

Как лучше всего сделать комментарии без капчи, но и без спама?
Здавствуйте, вообщем хочу написать свой блок комментариев для статей,все бы ничего НО Я хочу сделать это без регестрации и капчи,что...

Как лучше всего сделать сохранение >100 страниц из word шаблона с заменой ключ. слов в один word файл для посл. печати?
Я вот думаю, как? Точнее не думаю, я уже приступлю к созданию всего этого завтра, но хотел бы посоветоваться. Получается, брать...

16
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
22.07.2018, 13:27
Лучший ответ Сообщение было отмечено tarasalk как решение

Решение

Цитата Сообщение от useruser Посмотреть сообщение
Один раз указать, что этот объект всегда должен быть виден глобально.
Либо явно использовать global, либо доставать из суперглобального массива $GLOBALS
PS. Лучше глобальные переменные не использовать вообще, заменив их хотябы на синглтон. Идеальный вариант использовать какой-либо DI-контейнер
1
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
22.07.2018, 15:13  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Либо явно использовать global
Сейчас пишу так
PHP
1
2
3
4
5
6
7
8
9
10
function test()
{
global $mysql,$var1;
//.....
}
 
function test1()
global $mysql,$var1;
//.....
}
Немного напрягает, что в 10 функциях копипастю global $mysql,$var1; А иначе они там не видны.

Вот бы указать один раз, что $mysqi - виден везде.

Цитата Сообщение от Jewbacabra Посмотреть сообщение
либо доставать из суперглобального массива $GLOBALS
Так что так
PHP
1
global $mysql;
что так
PHP
1
$GLOBALS["mysql"]
вроде по смыслу почти одно и тоже.

Цитата Сообщение от Jewbacabra Посмотреть сообщение
Лучше глобальные переменные не использовать вообще
Разумеется. Но пока иду на такую жертву.

В том же паскале просто указываются объекты в public declarations, например и всё.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
22.07.2018, 15:32
Реестр. Обернутый в синглтон или обычный (статичный).
1
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
23.07.2018, 02:49
useruser, как говорил Jewbacabra, Идеальный вариант использовать какой-либо DI-контейнер
Недавно познакомился с данной технологией, полезная вещь.
0
 Аватар для D_Vik
368 / 234 / 68
Регистрация: 19.07.2016
Сообщений: 833
23.07.2018, 04:09
useruser,

А вы не пробовали пользоватся автоподгрузкой класса ?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
23.07.2018, 06:10
D_Vik, не в этом дело. Ему объект надо глобальным сделать, а не класс подключить.
0
23.07.2018, 07:13

Не по теме:


Para bellum,

ТС явно делает что то не так...

Или я еще не проснулся (кофе).

0
23.07.2018, 07:18

Не по теме:

Что что-то не так, это да. Потому выше и советуют DI-контейнер.

0
23.07.2018, 07:24

Не по теме:


Para bellum,

Если человек задает такие вопросы , думаю для него осилить шаблон DI будет несколько затруднительно (скорее всего).

Какой нить статический пдо думаю справится с задачей )

0
23.07.2018, 21:31

Не по теме:

D_Vik, лучше пусть осиливает раньше, а то долгое употребление плохих практик дурно влияет на человека :) Лучше делать правильно сразу. Обычный синглтон очень прост для понимания ))

Кстати, дурной вопрос. А что такое DI ? )))))

0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
23.07.2018, 21:39
Цитата Сообщение от Зверушь Посмотреть сообщение
А что такое DI ?
https://ru.wikipedia.org/wiki/... ависимости
2
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
24.07.2018, 12:41
Цитата Сообщение от Зверушь Посмотреть сообщение
D_Vik, лучше пусть осиливает раньше, а то долгое употребление плохих практик дурно влияет на человека Лучше делать правильно сразу. Обычный синглтон очень прост для понимания ))
Если вы считаете что ошибаться это дурная практика, вы очень и очень глубоко заблуждаетесь.
Я считаю это самая полезная практика.

Нас в школе напрочь отучили ошибаться, от нас хотели сразу верный результат, без обратной стороны.
Наверное понимаете о чем я?.
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
24.07.2018, 13:04
popryduhin, все должно быть в меру. Тут советовали забить на изучение и использовать "что попроще". Именно на это я и возмутился. И еще раз прочитайте ту фразу, которую вы процитировали. Сделать акцент на слове "долгое". Если бы не это слово, я бы с вами был на 100% согласен
0
 Аватар для D_Vik
368 / 234 / 68
Регистрация: 19.07.2016
Сообщений: 833
26.07.2018, 17:39
Зверушь,

Ето понятно что нужно развиватся , но чтобы осилить как работает сложное , наверное проще будет начать с понимания простого. Как только придет понимание простого , сложное уже не будет таким сложным как казалось ) Ну я могу и ошибатся естественно , можно было человека послать и какой нить Zend Framework изучать , думаю понимание пришло бы на следующий день )
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
26.07.2018, 17:58
Зверушь,

Мой пост относится к
Цитата Сообщение от popryduhin Посмотреть сообщение
Лучше делать правильно сразу.
Извините, ввожу в заблуждение.


Так же стоит понимать что, все советчики, в некоторой мере могли быть разочарованы в собственном опыте.
И на подсознательном уровне не дать вам испытать это же, а вдруг вы это сделаете, это микро удар по самолюбию.
Возможно вы не согласитесь с этим, но такое тоже может быть.

Следует также понимать, вокруг нас огромное количество разных людей (пессимисты, оптимисты, ...).

пессимисты - не связывайтесь с ними, напрочь отобьют все желание.
оптимисты - нормальные ребята.

Но познать грани тех и тех, мудрость.



Да, и автору поста, вам сюда https://www.youtube.com/channe... jG9CrBi6nw
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
26.07.2018, 17:58
D_Vik, конечно. Но на сколько я понял, ТС уже попробовал использовать глобальные переменные, так что чем не опыт? Вот и пора переходить на что-то посложнее. Кроме того общепринято вообще не использовать глобальные переменные так что зачем? Я считаю, что глобальные переменные - это не то, что стоит попробовать, чтобы заработать опыт.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.07.2018, 17:58
Помогаю со студенческими работами здесь

Как сделать объект класса BindingSource видимым ?
private void Form3_Load(object sender, EventArgs e) { BindingSource BindingSourse_uchastnik = new BindingSource(ds,...

Как лучше всего сделать список
День добрый, прошу помочь с маленькой деталью в курсовом(игра). Есть у меня список RMap = record Name:string; ? end; На...

Как в 1с 8.2 лучше всего сделать начисление амортизации
Как в 1с 8.2 конфигураторе лучше всего сделать начисление амортизации? при каких условиях нужно начислять амортизацию? Я планирую так,...

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

Как лучше всего сделать вывод данных?
Имеется часть кода.Мне нужно два столбца: первый- это название величины, второй - сама величина. Проблема в том, что код получается слишком...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru