![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Dima 2015 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 16.3.2008 Где: SPb Репутация: 2 Всего: 2 |
Вот такой простой код:
Выдает ошибку: Fatal error: Access type for interface method TestInterface::f1() must be omitted in D:\Project\Dima\interface.php on line 5 Меняем на:
И имеем: Fatal error: Access level to Test::f1() must be public (as in class TestInterface) in D:\Project\Dima\interface.php on line 9 Из чего я делаю вывод, что в интерфейсах могут быть только public-методы. Возникает вопрос, вернее недоумение тем, что конструируя "скелет" класса нельзя указать какими идентификаторами доступа должны обладать его методы... Немного иная ситуация с абстрактными классами, хотя private методы там тоже нельзя предусмотреть, видать потому что они вообще не наследуются... |
||||
|
|||||
yurik_l |
|
|||
тарантиноман Профиль Группа: Участник Сообщений: 49 Регистрация: 17.9.2006 Репутация: 1 Всего: 3 |
Dima 2015, а как ты считаешь для чего нужны интерфейсы?
|
|||
|
||||
skyboy |
|
||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
Я могу понять незнание английского языка и нежелание ознакомиться с ним хотя бы на уровне чтения документации. но игнорирование большого количества автоматизированных переводчиков я понять никак не могу. |
||||
|
|||||
Dima 2015 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 16.3.2008 Где: SPb Репутация: 2 Всего: 2 |
yurik_l, вот именно этот вопрос у меня и возник когда напоролся на эти ошибки.
skyboy, не, я как раз все перевел и документацию смотрел, иначе бы сюда не полез ![]() Ну пропущу я доступ для метода, напишу интерфейс так:
Будет та же самая ошибка. http://www.php.net/manual/en/language.oop5.interfaces.php Где тут про это, ткни носом плиз? |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
Dima 2015, да, правда, так и получается. прости за резкость.
странно, что в комментариях об этом не говорят. |
|||
|
||||
Dima 2015 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 16.3.2008 Где: SPb Репутация: 2 Всего: 2 |
skyboy, то то и оно. Ты заметь что если писать в интерфейсе public он пишет, что не "должен быть пропущен" а то, что в классе, реализующем интерфейс доступ должен быть такой же, т.е. public. Логика какая то странная...
Ну и вообще странно. Если рассматривать интерфейс как "костяк" класса, то было бы очень логично что доступ к методам тоже можно жестко закрепить, чтобы при реализации там получать ошибки при попытке сделать публичным метод, который должен быть private или protected, а рельно получается что можно только методы перечислить, при чем исключительно публичные... Это сообщение отредактировал(а) Dima 2015 - 29.9.2008, 15:27 |
|||
|
||||
xoma |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2007 Репутация: нет Всего: нет |
Насколько мне известно интерфейс - это как раз и есть публичный интерфейс класса (описание его открытых public методов)...описывать в интерфейсе закрытые методы - нет особого смысла, так как они не входят в так называемый контракт класса (из java мира...). Мне кажется все вполне логично.
|
|||
|
||||
Dima 2015 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 16.3.2008 Где: SPb Репутация: 2 Всего: 2 |
||||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
однако, интерфейсы вполне можно использовать не только для реализации полиморфизма, но и для контроля работы программиста: так же, как и абстрактные классы, чтоб заставить программиста в классах-потомках чего-то там обязательно реализовывать некий функционал. с отличием, что интерфейсы допускают множественное наследование. в этом случае лично мне кажется вполне логичным использование модификаторов доступа. или наоборот - опускание модификатора доступа. к примеру, если для private-реализации ещё есть конфликт: в потомках методы, объявленные в интерфейсе, станут нереализованными и это надо контролировать, то вот почему нельзя сделать методы protected - мне не ясно. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |