как вызывать в классах-контроллерах свойства класса?

Духовность™

Продвинутый новичок
как вызывать в классах-контроллерах свойства класса?

Вопрос из разряда "как писать красиво", хотя вопрос и не лишён практической основы.

Пример.

Есть класс-контроллер. У него есть свойство, не важно какое, но в данном случае - request, обозначающее объект запроса. Получается оно соответственно так:
PHP:
$this->request->getCookie()->var
Т.е. это свойство постоянно используется, оно - рабочий инструмент фреймворка.

Вопрос: стоит ли его получат в самом классе контроллера через get-метод, типа как
PHP:
$this->getRequest()->getCookie()->var
?

Почему собственно спрашиваю. У меня так же в контроллере есть метод getCurrentUser() возвращающий объект текущего пользователя - я всегда получаю объект пользователя через метод, а не через свойство, т.к.в методе инкапсулирована логика:

PHP:
protected function getCurrentUser()
{
    if (null === $this->current_user)
    {
        $this->loadCurrentUser();
    }

    return $this->current_user;
}
Боюсь, что в один прекрасный день потребуется, например, изменить имя свойства класса request или делать какую-то логику перед получением объекта запроса. Тогда, очевидно, придется исправлять вызовы свойства напрямую на вызовы через get-метод.

Какие ещё за и против?
 

FB3

Новичок
Насколько я знаю, на Java обычно все свойства делают не публичными и пишут для них getter и setter. Как раз и с описанной целью в том числе.
Интереснее как раз с сеттерами получается. Например, можно логи какие-нибудь вести. Если, к примеру, у класса есть свойство "кол-во бабла" и через сеттер мы изменяем, то можем залоггировать это изменение куда-нибудь.

Я, кстати, пишу обычно if (!isset($this->current_user). ИМХО, читабельнее, но на самом деле, разница не должна быть принципиальной.
 

Духовность™

Продвинутый новичок
Насколько я знаю, на Java обычно все свойства делают не публичными и пишут для них getter и setter
не не не

вопрос не в публичности. В данном конкретном примере свойство protected, и вызывается не извне, а ВНУТРИ.
 

FB3

Новичок
С вызовом метода по идее должно чуть медленнее работать.
Еще одно тобою перечислено выше.
Даже не знаю, что еще добавить.

Возможно, что в IDE встретятся косяки с автоподстановкой методов, если напрямую обращаться к свойству и не возникнут, если обращаться через метод, у которого в PHPDOC будет прописано, объект какого типа он возвращает.
 

AmdY

Пью пиво
Команда форума
обязательно делай с get, это намного упрощает разбор и написание нового кода. кроме того можно навесить ленивую инициализацию и проверку прав.
 

Adelf

Administrator
Команда форума
Боюсь, что в один прекрасный день потребуется, например, изменить имя свойства класса request или делать какую-то логику перед получением объекта запроса. Тогда, очевидно, придется исправлять вызовы свойства напрямую на вызовы через get-метод.
Или просто переделать через __get :)
 

AmdY

Пью пиво
Команда форума
Adelf
в итоге получится несварение желудка от такого АПИ. как и при
$this->get('request') ....
 

Adelf

Administrator
Команда форума
AmdY
А я и не советую. Просто когда есть уже большой проект, правильнее было бы просто сделать через __get/__set и все осталось бы полностью работоспособным.
Правда у товарища triumvirat вагон времени и полная свобода :)
Завидую иногда :)
 
Сверху