Всё верно, но аттрибуты класса так же как и методы тоже относятся к интерфейсу. И идейно это правильно что есть два способа:использование геттеров позволяет пользователю класса рассчитывать на то, что интерфейс не поменяется в следующей версии класса, даже если поменяется его внутренняя реализация.
ооп не может быть плохим или хорошимЭто нехороший ООП
покажите пожалуйста список умных дядек, которым это не нравится так же как и ваммне и умным дядькам он не нравится
Главное в интерфейсе - объявление операций, поддерживаемых экземплярами класса. К нему можно добавить объявления других классов, переменных, констант и исключительных ситуаций, уточняющих абстракцию, которую класс должен выражать.
http://vmk.ugatu.ac.ru/book/buch/ch03.htm
Гради Буч
Под интерфейсом класса понимаются элементы-данные, доступные из экземпляров других классов, и методы, которые могут вызываться из других классов.
http://www.object.newmail.ru/oop1.html
Патрикеев Ю. Н.
Всё правильно, в C# дело обстоит примерно так же, только там немного другая конвенция имён.Автор оригинала: denver
В делфях было определенно лучше: для каждого аттрибута можно назначить свои геттер и сеттер (а можно и не назначать):
$date->month = 12;
Который будет работать прозрачно через метод setMonth() если тот был задан как сеттер для данного атрибута.
Не знаю как там в С# (наверное так же).
-~{}~ 08.12.06 10:31:
И вообще, всем кому интересны различия:
Свойства класса (там как раз можно узнать много по теме сего топика), поля класса, методы класса
Вы за Протопова не беспокойтесь. Вы за себя беспокойтесь. Лучше бы класс прозрачнее написали, чем защиты ставить там, где это не нужно, и загромождать тем самым код.любой умник может написать
$date->month = 'Hello World!';
вопрос неясен. если я к примеру в поле класса вместо PDOStatement имею array - они слегка по разному обрабатываются. или я должен каждый раз при обращении к полю проверять тип, или просто укзать нужный в сеттере и забыть. Понятно, что иногда проверка типа не требуется, но требуется - чаще. ИМХО.зачем вам проверка типа данных?
если задан тип параметра - скрипт вывалится с соответствующим сообщением о причине баги. чем это по вашему плохо ?Ну дали вам не тот тип, действия вашего класса?
Как в отлаженом скрипте на входе окажется не тот тип? (Или у вас объекты методом GET приходят?)если задан тип параметра - скрипт вывалится с соответствующим сообщением о причине баги. чем это по вашему плохо ?
Интерфейс кто-то использует. Этот кто-то может через ВНЕШНИЙ интерфейс класса подать на вход что угодно - при чем тут отлаженность скрипта ? Не говоря уж о том, что типизация входных параметров сокращает время собственно отладки/рефакторинга ...Как в отлаженом скрипте на входе окажется не тот тип?
Какой ненужный код вы имеете в виду ? c вашей точки зрения типизация параметра метода - большое количество ненужного кода ? есть сведения что function(someInterface $o) работает существенно медленнее чем function($o) ?Зачем каждый раз исполнять код, который не нужен в штатном режиме? (Для внештатных режимов есть стандартные сообщения PHP)
я так понимаю, что привести внятный пример, когда public свойство лучше сеттера/геттера (и объяснить чем именно лучше) у гуру не получается. вместо этого проще обсуждать нужность проверки данных перед их использованием.Вот так и получается, понапишут классописатели код, из которого 40% совершенно лишнее жонглирование данными, а потом приходят на форум и спрашивают, что быстрее echo или print.
Отличный пример! Продолжим тему маразмаАвтор оригинала: hermit_refined
нарушение инкапсуляции здесь приводит к ошибке, которую очень сложно отловить, тем более, если эти строки разнесены по разным классам.
$a =array('a'=>1);
$ref=&$a['a'];
$b=$a;
$b['a']=2;
echo $a['a'];
class X{
private $x;
function setX(&$x){
$this->x=&$x;
}
}
class Test
{
protected $member = 0;
function shout(){
echo $this->member;
}
function work(){
$this->member=2;
}
function __construct(X $x){
$x->setX($this->member);
}
}
$x = new X;
$a = new Test($x);
$b = clone $a;
$b->work();
$a->shout();
Нет, конечно! В POSTе приходят правильные данные, отправленные правильными пользователями, которые делают правильный мёд.Автор оригинала: holybg
С.
а если приходят постом?
я не должен проверять?