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

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

  • s_s

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

    Spritz 20 сентября 2009 г. 14:48

    снова я со сломанными об гранит ооп зубами. пытаюсь написать класс разбирающий урл, и формирующий в зависимости от формата того запрос к БД. схема такая:
    - вычислить сколько частей ("/") в урле. применить соответственно дочерний класс (Url1, Url2 и тд)
    - регулярками узнать что запрашивается - дата, номер или название, запустить соответствующую ф-ию, которая соберёт массив для SQL-строки.
    - полученное чудо передать методу класса Mysql, любезно разобранному в этой теме http://pyha.ru/forum/topic/3394.0
    возможно неправильно поставил задачу, но такая логика пришла на ум, хз…
    class Url
    {
    public $url;
    public $sql=array();
    public $dir=array();
    public $q=array();
    /*вот честно так и не въехал что из этого надо, а что нет??!*/
    //убираем лишнее, урл в массив:
    function clean_url()
    {
    $dir=explode("/", $_SERVER['REQUEST_URI']);
    $dir = Clean_array($dir);//пользовательская, работает!!
    return $dir;
    }
    //сколько частей?
    public function check_url()
    {
    $dir = self::clean_url();
    $u = count($dir);
    switch($u)
    {
    case 1: Url1::parse_url($dir); break;
    case 2: Url2::parse_url($dir); break;
    case 3: Url3::parse_url($dir); break;
    }
    }
    }

    class Url1 extends Url
    {
    public function parse_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])){break;}}
    $sql = self::$k($dir[1]);
    return($sql); //и вот это не возвертается во внешний мир!!
    }

    public function y_m_d($dir)
    {
    $sql=array();
    $sql[] = '*';
    $sql[] = 'articles';
    $sql[] = array(
    'DATE' => $dir);
    $sql[] = 1;
    return $sql;
    }

    function title($dir)
    {
    $sql[] = '*';
    $sql[] = 'articles';
    $sql[] = array(
    'TITLE'=>$dir);
    $sql[] = 1;
    return $sql;
    }
    }
  • Dr.TRO

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

    Spritz 20 сентября 2009 г. 14:52, спустя 4 минуты 54 секунды

    лол же, тыж $dir чистиш если я верно вижу и понимаю, то что ты свитчу передаеш ?!
  • s_s

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

    Spritz 20 сентября 2009 г. 14:55, спустя 2 минуты 56 секунд


    лол же, тыж $dir чистиш если я верно вижу и понимаю, то что ты свитчу передаеш ?!

    массив. проверял print_r нормальный такой массив. ничего лишнего =)
  • artoodetoo

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

    Spritz 20 сентября 2009 г. 14:57, спустя 1 минуту 31 секунду

    ну так ты отследи до какого места доходит. расставляй по пути следования die('опачки') и узнай

    непонятна идея насчет count($dir).
    попробуй принять такое правило: первый сегмент - имя класса, второй - имя метода, все остальное - аргументы метода. тогда все резко упростится
    ιιlllιlllι унц-унц
  • Dr.TRO

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

    Spritz 20 сентября 2009 г. 14:58, спустя 1 минуту 31 секунду

    дай плиз код функции Clean_array
    Спустя 43 сек.

    непонятна идея насчет count($dir).
    норм идея(правда могла бы и лучше быть) он прост считает сколько элемнтов в массиве чтож непонятно, и исходя из этого работает конструкция switch
  • s_s

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

    Spritz 20 сентября 2009 г. 15:15, спустя 16 минут 54 секунды


    ну так ты отследи до какого места доходит. расставляй по пути следования die('опачки') и узнай

    непонятна идея насчет count($dir).
    попробуй принять такое правило: первый сегмент - имя класса, второй - имя метода, все остальное - аргументы метода. тогда все резко упростится

    прослеживаю: $dir - везде присутствует, все переменные видны по всему классу. идея or die('опачки') - проставил, нигде не опачки… просто не возвращает $sql…всё вроде прозрачно и на месте.
    насчёт count - если например url - ццц.сайт.ру/2009/12/ то использовать Url2, если ццц.сайт.ру/2009-12/ то Url1.
    про сегменты можно подробней, кто это?

    апд.
    function Clean_array($array)
    {
    $ret_arr = array();
    foreach($array as $key => $val)
    {
    if (!empty($val))
    {
    $ret_arr[$key] = trim($val);
    }
    }
    return $ret_arr;
    }
  • artoodetoo

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

    Spritz 20 сентября 2009 г. 15:27, спустя 11 минут 20 секунд

    про сегменты - call_user_func_array(array_slice($dir,0,2), $dir)
    я не вникал какая у тебя структура url если честно, просто увидел что ты пишешь роутер. если схема маршрута классическая
    controller/action/arg1/arg2/arg3 - то можно написать простой роутер
    ιιlllιlllι унц-унц
  • Dr.TRO

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

    Spritz 20 сентября 2009 г. 15:37, спустя 10 минут 29 секунд

    гкхм … дядя s_s, вы понемаете что делаете ? вы не то делаете, это уже делаеться mod_rewrite'ом ( вот кусок кода с .htaccess с DLE :
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L]
    ) т.е. просто запрос переправляеться … отличный генератор реврайта вот есть
    Спустя 142 сек.
    алсо после call_user_func_array() ваших всяких и являються php injection'ы
  • s_s

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

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

    artoodetoo, спасибо посмотрел, не вполне осознал надо ли оно мне… задумывал регуляркой проверить что за урл, создать запрос что и от куда извлекать и всё. что [man]call_user_func_array[/man] даст мне?
    структура немного ёбнутая на самом деле. думал в неё всё запихать, что бы без поиска обойтись и по названию и по дате (всех форматов - /гггг-мм-дд/, /гггг-мм/, /гггг/), по возможности все варианты…
    Dr.TRO, не понимаю. я понимаю что велосипеды кончились, но у меня своя бд и свои методы выборки из неё, вот подумалось написать такое. или выбранный способ не имеет права жить? аргументы?
  • Dr.TRO

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

    Spritz 20 сентября 2009 г. 15:49, спустя 2 минуты 39 секунд

    ладно дело твое. ну это по принципу "Мы легких путей в жизне не ищем". так что удачи в разработке целого класса для одного лиш парсинга ссылки (:
  • s_s

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

    Spritz 20 сентября 2009 г. 15:52, спустя 2 минуты 55 секунд

    Dr.TRO, спасибо) честно такая задача и стоит.
  • phpdude

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

    Spritz 20 сентября 2009 г. 16:06, спустя 13 минут 39 секунд


    ладно дело твое. ну это по принципу "Мы легких путей в жизне не ищем". так что удачи в разработке целого класса для одного лиш парсинга ссылки (:
    хули смешного?)

    http://pyha.ru/forum/topic/2392.0
    Сапожник без сапог
  • s_s

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

    Spritz 20 сентября 2009 г. 16:26, спустя 19 минут 58 секунд

    от твоюжж мать, хоть бы пнули что [man]parse_url [/man] существует, а то я её определил… а один хрен не заработало…
  • s_s

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

    Spritz 20 сентября 2009 г. 16:37, спустя 11 минут 1 секунду

    короче я в тупике туплю: массив $sql прекрасно виден в самом методе, но он его не отдаёт!! что за хрень-то?
  • phpdude

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

    Spritz 20 сентября 2009 г. 16:42, спустя 4 минуты 45 секунд

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

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