наследование в пхп5. как лучше?

[Удален]
529

как, по вашему, лучше написать класс библиотечного типа?

class Class1111odinodin
{
private $id;
protected function setId($id)
{
$this->id = $id;
}
}

или так?


class Class1111odinodin
{
protected $id;
}
[Удален]
#1

я за второй вариант

S
На сайте с 16.05.2005
Offline
107
#2

что лучше?

class Class1111odinodin

{

private func() { .. };

protected function exec_func()

{

$this->func();

}

}

или так?

class Class1111odinodin

{

protected func() { .. };

}

[Удален]
#3
snark:
что лучше?

class Class1111odinodin
{
private func() { .. };
protected function exec_func()
{
$this->func();
}
}

или так?

class Class1111odinodin
{
protected func() { .. };
}

мммм...

не понял ответа

S
На сайте с 16.05.2005
Offline
107
#4

Второй вариант логичней и красивей, переменная это такой же член класса как и функция. Зачем все усложнять?

HraKK
На сайте с 02.03.2009
Offline
128
#5

Обьясняю, если функция у тебя protected значит предпологается что этот класс можно унаследовать и расширить. А значит никакого private там не должно быть!

private должен использоватся ТОЛЬКО в классах с приставкой final.

я гарант (/ru/forum/493343) уже не оказываю данные услуги, извините.
xant
На сайте с 17.12.2008
Offline
65
#6
HraKK:
private должен использоватся ТОЛЬКО в классах с приставкой final.

Вообще, изначально private задумывался, чтобы скрыть от потомков детали реализации, оставив им только интерфейс (через public/protected мемберы).

Более подробно: вы делаете какой-нибудь алгоритм, например, какое-нибудь хитрое кэширование, и не хотите, чтобы в него кто-то лез своими грязными лапами. Для реализации кэширования вам нужно пара переменных-членов и тройка функций-членов. Для пользователей кэша - они вообще не знают, что там что-то кэшируется. Ну, в смысле, знают, но повлиять на это никак не могут и ничего лишнего не видят. Для них класс выглядит так же, как если бы никакого кэширования вообще не было.

Вот вы и закрываете всё, что относится к реализации кэширования, в private. И все сосут лапу. Зато потом, когда вы захотите поменять алгоритм на более другой, вы это сможете сделать без каких-либо ограничений. А в случае protected оказалось бы, что какой-нибудь неумный Вася решил "оптимизировать" ваше решение самостоятельно и использовал функции кэширования напрямую. Теперь он не может просто взять вашу новую версию, потому что ему нужно переписывать пол-программы. Ладно еще если Вася с улицы нарисовался, тогда это его проблемы, а вот если он ваш коллега по организации или ваш основной заказчик, то его головная боль становится вашей.

Эксклюзивные сайты и веб-2.0 приложения под ключ. Дорого.
[Удален]
#7

Ну в общем да.

Если под библиотечным типом именно это подразумевается, то лучше первый вариант. Если либа для себя то нафиг такой изврат

aleksey_php
На сайте с 17.03.2008
Offline
53
#8

Тоже поддерживаю первый вариант. Котеров и Макконел выбирают его же.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий