ФорумПрограммированиеPHP для идиотов → опять классы и объекты

опять классы и объекты

  • s_s

    Сообщения: 61 Репутация: N Группа: Кто попало

    Spritz 20 сентября 2009 г. 13:49, спустя 7 минут 3 секунды


    s_s, ты хоть знаешь какой функцией то обрабатывается твои данные? self::$k( ..хуйна =)

    ога. знаю))) регулярки работают в цикле проверял. например урла "2000-01-01" запускает y_m_d(). только вот потом ничего.
    echo $k

    например впендюривал, всё верно. и в самой y_m_d() $sql прекрасно виден, распечатывается. а дальше них…
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 22 сентября 2009 г. 1:06, спустя 1 день 11 часов 17 минут

    s_s, тебе надо спланировать свою работу. задача не должна ставиться как "подсчитать количество сегментов".
    ты просто распиши себе и нам заодно варианты адресов и к ним пары - какие действия хочешь выполнить по этим адресам.
    а мы посоветуем разные варианты.
    ιιlllιlllι унц-унц
  • s_s

    Сообщения: 61 Репутация: N Группа: Кто попало

    Spritz 22 сентября 2009 г. 8:42, спустя 7 часов 35 минут 49 секунд

    попробуем-с… по структуре походит на периодическое издание, как газета или журнал. То есть: номер каждый месяц, н-ое кол-во страниц в номере.

    /ID/ #у каждого материала есть номер id
    /TITLE/ #уникальное название материала
    /NN/ #номер (каждый месяц - №)
    /YYYY/ #материалы за год
    /YYYY-MM/ #то же что и №
    /YYYY-MM-DD/ #материал по точной дате, если есть.
    /NN/PN/ #страница номера
    /YYYY-MM/PN/ #то же самое.

    по минимуму так, но можно ещё намутить, что бы не было надобности в поиске по авторам например…
    ЗЫ может Dr.TRO прав, тут не стоит класс мудрить а просто функцию-мутанта написать?
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 22 сентября 2009 г. 9:22, спустя 40 минут 20 секунд

    ok.
    непонятно как отличить /ID/ , /NN/,  /YYYY/. во всех случаях это числа? если про год можно предположить что он из 4 цифр, то что мешает "номеру" и "ид" быть тоже четырёхзначными? разве такое невозможно? нужно какое-то уточнение… поэтому до поры оставим только один из этих вариантов - ID.

    мне кажется логичным буквально описать пары шаблон-обработчик в массиве правил.
    предложу алгоритм, это конечно не единственный вариант, но он "легко читабельный" и "легко расширяемый" когда понадобится.
    я нарочно не буду вдаваться в лишние детали. можно в виде класса, можно оптимизировать - пофигу на самом деле. алгоритм не меняется.

    $rules = array(
    '#/^(\d+)/$#' => 'byId',
    '#/^(\w+)$/$#' => 'byTitle',
    '#/^(\d\d\d\d-\d\d)$/#' => 'byMonth',
    '#/^(\d\d\d\d-\d\d-\d\d)$/#' => 'byMonth',
    '#/^(\d\d)/(\d+)/$#' => 'byIdAndPage',
    '#/^(\d\d\d\d-\d\d)/(\d+)/$#' => 'byMonthAndPage'
    );

    $func = null;
    foreach ($rules as $rule => $f)
    if (preg_match_all($rule, $uri, $matches))
    {
    $func = $f;
    break;
    }
    if ($func)  $sql = call_user_func_array($func, $matches);
    else die('Wrong');

    я не запускал пример, здесь могут быть опечатки, надеюсь суть понятна
    надо уточнять набор правил.
    phpdude давал тебе ссылку на тему, где в итоге получился красивый класс примерно с похожим алгоритмом
    ιιlllιlllι унц-унц
  • Dr.TRO

    Сообщения: 254 Репутация: N Группа: Адекваты

    Spritz 22 сентября 2009 г. 9:41, спустя 19 минут 9 секунд

    алсо учитываем что byTitle исключительно бувы англ быть должны)
  • s_s

    Сообщения: 61 Репутация: N Группа: Кто попало

    Spritz 22 сентября 2009 г. 10:08, спустя 27 минут 12 секунд

    artoodetoo, понятно, примерно то же я и делал, только [man]eregi[/man], можно ей тоже возвращать вхождения и использовать…

    $ER = array(
    'y_m_d' => "^20([0-9]{2})-([01][0-9])-([0-3][0-9])$",
    'y_m' => "^20[0-9]{2}-[01][0-9]$",
    'y' => "^20[0-9]{2}$",
    'num' => "N[1-9][0-9]*",
    'title' => "[:alnum:]*");
    foreach($ER as $k=>$v)
    {if(eregi($v, $dir[1])){break;}}
    $sql = self::$k($dir[1]);
    return($sql); //всё у меня работало, кроме возврата. тут-то и беда - недопонимания как енти классы работают, что и где возвращают??

    можно конечно забить на класс и просто функцию написать, с этим пожалуй справлюсь, спасибо!
    беспокоит то что классы вообще тяжко даются, глобально-то хотелось бы в них разобраться, это так, частный случай был… может есть что почитать именно по классам-объектам в пхп? сколько не гуглил - в рунете всё одно и то же, из учебников лучше всего "Э. Гутманс, Ст.Баккен, В. Ретанс - РНР" ситуацию прояснили, но как видно не до конца… английскую лит-ру хз, тут по русски-то не всегда въезжаешь, ниасилю пожалуй.
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 22 сентября 2009 г. 11:16, спустя 1 час 7 минут 26 секунд

    $sql=… надо делать ДО break иначе ты не отлавливаешь ситуацию когда ничего не подошло!
    Спустя 52 сек.
    почитать ничего не могу посоветовать. тут есть пункт меню "Библиотека" посмотри что там по теме
    ιιlllιlllι унц-унц
  • s_s

    Сообщения: 61 Репутация: N Группа: Кто попало

    Spritz 22 сентября 2009 г. 11:49, спустя 32 минуты 54 секунды


    $sql=… надо делать ДО break иначе ты не отлавливаешь ситуацию когда ничего не подошло

    не, не то…
    сделал:
     public function parsing_url($dir)
    {
    $ER = array(
    'y_m_d' => "^20([0-9]{2})-([01][0-9])-([0-3][0-9])$",
    'y_m' => "^20[0-9]{2}-[01][0-9]$",
    'y' => "^20[0-9]{2}$",
    'num' => "N[1-9][0-9]*",
    'title' => "[:alnum:]*");
    foreach($ER as $k=>$v)
    {if(eregi($v, $dir[1])){$sq = self::$k($dir[1]); return $sq; break;}}
    }
    public function y_m_d($dir)
    {
    $sql[] = '*';
    $sql[] = 'articles';
    $sql[] = array(
    'DATE' => $dir);
    $sql[] = 1;
    return $sql;
    }

    ничего не выходит. нуль. в самом классе видна.
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 22 сентября 2009 г. 11:54, спустя 5 минут 19 секунд

    ничего не выходит.

    ну видимо ничего не находит :) после foreach(){} поставь die('опачки');

    и удали break :)
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 22 сентября 2009 г. 12:38, спустя 44 минуты 16 секунд

    забудь про ereg он устарел морально и физически
    Сапожник без сапог
  • s_s

    Сообщения: 61 Репутация: N Группа: Кто попало

    Spritz 22 сентября 2009 г. 12:46, спустя 7 минут 42 секунды


    ничего не выходит.

    ну видимо ничего не находит :) после foreach(){} поставь die('опачки');

    и удали break :)

    ничего не изменилось что-то… а что ожидалось?

    забудь про ereg он устарел морально и физически

    ну, хз, это уже какие-то тонкости мне пока недоступные))
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 22 сентября 2009 г. 12:49, спустя 2 минуты 59 секунд

    s_s, читай - http://ru.php.net/ereg

    This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.
    Сапожник без сапог
  • s_s

    Сообщения: 61 Репутация: N Группа: Кто попало

    Spritz 22 сентября 2009 г. 12:54, спустя 5 минут 21 секунду

    This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.

    блять, я растроен(( сволочи!!!1
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 22 сентября 2009 г. 13:00, спустя 5 минут 47 секунд

    s_s, а чо расстраиваться то? preg_* остались же :)

    я за убивание этих функций по простой причине - у них даже namespace'а нет .. ereg, split … фу срань, хер пойммешь откуда и к чему относится, многие вообще не знают что split - регулярные выражения обрабатывает, думают что строки
    Сапожник без сапог
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 22 сентября 2009 г. 13:02, спустя 1 минуту 56 секунд

    а некотореы даже о существовании split не догадываются…
    все умрут, а я изумруд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!