- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
siv1987, жжете. Все обычное в PHP я и сам знаю. Я спрашиваю за необычное.
Еще раз.
У меня есть 20+ классов. В каждом из классов нужно использовать конфигурацию. Сейчас я использую Registry::$CONF, а вчера это были константы. Подобный синтаксис не очень выгодный и излишне не продуктивный. Поэтому, я решил использовать глобальный массив с настройками и писать просто $CONF. Но тут меня накрыла проблема, чтобы работать с глобальным объектом, нужно перед каждым вызовом в новой подпрограмме писать global.
Какой self? Какой $this? Речь идет о 20+ глобальных классах.
можно написать и global для обычного массива. Но проблема в том, что слишком часто это нужно делать. Вот.
Вы используете функции или методы класса? Какой глобал если вы один раз определяете свойство $this->settings в конструкторе?
Подобный синтаксис не очень выгодный и излишне не продуктивный.
Это вы занимаетесь излишней оптимизации. Тут тяжелый случай...
Но тут меня накрыла проблема, чтобы работать с глобальным объектом, нужно перед каждым вызовом в новой подпрограмме писать global.
Так подсказали же механизм синглтона, где все объекты можно хранить в одном месте.
$this->registry = Registry::getInstance();
$this->settings = $this->registry->getSettings();
$this->DB = $this->registry->DB();
$this->output = $this->registry->Output();
и тд
siv1987, да я уже реализовал наиболее подходящий вариант ООП Registry::$CONF, Registry::$LANG, Registry::$DIR. Но зачем мне ООП для такой дребезени? Зачем мне такой паровоз писать каждый раз? Зачем мне $this, зачем мне self?
Я использую глобальные функции + методы классов, в том числе статические.
Мне нужен многомерный глобальный массив! Я бы готов десять раз написать global $CONF, $LANG, $DIR, но нужно написать раз 500! И при этом не забывать писать это в новых методах. Поэтому я и спросил за эмуляцию глобального массива, такого как GLOBALS, но только со своим именем.
Так а чем тогда тот же $GLOBALS['LANG'] не устраивает? Многомерный, глобальный, канонический со всех ваших точек зрения...
Тем что по сравнению с Registry::$LANG - это шило на мыло. Скажите, что бы вы сами выбрали $LANG или $GLOBALS['LANG']?
Чует мое сердце, в следующей версии PHP, GLOBALS будет Deprecated.
Я использую глобальные функции
Объясните мне что такое глобальные функции и чем они отличаются от прочтых функций? Может в php5.5 что-то новое появилось.
---------- Добавлено 21.05.2013 в 23:26 ----------
Скажите, что бы вы сами выбрали $LANG или $GLOBALS['LANG']?
Ну раз $LANG нельзя, тогда остается $GLOBALS['LANG']
siv1987, это обычные функции, но они используются не в определенном контексте (как в случае с методами), а предназначены для всей программы. Например, парсинг даты со строки (типа, "завтра", "на день рождение + 2 дня"), гибрид multibyte функций с обычными строковыми функциями с автодетекцией нужной. То-есть, я вместо того чтобы каждый раз проверять кодировку, установленный язык, вести кэш, могу просто написать convert_case($string).
А расширение же можно написать? Как-то же делают. Ну может есть какой-то вариант. Уже предлагали автоматом подставлять global, но это может нарушить целостность файлов. Да и вообще как-то криво звучит.
Ладно. Спасибо. :(
ТС, я извиняюсь, но вы ищите не то.
Если у Вас 20+ классов - так в ООП есть наследование
Так же в класса есть конструктор, в котором делаем один раз вызов настроек, и потом в скрипте обращаемся к ним через $this или self
В общем вам не глобальный массив нужно искать, а нормальную структуру скрипта (логику).
bay_ebook, все с логикой у меня нормально. 20 родительских классов. Я использую наследование, но не направо-налево. И причем здесь наследование вообще? Проблема в приставке self, $this, Registry - нужно просто $. Какой конструктор не пиши, что не наследуй, будет либо $this либо self, либо имя класса. Мне нужен доллар. Я разделяю ООП и обычную конфигурацию. А для этого мне нужен глобальный массив. И точка. Понимаете? :)
Вот такое Registry::$LANG['DATE']['DAY_SHORT']['Tue'] или такое $this->LANG->DATE->DAY_SHORT->Tue + еще копирование ссылки на этот объект в __construct это пик дебильности и транжирства ресурсов. Здесь уже никакой кэш не поможет. Это и есть не оптимизированная архитектура. И логика в таком ООП разве только для самой программы, а программист-человек всегда будет путаться в $this. Глобальный объект это не $this. Глобальный объект это вообще не свойство. PHP дает нам отличный $_GET, $_POST. С вашей логикой писали бы Singletone::getInstanse('GET'). Извините меня тоже.
А расширение же можно написать?
Вот до чего доводит человека маниакальная одержимость оптимизации... не там где нужно.
Можно конечно http://habrahabr.ru/post/144582/
Например, парсинг даты со строки (типа, "завтра", "на день рождение + 2 дня"), гибрид multibyte функций с обычными строковыми функциями с автодетекцией нужной.
Угу, и чем же эта "глобальная" пользовательская функция отличается от "обычной" пользовательской функции? Да функции функциям, методы методам, хоть они и объявляются одинаково.
---------- Добавлено 21.05.2013 в 23:51 ----------
еще копирование ссылки на этот объект в __construct это пик дебильности и транжирства ресурсов.
Угу, угу, вы почитаете что такое "global" http://www.php.net/manual/ru/language.references.spot.php. Который вы предлагали юзать в каждом методе.