ООП: приватные геттеры и сеттеры для свойств?

slamm

Новичок
ООП: приватные геттеры и сеттеры для свойств?

После прочтения лит-ры по ООП выяснил, что нужно делать публичные геттеры\сеттеры для свойств, которые могут быть использованы вне класса.
Возник вопрос: а нужно ли (с точки зрения правильного ООП) делать приватные геттеры\сеттеры для свойств, которые используются только внутри класса?
 

slamm

Новичок
не, я не про это. наверное не совсем правильно выразился.
у нас есть свойство которое использется только внутри класса.
стоит ли к этому свойству писать приватный геттер\сеттер и потом использовать это свойство через этот геттер\сеттер внутри класса?
или использовать свойство напрямую - это нормально?
 

Духовность™

Продвинутый новичок
у нас есть свойство которое использется только внутри класса.
стоит ли к этому свойству писать приватный геттер\сеттер и потом использовать это свойство через этот геттер\сеттер?
UPD: Понял вопрос. Нет, ненужно. Это бред. Геттеры/сеттеры должны быть внешними интерфейсами. Делать приватные внутренние геттеры/сеттеры это ужаснах.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
А вариает, что это свойство достаточно сложное, и поэтому выставлять его руками муторно и некорректно, т.к. поведение может изменится, вы не рассматриваете?
 

Krishna

Продался Java
А вариает, что это свойство достаточно сложное, и поэтому выставлять его руками муторно и некорректно, т.к. поведение может изменится, вы не рассматриваете?
Такой метод уже сложно назвать сеттером, так что не рассматриваем. Сеттер предполагает относительно простую инициализацию.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Не считаю, что ты прав:
Сеттер — специальный метод, используемый в объектно-ориентированном программировании для того, чтобы присвоить какое-либо значение инкапсулированному полю, например, обработав при этом недопустимые присваивания.
То есть это "сложная" операция присвоения. Относительно "простую" можно выполнять как раз обычным присваиваиванием.
 

craz

Нестандартное звание
слушайте, а правда если к примеру у меня есть такой класс


PHP:
class MyClass{     
private $_password;     
public function check ($password,$login)
{
         $this->_password=$password;
         /*тут какие то проверки, работа с базой и т.д.*/ 
        return true;     
}    
 /*то при принятой мной системе обозначения приватных переменных сеттер будет выглядть как минимум глупо?*/
    function set_password{}//причем как обозначить тогда саму функцию как приватную или как публичную }
хотя тут встает вопрос проверки, этого самого $_password, но имхо надо будет писать так чтоб в эту функцию он уже приходил из надежного места



или вы вообще не о том?)
 

craz

Нестандартное звание
да я вообще-то не о том) это все понятно про видимости, какой должна быть видимость у сеттера приватной переменной? я извините что то не нашел по ссылке.

P.s. я вообще думаю не нужны сеттеры на приватные переменные.
Все сорри я гоню, все можно и все нужно

class Demo {
private $_name;
public getName(){
return $this->_name;
}
public function setName($name){
if(!is_string($name))||strlen($name)==0){
throw new Exeption('ругаемся');
}
$this->_name = $name;
}
public function sayHello(){
echo "Здраствуй {this->getName()}!";
}
}

/*применяем*/
$obj = new Demo();
$obj ->setName('какой нить перец');
$obj->sayHello();

Короче даже очень удобно я просто перепутал простые сеттеры с волшебными, думал что они автоматически тоже грузяться
 

craz

Нестандартное звание
Re: ООП: приватные геттеры и сеттеры для свойств?

Автор оригинала: slamm
Возник вопрос: а нужно ли (с точки зрения правильного ООП) делать приватные геттеры\сеттеры для свойств, которые используются только внутри класса?
ну как бы вот вопрос, я как бы попытался ответить, ответ да нужно и плюс ко всему удобно. только сами по себе это будут публичные сеттеры, но приватных переменных, разве не так?
 

slamm

Новичок
согласен с флоппиком.
я это понимаю так:
если приватная переменная (которая не должна использоваться вне класса) нуждается в хитром присвоение\получение, то, для того чтобы не дублировать хитрый код присвоения\получения, нужно создать приватный геттер\сеттер в котором описать этот код.
публичным этот геттер\сеттер делать не нужно так как переменная не должна использоваться вне класса.
 

r4sh

Новичок
убличным этот геттер\сеттер делать не нужно так как переменная не должна использоваться вне класса.
А если возникнут требования к классу, когда понадобятся публичные методы __get и __set ?

На практике приватным атрибутам редко присваиваются сложные значения, и редко необходимы приватные методы для установки этих значений. И точно не стоит для этого использовать методы __get и __set. Это может сделать код неявным даже для самого автора класса.
__get и __set стоит применять для классов, чей весь внешний интерфейс построен на этом. В таком случае сохраняется целостность работы с данными класса.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
r4sh, магические методы как бы не обсуждаются сейчас.
Алсо,
На практике приватным атрибутам редко присваиваются сложные значения
довольно странное замечение, так как это очень субьективно. На вашей практике, может и нет, а на моей - регулярно.
приватным переменным не часто нужно присваивать значения, которые могут быть "ошибочными"
Он не обязательно ошибочный. Может быть просто сложный. Например какой нить DSN или URL распихать из строки покомпонентно в приватные свойства.
Алсо, приватными такие свойства могут быть не потому что "скрытые и используются внутри программы" а потому что скорее всего прийдется геттером обрабатывать их получение, т.к. они могут не иметь значения, например. Выносить эту логику в программу на каждую попытку обращения к такому свойству - не логично.

Опять таки, не обсуждается, насколько часто это нужно делать. Обсуждается, что если это нужно сделать - то как сделать это правильней, так, и только так нужно ставить всегда вопрос.
 

korchasa

LIMB infected
Re: ООП: приватные геттеры и сеттеры для свойств?

Автор оригинала: slamm
Возник вопрос: а нужно ли (с точки зрения правильного ООП) делать приватные геттеры\сеттеры для свойств, которые используются только внутри класса?
Да, иногда, нужно.
 
Сверху