global раз и навсегда

1 234 5
O
На сайте с 29.05.2008
Offline
195
#21

siv1987, жжете. Все обычное в PHP я и сам знаю. Я спрашиваю за необычное.

Еще раз.

У меня есть 20+ классов. В каждом из классов нужно использовать конфигурацию. Сейчас я использую Registry::$CONF, а вчера это были константы. Подобный синтаксис не очень выгодный и излишне не продуктивный. Поэтому, я решил использовать глобальный массив с настройками и писать просто $CONF. Но тут меня накрыла проблема, чтобы работать с глобальным объектом, нужно перед каждым вызовом в новой подпрограмме писать global.

Какой self? Какой $this? Речь идет о 20+ глобальных классах.

siv1987
На сайте с 02.04.2009
Offline
427
#22
ortegas:
можно написать и global для обычного массива. Но проблема в том, что слишком часто это нужно делать. Вот.

Вы используете функции или методы класса? Какой глобал если вы один раз определяете свойство $this->settings в конструкторе?

ortegas:
Подобный синтаксис не очень выгодный и излишне не продуктивный.

Это вы занимаетесь излишней оптимизации. Тут тяжелый случай...

ortegas:
Но тут меня накрыла проблема, чтобы работать с глобальным объектом, нужно перед каждым вызовом в новой подпрограмме писать global.

Так подсказали же механизм синглтона, где все объекты можно хранить в одном месте.

$this->registry = Registry::getInstance();

$this->settings = $this->registry->getSettings();

$this->DB = $this->registry->DB();

$this->output = $this->registry->Output();

и тд

O
На сайте с 29.05.2008
Offline
195
#23

siv1987, да я уже реализовал наиболее подходящий вариант ООП Registry::$CONF, Registry::$LANG, Registry::$DIR. Но зачем мне ООП для такой дребезени? Зачем мне такой паровоз писать каждый раз? Зачем мне $this, зачем мне self?

Вы используете функции или методы класса?

Я использую глобальные функции + методы классов, в том числе статические.

Мне нужен многомерный глобальный массив! Я бы готов десять раз написать global $CONF, $LANG, $DIR, но нужно написать раз 500! И при этом не забывать писать это в новых методах. Поэтому я и спросил за эмуляцию глобального массива, такого как GLOBALS, но только со своим именем.

siv1987
На сайте с 02.04.2009
Offline
427
#24

Так а чем тогда тот же $GLOBALS['LANG'] не устраивает? Многомерный, глобальный, канонический со всех ваших точек зрения...

O
На сайте с 29.05.2008
Offline
195
#25
Так а чем тогда тот же $GLOBALS['LANG'] не устраивает? Многомерный, глобальный, канонический со всех ваших точек зрения...

Тем что по сравнению с Registry::$LANG - это шило на мыло. Скажите, что бы вы сами выбрали $LANG или $GLOBALS['LANG']?

Чует мое сердце, в следующей версии PHP, GLOBALS будет Deprecated.

siv1987
На сайте с 02.04.2009
Offline
427
#26
ortegas:
Я использую глобальные функции

Объясните мне что такое глобальные функции и чем они отличаются от прочтых функций? Может в php5.5 что-то новое появилось.

---------- Добавлено 21.05.2013 в 23:26 ----------

ortegas:
Скажите, что бы вы сами выбрали $LANG или $GLOBALS['LANG']?

Ну раз $LANG нельзя, тогда остается $GLOBALS['LANG']

O
На сайте с 29.05.2008
Offline
195
#27

siv1987, это обычные функции, но они используются не в определенном контексте (как в случае с методами), а предназначены для всей программы. Например, парсинг даты со строки (типа, "завтра", "на день рождение + 2 дня"), гибрид multibyte функций с обычными строковыми функциями с автодетекцией нужной. То-есть, я вместо того чтобы каждый раз проверять кодировку, установленный язык, вести кэш, могу просто написать convert_case($string).

Ну раз $LANG нельзя, тогда остается $GLOBALS['LANG']

А расширение же можно написать? Как-то же делают. Ну может есть какой-то вариант. Уже предлагали автоматом подставлять global, но это может нарушить целостность файлов. Да и вообще как-то криво звучит.

Ладно. Спасибо. :(

bay_ebook
На сайте с 28.05.2010
Offline
111
#28

ТС, я извиняюсь, но вы ищите не то.

Если у Вас 20+ классов - так в ООП есть наследование

Так же в класса есть конструктор, в котором делаем один раз вызов настроек, и потом в скрипте обращаемся к ним через $this или self

В общем вам не глобальный массив нужно искать, а нормальную структуру скрипта (логику).

Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
O
На сайте с 29.05.2008
Offline
195
#29

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'). Извините меня тоже.

siv1987
На сайте с 02.04.2009
Offline
427
#30
ortegas:
А расширение же можно написать?

Вот до чего доводит человека маниакальная одержимость оптимизации... не там где нужно.

Можно конечно http://habrahabr.ru/post/144582/

ortegas:
Например, парсинг даты со строки (типа, "завтра", "на день рождение + 2 дня"), гибрид multibyte функций с обычными строковыми функциями с автодетекцией нужной.

Угу, и чем же эта "глобальная" пользовательская функция отличается от "обычной" пользовательской функции? Да функции функциям, методы методам, хоть они и объявляются одинаково.

---------- Добавлено 21.05.2013 в 23:51 ----------

ortegas:
еще копирование ссылки на этот объект в __construct это пик дебильности и транжирства ресурсов.

Угу, угу, вы почитаете что такое "global" http://www.php.net/manual/ru/language.references.spot.php. Который вы предлагали юзать в каждом методе.

1 234 5

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий