PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (30): « 1 2 3 4 [5] 6 7 8 9 ... » В конец

> Найдено сообщений: 446
GoDr Отправлено: 25 Мая, 2015 - 17:00:52 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
Что-то я не подумал вообще об этом Хм
такая таблица существует и именно для этого создана, т.е. на какой странице (в какой категории или в каком компоненте) какой модуль подключать (выводить). Хоть это и отвлечение от темы, но зато тема для нового "велосипеда" Радость
GoDr Отправлено: 25 Мая, 2015 - 16:15:41 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
ну в принципе все файлы весят не больше 300кб Улыбка

И опять же ушли от темы )))) Но видно никто таким образом не использует магические свойства )))
(Добавление)
LIME пишет:
хотя подозреваю что у тебя просто нет механизма включения
Да всё есть Радость
GoDr Отправлено: 25 Мая, 2015 - 15:58:15 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
Что-то мы о разном наверное.. Что значит отключить? Во-первых, файлы то остаются, если все языковые файлы подключать. А во-вторых, ну так модуль может отображаться на одной странице, но не будет выводиться на другой. Так же и всякие компоненты и плагины..
GoDr Отправлено: 25 Мая, 2015 - 15:49:48 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
LIME пишет:
или ты о незадейственных модулях?
Ну конечно Улыбка
GoDr Отправлено: 25 Мая, 2015 - 15:39:39 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
LIME пишет:
Тем более ничего кроме лаконичности вызова данный способ не дает
Ну если это не ухудшает производительность и не кушает лишней памяти, то именно для этого и задумал Улыбка Что касается занимать магическое свойство, ну в данном случае оно и не нужно для других целей Радость

LIME пишет:
Ну и при генерации можно обходить все языковые файлы вообще
А не
слишком ли накладно получится? Может всё таки подключать только то что используется?
У меня в проекте под сотню языковых файлов
GoDr Отправлено: 25 Мая, 2015 - 13:22:27 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
DelphinPRO пишет:
Пока склоняюсь к ini-файлам.
Я в своё время проводил тесты: ini-файлов, констант и т.п.
Пришёл к выводу что INI лучше. Скорость подгрузки и преобразования в массив сумасшедшая, по сравнению с загрузкой констант. Но приходится жертвовать памятью.
Дума ещё над JSON, формат гибче, но очень критичен к ошибкам синтаксиса, вообще всё перестаёт работать ))))

НУ так вернёмся к самому вопросу.. На сколько правильно всё таки таким образом использовать магические методы? Т.е. получается я принудительно их вызываю. С другой стороны PHP это разрешает Радость

PS
DeepVarvar пишет:
GoDr пишет:
делаю так
Да, через лишнюю сущность.
Кстати, что это значит?
GoDr Отправлено: 25 Мая, 2015 - 08:26:39 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
DelphinPRO, у тебя языковой файл в каком формате будет?
GoDr Отправлено: 24 Мая, 2015 - 20:36:38 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
DeepVarvar пишет:
Ты код пишешь или в игрушки играешь? Это твоя прямая обяза -- следить за зависимостями.
ну так расширения и сторонние же бывают.. Как подключить всем известно, но что там в ядре твориться уже не их забота Улыбка

DeepVarvar пишет:
И как их мержить?
А зачем тогда в PHP-файла? Избыточного кода то сколько..
GoDr Отправлено: 24 Мая, 2015 - 08:38:37 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
DelphinPRO пишет:
Для существующих методов/полей IDE предлагает автокомплит, для несуществующих - нужно либо все помнить, либо подсматривать где-то.
Согласен. Это один офигенный минус Улыбка
Но(!) языковые константы всё равно подсматривать придётся.

DeepVarvar, да вот в том то и дело что не хочется постоянно перед выводом подключать нужный язык, хочется сразу на вывод пускать. Расширений для ядра много, иногда они используют языковые константы ядра. И получается что много это этих подключений...
Хотя может это просто "капризы" Радость

а почему языковые файлы ты в PHP-коде хранишь? Как-то принципиально? И почему бы сразу не возвращать массив а объекты? Улыбка
(Добавление)
DeepVarvar пишет:
Это хреновастый пример. Откуда вообще в каком-то классе ты делаешь echo?
почему хреновастый ? Радость
И в классе я не делаю вывод, только возврат.
нужно получить константу, делаю так
PHP:
скопировать код в буфер обмена
  1. $qqq = LibLang::_('COM_XMAP_SITEMAP_MES_0');

нужно вывести делаю так
PHP:
скопировать код в буфер обмена
  1. echo LibLang::_('COM_XMAP_SITEMAP_MES_0');
GoDr Отправлено: 23 Мая, 2015 - 09:37:47 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
DeepVarvar пишет:
Но потом отказался от этого, и теперь пишу все подгрузки в самих компонентах, ибо только компонент точно должен знать что ему надо и когда надо.
Так я тоже так делаю, вот только смущает большое количество избыточного кода. Например,

PHP:
скопировать код в буфер обмена
  1. class MyClass
  2. {
  3.     public function AAA()
  4.     {
  5.         $lang = LibLang::getLang('MyClass');
  6.         // .................................
  7.         echo $lang['AAA1'];
  8.         // .................................
  9.         echo $lang['AAA2'];
  10.     }
  11.  
  12.     public function BBB()
  13.     {
  14.         $lang = LibLang::getLang('MyClass');
  15.         // .................................
  16.         echo $lang['AAA3'];
  17.         // .................................
  18.         echo $lang['AAA4'];
  19.     }
  20. }


То есть я постоянно загружаю в переменную языковой файл. К использованию глобальных переменных отношусь плохо. Вот и затеял такую штуку.. И Только сам компонент знает свои языковые переменные. Но вот только существует единая "точка" подключения
(Добавление)
В принципе вот идея моего велосипеда

сам класс обработки
PHP:
скопировать код в буфер обмена
  1. // корень файлов
  2. define('_LPATH_ROOT', __DIR__);
  3.  
  4. // абсолютный путь до каталога с языковыми файлами
  5. define('_LPATH_LANG', _LPATH_ROOT . '/languages');
  6.  
  7. // определение языка
  8. define('_LANG_NAME', 'ru');
  9.  
  10.  
  11. class LibLang
  12. {
  13.     /** @var array Массив Ключ-Значение */
  14.     public static $language = array();
  15.  
  16.     public static function _($str, $expansion = null)
  17.     {
  18.         // получам имя расширения если не задано
  19.         if (empty($exp)) {
  20.             $tmp = explode('_', $str);
  21.             if (isset($tmp[0]) and isset($tmp[1])) {
  22.                 $expansion = strtolower($tmp[0]) . '.' . strtolower($tmp[1]);
  23.             }
  24.         }
  25.  
  26.         // Проверяем подключено ли это расширение и подключаем если нет
  27.         if (array_search($expansion, self::$language) === false) {
  28.  
  29.             // Путь до языкового файла
  30.             $path_lang = _LPATH_LANG . '/' . _LANG_NAME . '/' . $expansion . '.lang.ini';
  31.  
  32.             // подгружаем языковой файл
  33.             if (is_readable($path_lang)) {
  34.                 $lang_ini = parse_ini_file($path_lang);
  35.                 self::$language[$expansion] = $lang_ini;
  36.             }
  37.         }
  38.  
  39.         // возвращаем значение языковой константы
  40.         if (isset(self::$language[$expansion][$str])) {
  41.             return self::$language[$expansion][$str];
  42.         } else {
  43.             return $str;
  44.         }
  45.     }
  46. }


вот вызовы
PHP:
скопировать код в буфер обмена
  1. echo LibLang::_('COM_XMAP_SITEMAP_MES_0');
  2. echo LibLang::_('COM_XMAP_SITEMAP_MES_1');
  3. echo LibLang::_('LIB_DATETIME_MONTH_NAME_R');
  4. echo LibLang::_('DATETIME_MONTH_NAME_R');


Получается довольно кратко и понятно. Если хочешь просто получать константу, то имя задаёшь по правилам, если нет, то можно задать и имя компонента
GoDr Отправлено: 22 Мая, 2015 - 13:14:44 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
caballero пишет:
каким боком вообще связаны языки и методы
Странный вопрос.. каким образом буквы связаны со словами? Да никаким, просто одно часть другого..

caballero, ты сразу в коде пишешь фразы/слова/буковки или всё же через константы и уже потом вставляешь в код?

caballero пишет:
и почему для подключения каких то модулей надо юзать несуществующие методы
для удобства написания и потому что такое возможно...


Сейчас есть языковой файл для компонента ComXMap, допустим такое (INI-файл)
CODE (htmlphp):
скопировать код в буфер обмена
  1. XMAP_NAME = "Карта сайта"
  2. XMAP_CONFIG = "Настройки"
  3. XMAP_LINK = "Ссылки"
  4. XMAP_MAP = "Создать SITEMAP.XML"
  5. XMAP_BASIC_SETTINGS = "Основные настройки"
  6. XMAP_VIEW_ARTICLE = "показывать материалы"


Для использования языка подключаю обработчик
PHP:
скопировать код в буфер обмена
  1. $lang = LibLang::getLang('ComXMap');


В самом классе соответственно подключаю, запоминаю, оптимизирую, что-то там ещё делаю... и в конечном итоге передаю переменной массив с языковыми данными именно для этого компонента.
Ну и в где-то в коде уже использую
PHP:
скопировать код в буфер обмена
  1. echo $lang['XMAP_VIEW_ARTICLE'];


В принципе достаточно просто. Но приходится или в каждой функции/методе создавать переменную с данными или хранить что-то всё в глобальной. Можно конечно сразу всё объединить в одно, например
PHP:
скопировать код в буфер обмена
  1. echo LibLang::getLang('ComXMap', 'XMAP_VIEW_ARTICLE');

ну или использовать какой-то сокращённый вариант
CODE (htmlphp):
скопировать код в буфер обмена
  1. echo _lang('ComXMap', 'XMAP_VIEW_ARTICLE');
  2. .....
  3. function _lang(){
  4.     return LibLang::getLang('ComXMap', 'XMAP_VIEW_ARTICLE');
  5. }
  6.  


Вот в качестве эксперимента решил попробовать изобрести более простой "велосипед".
Достаточно просто и человекопонятно.. Вот и спросил на сколько "правильно" использовать магические методы
GoDr Отправлено: 22 Мая, 2015 - 12:09:42 • Тема: Вызов несуществующих методов • Форум: Объектно-ориентированное программирование

Ответов: 35
Просмотров: 4909
Появилась интересная мысль для вызова языковых констант (ну может не я один к такой мысли пришёл, но всё же..)

Допустим в движке используются компоненты, модули, плагины. Каждое расширение имеет свой пакет языковых файлов.

Суть в том чтобы сделать единый обработчик без дополнительного подключения необходимых языковых файлов. Ну то есть всё это делать в одном месте.. И при этом воспользоваться допустим __callStatic()

Допустим есть библиотека-обработчик
PHP:
скопировать код в буфер обмена
  1. class LibLang{
  2.     public static function __callStatic($name, $arguments){
  3.         //.................
  4.         //.................
  5.         //.................
  6.     }
  7. }
  8.  


Допустим используем какой-то компонент и делаем вызов языковой константы
PHP:
скопировать код в буфер обмена
  1. echo LibLang::ComMyExt('QQQ_WWW');
  2. echo LibLang::ComMyExt('AAA_SSS');


Соответственно такого метода нет и будет вызван __callStatic(). Ну и всё остальное будем подключать и делать уже в этом методе.

А суть вопроса простая.. На сколько это вообще "правильно"?
GoDr Отправлено: 20 Апреля, 2015 - 20:59:28 • Тема: XML to JSON • Форум: XML и его обработка

Ответов: 2
Просмотров: 1029
ну что не всегда возможно, не думаю... есть некоторые непонятки как в моём примере. Но возможно же Улыбка

А вот насчёт "глупо"... почему?
GoDr Отправлено: 20 Апреля, 2015 - 19:57:05 • Тема: XML to JSON • Форум: XML и его обработка

Ответов: 2
Просмотров: 1029
Перевожу одну спецификацию, вернее создаю свою на основе некоторых. Но все спецификации W3C написаны на XML Schema. В принципе проблем нет, но есть тонкие места которые не могу понять как сделать.

Например есть такое (пример данных)
CODE (htmlphp):
скопировать код в буфер обмена
  1. <root>
  2.     <date calendar="Gregorian">
  3.         11 MAR 2014
  4.     </date>
  5.     <date calendar="Gregorian" qualifiers="BEF">
  6.         12 MAR 2014
  7.     </date>
  8.     <date christ="B.C.">
  9.         13 MAR 2014
  10.     </date>
  11.     <date>
  12.         14 MAR 2014
  13.     </date>
  14. </root>


Как видно есть необязательные атрибуты. Указывать их все просто не разумно, исходный код получится очень большой, да и читаемость ухудшиться..

Как это лучше реализовать?

Нашёл что некоторые online-конверторы это делают так
CODE (htmlphp):
скопировать код в буфер обмена
  1. {
  2.     "root": {
  3.         "date": [
  4.             {
  5.                 "_calendar": "Gregorian",
  6.                 "__text": "11 MAR 2014"
  7.             },
  8.             {
  9.                 "_calendar": "Gregorian",
  10.                 "_qualifiers": "BEF",
  11.                 "__text": "12 MAR 2014"
  12.             },
  13.             {
  14.                 "_christ": "B.C.",
  15.                 "__text": "13 MAR 2014"
  16.             },
  17.             "14 MAR 2014"
  18.         ]
  19.     }
  20. }


или так
CODE (htmlphp):
скопировать код в буфер обмена
  1. {
  2.   "root": {
  3.     "date": [
  4.       {
  5.         "-calendar": "Gregorian",
  6.         "#text": "11 MAR 2014"
  7.       },
  8.       {
  9.         "-calendar": "Gregorian",
  10.         "-qualifiers": "BEF",
  11.         "#text": "12 MAR 2014"
  12.       },
  13.       {
  14.         "-christ": "B.C.",
  15.         "#text": "13 MAR 2014"
  16.       },
  17.       "14 MAR 2014"
  18.     ]
  19.   }
  20. }

Вот только на сколько это верно, вернее приемлемо
GoDr Отправлено: 04 Апреля, 2015 - 12:26:44 • Тема: Как спарсить ссылки с сайта • Форум: Вопросы новичков

Ответов: 20
Просмотров: 5674
DeepVarvar, так задача какая? Какая цель парсить ссылки всего сайта? Радость Если это мой сайт, то есть более гуманные методы.. А тут человек хочет создать конкурента гугла или яндекса ))))) И для таких целей даже библиотек будет мало

Страниц (30): « 1 2 3 4 [5] 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB