ФорумПрограммированиеPHP для идиотов → Подскажите лузеру как чайнить методы в PHP

Подскажите лузеру как чайнить методы в PHP

  • adw0rd

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

    Spritz 13 ноября 2009 г. 6:10

    Типа:

    class Abc
    {
    public function one ()
    {
    // $str = 'one';
    return $this;
    }

    public function two ()
    {
    // $str = 'two';
    return $this;
    }
    }


    $abc = new Abc;
    echo $abc->one();
    echo $abc->one()->two();


    А мне надо делать что-то типа того:
    echo $abc->all(); // выводи все
    echo $abc->all()->filter(); // выбирает все, потом фильтрует и т.д.


    Немогу догнать :(
    Спустя 64 сек.
    Ясно одно, что надо возвращать объект для того чтобы чайниться… но тогда если возвращается объект только, то как вывести массив из all()?
    Спустя 39 сек.
    Приходит в голову __toString, но вроде как не то
    adw/0
  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 13 ноября 2009 г. 6:25, спустя 14 минут 46 секунд

    class Abc
    {
    private $_last;

    public function all()
    {
    $this->_last = 'str, str';

    return $this;
    }

    public function filter()
    {
    $newResult = $this->_last.'beaver!'; // work with $this->_last;
    $this->_last = $newResult;

    return $this;
    }

    public function __toString()
    {
    return (string) $this->_last;
    }
    }
    А какие проблемы?
  • adw0rd

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

    Spritz 13 ноября 2009 г. 6:29, спустя 4 минуты 21 секунду

    Ewg777, да у меня там словарь в "$_last", однако __toString мне его не возвращает
    Спустя 70 сек.

    $this->_last .= 'beaver!'; // work with $this->_last;
    adw/0
  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 13 ноября 2009 г. 6:35, спустя 6 минут 13 секунд

    $abc = new Abc();
    echo $abc->all()->filter();
    Даёт str, strbeaver!


    $abc = new Abc();
    echo $abc->all(); // выводи все

    str, str

    Или задача в другом?
  • adw0rd

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

    Spritz 13 ноября 2009 г. 6:40, спустя 5 минут 5 секунд

    Блин, реально работает, проверил со словарями, тоже работает, а у меня в приложении не пашет, пойду ковырять свое приложение…
    Ссори за ложный вызов )
    Спустя 173 сек.
    А, не, нихуя, я прогнал ))
    Спустя 26 сек.

    <?php
    class Abc
    {
    private $_last;

    public function all()
    {
    $this->_last = array(1,2,3);
    return $this;
    }

    public function filter()
    {
    $this->_last[] = 777;
    return $this;
    }

    public function __toString()
    {
    return (string) $this->_last;
    }
    }

    $abc = new Abc;
    var_dump($abc->all()->filter());


    Выводит:

    object(Abc)[1]
    private '_last' =>
    array
    0 => int 1
    1 => int 2
    2 => int 3
    3 => int 777
    Спустя 75 сек.
    ибо __toString() вызывается если выводить объект, а мне надо присвоить его в переменную, и в $_last у меня словарь, а не строка
    adw/0
  • adw0rd

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

    Spritz 13 ноября 2009 г. 7:11, спустя 30 минут 45 секунд

    up блядской склейки )
    adw/0
  • Trej Gun

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

    Spritz 13 ноября 2009 г. 7:27, спустя 16 минут 21 секунду

    вызови тустринг явно
  • adw0rd

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

    Spritz 13 ноября 2009 г. 7:57, спустя 29 минут 9 секунд

    CTAPbIu_MABP, я понял что так у меня не получится… васяц сказал заюзать интерфесы, в понедельник попробую
    adw/0
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 13 ноября 2009 г. 9:29, спустя 1 час 32 минуты 39 секунд

    ну я тоже так хотел. В итоге пришлось дополнительный метод get сделать
    <?
    $news = NewsCollection::create()
    ->filterCatedory($_GET['cid'])
    ->filterUser($this->userId)
    ->orderBy('commentsCount', 'DESC')
    ->get('title', 'date_add', 'categoriesId', 'categoriesUrl', 'userName');


    в зависимости от всех этих фильтров и полей, которые нужно вернуть генерируется и выполняется запрос.
  • adw0rd

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

    Spritz 13 ноября 2009 г. 13:24, спустя 3 часа 54 минуты 49 секунд

    Абырвалг, ага, я тоже об этом думаю, типа ->result()


    вызови тустринг явно
    лучше тогда уж свой метод вызывать
    adw/0

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