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

непонятки с ООП

  • adw0rd

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

    Spritz 22 января 2010 г. 1:50, спустя 1 час 29 минут 1 секунду

    Одного суицидника спасли….
    adw/0
  • NRG

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

    Spritz 22 января 2010 г. 2:52, спустя 1 час 2 минуты 39 секунд


    Просто здесь другой прикол, каждый видит мир по своему, у кого-то страница - может все, а кто ее так не видит. Кто-то видит, что страница - это лишь страница, а кто-то говорит - она разбита на блоки, а кто-то добавит: "о у страницы есть заголовок".
    нео, на самом деле ложки не существует =)
  • mario

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

    Spritz 22 января 2010 г. 3:40, спустя 47 минут 52 секунды



    mario, если бы я мог тебе дать совет, как человек опытный, я бы сказал, смотри на свою программу или приложение, как микроотображение объектов реального мира, это я считаю главным. Но опыта нет и я не хуя не понимаю еще, по этому могу ошибаться.
    Спустя 205 сек.
    нельзя удалять сообщения, так нечестно
    хороший рассказ, мне понравилось.
    Я и посмотрел на объект Page как на реальный объект этого мира… у меня это и вышло…
    PS скоро в принципе скину полученный код… глянемс :)
  • krasun

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

    Spritz 22 января 2010 г. 3:45, спустя 4 минуты 58 секунд

    NRG, а для кого-то она существует, но мы то знаем, что ее нет, ну да ладно =)
  • Trej Gun

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

    Spritz 22 января 2010 г. 4:05, спустя 19 минут 35 секунд

    бля 6 страниц нафлудили
  • Trej Gun

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

    Spritz 22 января 2010 г. 4:39, спустя 34 минуты 1 секунду


    Одного суицидника спасли….


    ололо

    krasun, ложки точно нет

    по поводу
    class A{
    private $id;
    private $description;
    public function setID ($id) {
    $this->id = $id;
    }
    public function __call($name){ // name=getDescription
    $var = strtolower(substr($name,0,2));
    return this->{$var};
    }
    }


    объясняю подробнее


    class Page{
    private $id;
    private $page; // array

    public function __construct($id){
    $this->setId($id);
    }

    private load(){ // lazy load
    if(!$this->id)
    throw new PageExeprion();
    // логика по извлечению страницы из бд или откуда то там
    $this->page = Registry::get("DB")->fetch("SELECT * from pages WHERE id ={$id}")
    }

    public function __call($name, $arguments){
    // тут $name это имя вызванного метода, $arguments аргументы
    // унифицируем строку
    $name = strtolower($name);
    // смотрим что за метод сеттер или геттер
    $setget = substr($name,0,3);
    // получаем имя свойства
    $prop = substr($name,3);
    if ($setget = 'set') {
    // если такое свойство есть в объекте сетим его прямо в объект
    if(in_array($prop, get_object_vars($this)))
    $this->{$prop} = $arguments[0];
    // если нет то в страницу
    else
    $this->page[$name] = $arguments[0];
    } else {
    // если это геттер то отдаем то что просили, можно проверить может это свойство объекта но мне лень
    if (!$this->page)
    $this->load();
    return this->page[$name];
    }
    }
    }

    // работает так

    class Action{

    public function doAction(){
    $id = Get::from::url::id();
    $page = new Page($id);
    $this->tpl->assign("title",$page->getTitle())
    }
    }


  • mario

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

    Spritz 22 января 2010 г. 4:42, спустя 3 минуты 28 секунд



    Одного суицидника спасли….


    ололо

    krasun, ложки точно нет

    по поводу
    class A{
    private $id;
    private $description;
    public function setID ($id) {
    $this->id = $id;
    }
    public function __call($name){ // name=getDescription
    $var = strtolower(substr($name,0,2));
    return this->{$var};
    }
    }


    объясняю подробнее


    class Page{
    private $id;
    private $page; // array

    public function __construct($id){
    $this->setId($id);
    }

    private load(){ // lazy load
    if(!$this->id)
    throw new PageExeprion();
    // логика по извлечению страницы из бд или откуда то там
    $this->page = Registry::get("DB")->fetch("SELECT * from pages WHERE id ={$id}")
    }

    public function __call($name, $arguments){
    // тут $name это имя вызванного метода, $arguments аргументы
    // унифицируем строку
    $name = strtolower($name);
    // смотрим что за метод сеттер или геттер
    $setget = substr($name,0,3);
    // получаем имя свойства
    $prop = substr($name,3);
    if ($setget = 'set') {
    // если такое свойство есть в объекте сетим его прямо в объект
    if(in_array($prop, get_object_vars($this)))
    $this->{$prop} = $arguments[0];
    // если нет то в страницу
    else
    $this->page[$name] = $arguments[0];
    } else {
    // если это геттер то отдаем то что просили, можно проверить может это свойство объекта но мне лень
    if (!$this->page)
    $this->load();
    return this->page[$name];
    }
    }
    }

    // работает так

    class Action{

    public function doAction(){
    $id = Get::from::url::id();
    $page = new Page($id);
    $this->tpl->assign("title",$page->getTitle())
    }
    }

    спасибо!
  • Givi

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

    Spritz 22 января 2010 г. 4:46, спустя 4 минуты 12 секунд

    kostyl, ты говоришь делать как тебе удобней, никого особо не слушать и тут же советуешь Макконнелла. Непорядочек получается.
    Хотя, его не читал, спорить не стану.
    В целом, у меня с ООП пока трудности, но примерное понимание некоторых вещей (для какого хуя и почему/как они есть) уже появилось.

    mario, относительно твоего примера со страницами (типа это все страницы), то тут у меня своё видение: они-то страницы, но отображаются по-разному (ну это ты можешь замутить в классе нужного тебе отображения). Но вот тут, по сути, и нужно делить на "выборка данных" и "их обработка". А прикол в том, что выборка данных практически всегда будет одинаковой для одного типа страниц, но вот отображение будет уже разное, вплоть до отображения страницы БЛОГА в случае авторизированности и в случае гостевого доступа (либо же в случае отображения этой только части этой страницы блоком в другой странице). В общем, тут лучше пробовать делить на мелкие куски, и из них собирать нужное тебе. Тогда ты сможешь использовать один маленький кусочек для многих задач (например, тот же метод getPageTitle будет использоватся везде, а вот getPageTreeChildren будет юзатся только в случае такого типа, где могут быть "дети").

    Хуй знает понятно ли сказал. Просто сейчас работаю с классом, написанном непонятно нахуй, потому как все, по сути, идет как обычная процедурная обработка… вот только из-за того, что работаешь через объект, то возникают проблеми. И при этом нет тех плюсов, которые дают нам классы, потому как написано оно неправильно  совсем.
    Спустя 90 сек.
    CTAPbIu_MABP, и от меня спасибо - я даже кой-чего понял тута полезного для себя :)
  • Trej Gun

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

    Spritz 22 января 2010 г. 4:55, спустя 8 минут 19 секунд

    смотрю на то что я написал и понимаю

    я люблю JAVA
  • md5

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

    Spritz 22 января 2010 г. 5:41, спустя 46 минут 31 секунду

    CTAPbIu_MABP, главное, чтобы это было взаимно :)
    все умрут, а я изумруд
  • kostyl

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

    Spritz 22 января 2010 г. 5:46, спустя 4 минуты 28 секунд


    kostyl, ты говоришь делать как тебе удобней, никого особо не слушать и тут же советуешь Макконнелла. Непорядочек получается.

    Макконелла надо прислушиваться, всё равно рано или поздно поймешь что он прав в большинстве случаев.
  • Абырвалг

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

    Spritz 22 января 2010 г. 16:51, спустя 11 часов 5 минут 6 секунд

    Есть у меня вывод всех записей блога из всех категорий. Разбиваю постранично. В page_title нужно указывать страницу.

    Есть методы:
    renderPages();
    getEntries();
    getEntriesCount(); // этот метод нужно обязательно стартануть, без него страницы не посчитаются

    В каком методе устанавливать page_title? как это дело закешировать?
  • phpdude

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

    Spritz 22 января 2010 г. 16:56, спустя 5 минут 29 секунд

    как это дело закешировать?


    как кеш акешировать а то при кеше он не кешируется?
    эм … чтото такое у меня от этого вопроса возникло
    Спустя 27 сек.
    нахуй кешировать page_title? ведь это колонка таблицы, коорую ты при запросе достаешь …
    Сапожник без сапог
  • Абырвалг

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

    Spritz 22 января 2010 г. 17:00, спустя 3 минуты 21 секунду

    это не колонка. Это <title>

    Template::setData('page_title', 'Коллективные блоги - страница ' . $this->pagina->getCurrentPage() . ' - название сайта');
  • phpdude

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

    Spritz 22 января 2010 г. 17:05, спустя 5 минут 24 секунды

    нахуй его кешировать? не будь так параноидален)
    Спустя 14 сек.
    хы в куки закешируй
    Сапожник без сапог

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