Идеологический вопрос по ООП

malganus

Новичок
Идеологический вопрос по ООП

Допустим есть 2 класса:
PHP:
class Request {
    var $_anothervar;

    function get_anothervar() {
        ...logic...
        return $this->_anothervar;
    }
}

class PageInfo {
    var $_somevar = null;
    var $_request;

    function PageInfo() {
        $this->_request = new Request();
        $somelocalvar = $this->_request->get_anothervar();
    }

    function get_somevar() {
        ...logic...
        return $this->_somevar;
    }

    function get_anothervar() {
        return $this->_request->get_anothervar();
    }
}
Есть 2 вопроса:

1) Насколько идеологически правильно введение метода get_anothervar() в класс PageInfo, если учесть что класс PageInfo будет использоваться в других объектах и вызов $this->pageinfo->_request->get_anothervar() кажется не таким уж лаконичным ?

2) Какое выражение с идеологической точки зрения правильнее использовать в конструкторе PageInfo:
а) $somelocalvar = $this->_request->get_anothervar(); или
б) $somelocalvar = $this->get_anothervar();
 

ONK

Пассивист PHPСluba
Я бы сказал, что если некий программный код требует от объекта класса PageInfo вызов метода агригированного им объекта класса Request, то было бы более правильным прямое наследование функциональности класса PageInfo классом Request. Хотя в данном случае из названия классов наследование не кажется очень логичным, как впрочем и необходимость в доступе к свойству агригированного объекта.
 

malganus

Новичок
ONK
Объект PageInfo будет использоваться другими объектами, которым потребуется вызов метода объекта Request для получения значение некоторого его свойства. С другой стороны можно было бы использовать оба объекта и PageInfo и Request в "других" объектах, но это не оптимально с точки зрения ресурсов. Тем более известно что других свойств объекта Request не потребуется.

Вообще смысл в том, что объект Request занимается парсингом параметров url, при этом в одном из его свойств содержится информация, которая напрямую касается объекта PageInfo, который содержит информацию о странице.

-~{}~ 23.01.07 07:41:

Автор оригинала: ONK
Я бы сказал, что если некий программный код требует от объекта класса PageInfo вызов метода агригированного им объекта класса Request, то было бы более правильным прямое наследование функциональности класса PageInfo классом Request. Хотя в данном случае из названия классов наследование не кажется очень логичным, как впрочем и необходимость в доступе к свойству агригированного объекта.
К тому же этот public метод служит всего лишь для доступа к protected свойству, ни о какой большей функциональности речи нет.
 

atv

Новичок
С другой стороны можно было бы использовать оба объекта и PageInfo и Request в "других" объектах, но это не оптимально с точки зрения ресурсов.
Так сделай Request синглтоном и обращайся к нему из других объектов напрямую Request::getInstance()->get_anothervar() вместо $this->_request->get_anothervar().
 

malganus

Новичок
Дак он и так синглтоном сделан в реальном приложении. Пример виртуальный и тут вопрос идеологии, а не практики.
 

john.brown

просто кулибин
Так если он в реальном приложении синглетон, то почему в примере он не таковой, и как в таком случае ответить об "идеологически правильном" использовании?

Если синглетон, то "идеологически правильно" как atv написал... :)
 
Сверху