Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Доступ к внешним переменным/константам внутри класса
Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013 Откуда: Санкт-Петербург
Помог: 6 раз(а)
Это плохая практика.
----- Умные мысли приходят тогда, когда все глупости уже сделаны...
TuX560
Отправлено: 23 Декабря, 2015 - 11:49:33
Гость
Покинул форум
Сообщений всего: 114
Дата рег-ции: Дек. 2015
Помог: 3 раз(а)
Flash_PR пишет:
Это плохая практика.
Буду рад любой критике, не так давно взялся за php, но что в этом плохого? Использование глобальных переменных?
У меня ситуация следующая, написан свой собственный класс для соединения с БД. Что бы он знал куда подключаться использую $config = require_once 'config.php'; после чего в $config находится ассоциативный массив. Теперь мне нужно получить доступ к $config внутри методов класса. Объявлять внутри класса не стал тк в config.php содержится не только конфигурация подключения к БД, но и некоторые другие параметры, которые необходимы для работы других скриптов, поэтому что бы 2 раза не запрашивать config.php, при необходимости соединения с БД в другом скрипте, решил объявить рядом с классом. Прошу сильно за это не пинать, но другого решения пока не нашел, буду рад любым вариантам.
Sail
Отправлено: 23 Декабря, 2015 - 12:08:26
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
TuX560 пишет:
а в чем разница?
Удобнее, однако... И использовать, и искать...
TuX560
Отправлено: 23 Декабря, 2015 - 14:09:25
Гость
Покинул форум
Сообщений всего: 114
Дата рег-ции: Дек. 2015
Помог: 3 раз(а)
Sail пишет:
Удобнее, однако... И использовать, и искать...
Спасибо за ответ, Вы правы, об этом не задумался глядя на свою ситуацию. У себя думаю оставить обращение через глобальный массив, тк в классе обращение идет один раз в конструкторе для инициализации локальной переменной использующей лишь часть массива из $config.
Строитель
Отправлено: 23 Декабря, 2015 - 14:10:56
Участник
Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 74 раз(а)
TuX560 пишет:
а в чем разница?
Никакой разницы нет.
DelphinPRO
Отправлено: 23 Декабря, 2015 - 17:00:47
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Класс должен быть максимально независимым от вне.
В вашем случае он зависит от переменной. Дадут мне ваш код поправить. Посмотрю я на этот global $a; и буду думать, что же за переменная такая, где она объявлена и т.д.
Гораздо лучше передать зависимость внутрь, при создании объекта
Покинул форум
Сообщений всего: 114
Дата рег-ции: Дек. 2015
Помог: 3 раз(а)
DelphinPRO пишет:
Класс должен быть максимально независимым от вне.
В вашем случае он зависит от переменной. Дадут мне ваш код поправить. Посмотрю я на этот global $a; и буду думать, что же за переменная такая, где она объявлена и т.д.
Гораздо лучше передать зависимость внутрь, при создании объекта
Интуитивно я это понимаю, но желание упростить работу с бд и чтобы каждый раз не подключать по 2 файла(один с настройками другой с классом и при создании передавать конфиг) а обойтись
получается такая ерунда... Автозагрузку и пространства имен пока не осилил, особенно запутался с PSR-0, поэтому пока как-то так. Благодарю за пример, когда займусь рефакторингом и оптимизацией по мере изучения php буду иметь ввиду Ваш совет.
Конфигурацию для подключения получаю $config = require_once 'config.php'; рядом с классом, а в config.php примерно следующее:
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
TuX560 пишет:
чтобы каждый раз не подключать по 2 файла
На этот случай есть Автоматическая загрузка классов (Добавление)
Ну да... дочитал вторую часть сообщения...
Но автозагрузка очень сильно облегчает жизнь.
Даже если использовать простенький автолоадер под конкретный проектик...
TuX560
Отправлено: 24 Декабря, 2015 - 13:34:57
Гость
Покинул форум
Сообщений всего: 114
Дата рег-ции: Дек. 2015
Помог: 3 раз(а)
Sail пишет:
Но автозагрузка очень сильно облегчает жизнь.
Даже если использовать простенький автолоадер под конкретный проектик...
Согласен и понимаю это, оборачиваясь назад и рассматривая устройство фреймворка laravel, но в данный момент на полное изучение автозагрузки нет времени, позже обязательно этого коснусь, тк действительно утомляет это постоянное прописывание require везде и всюду, от чего иногда возникают и некоторые глупые ошибки.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.