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 :: Вызов несуществующих методов
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Помог: 17 раз(а)
Появилась интересная мысль для вызова языковых констант (ну может не я один к такой мысли пришёл, но всё же..)
Допустим в движке используются компоненты, модули, плагины. Каждое расширение имеет свой пакет языковых файлов.
Суть в том чтобы сделать единый обработчик без дополнительного подключения необходимых языковых файлов. Ну то есть всё это делать в одном месте.. И при этом воспользоваться допустим __callStatic()
В самом классе соответственно подключаю, запоминаю, оптимизирую, что-то там ещё делаю... и в конечном итоге передаю переменной массив с языковыми данными именно для этого компонента.
Ну и в где-то в коде уже использую
В принципе достаточно просто. Но приходится или в каждой функции/методе создавать переменную с данными или хранить что-то всё в глобальной. Можно конечно сразу всё объединить в одно, например
Вот в качестве эксперимента решил попробовать изобрести более простой "велосипед".
Достаточно просто и человекопонятно.. Вот и спросил на сколько "правильно" использовать магические методы
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Я раньше прям в автолоаде проверял есть ли для вызванного компонента языковой файл в соответствии с настройками локали, и если есть, то подтягивал и докладывал в общак, а в шаблоне было: <?=$language->bla_bla_bla?>
Но потом отказался от этого, и теперь пишу все подгрузки в самих компонентах, ибо только компонент точно должен знать что ему надо и когда надо.
То есть я постоянно загружаю в переменную языковой файл. К использованию глобальных переменных отношусь плохо. Вот и затеял такую штуку.. И Только сам компонент знает свои языковые переменные. Но вот только существует единая "точка" подключения (Добавление)
В принципе вот идея моего велосипеда
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
GoDr пишет:
caballero пишет:
и почему для подключения каких то модулей надо юзать несуществующие методы
для удобства написания и потому что такое возможно...
Да нифига неудобна эта пхп-магия. Для существующих методов/полей IDE предлагает автокомплит, для несуществующих - нужно либо все помнить, либо подсматривать где-то.
----- Чем больше узнаю, тем больше я не знаю.
DeepVarvar
Отправлено: 23 Мая, 2015 - 14:49:44
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
GoDr пишет:
Например
Это хреновастый пример. Откуда вообще в каком-то классе ты делаешь echo?
GoDr пишет:
использованию глобальных переменных
Класс это тоже переменная, а с фабрикой (или чем там еще) так еще и глобальная.
Ну вот смотри как у меня в велосипеде сделано.
Тут можно сказать что костылик, метаю туда-сюда объекты-массивы, но можно было оставить это массивами, просто мне нравится обращение по ключу как имени св-ва.
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Помог: 17 раз(а)
DelphinPRO пишет:
Для существующих методов/полей IDE предлагает автокомплит, для несуществующих - нужно либо все помнить, либо подсматривать где-то.
Согласен. Это один офигенный минус
Но(!) языковые константы всё равно подсматривать придётся.
DeepVarvar, да вот в том то и дело что не хочется постоянно перед выводом подключать нужный язык, хочется сразу на вывод пускать. Расширений для ядра много, иногда они используют языковые константы ядра. И получается что много это этих подключений...
Хотя может это просто "капризы"
а почему языковые файлы ты в PHP-коде хранишь? Как-то принципиально? И почему бы сразу не возвращать массив а объекты? (Добавление)
DeepVarvar пишет:
Это хреновастый пример. Откуда вообще в каком-то классе ты делаешь echo?
почему хреновастый ?
И в классе я не делаю вывод, только возврат.
нужно получить константу, делаю так
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
GoDr пишет:
Но(!) языковые константы всё равно подсматривать придётся.
Тут беда.
мне еще локализацией заниматься не приходилось (в велосипедах), но собираюсь на своем сайтике сделать еще два языка. Так как запоминать лишнее не люблю, планирую сделать нечто такое:
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
GoDr я привел пример в виде php-массива. В такой массив будет считываться языковой файл. А в каком формате он будет - в принципе пофиг. Пока склоняюсь к ini-файлам. (Добавление)
Одно фигово - "лишняя" сущность, в виде класса Lang с константами из примера. Но зато автокомплит. =)
----- Чем больше узнаю, тем больше я не знаю.
GoDr
Отправлено: 25 Мая, 2015 - 13:22:27
Посетитель
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Помог: 17 раз(а)
DelphinPRO пишет:
Пока склоняюсь к ini-файлам.
Я в своё время проводил тесты: ini-файлов, констант и т.п.
Пришёл к выводу что INI лучше. Скорость подгрузки и преобразования в массив сумасшедшая, по сравнению с загрузкой констант. Но приходится жертвовать памятью.
Дума ещё над JSON, формат гибче, но очень критичен к ошибкам синтаксиса, вообще всё перестаёт работать ))))
НУ так вернёмся к самому вопросу.. На сколько правильно всё таки таким образом использовать магические методы? Т.е. получается я принудительно их вызываю. С другой стороны PHP это разрешает
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.