Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Зачем нужны интерфейсы?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Opposite
Отправлено: 09 Марта, 2012 - 18:56:12
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Март 2012  


Помог: 4 раз(а)




Сколько уже пишу на php, да и на Java, не совсем понимаю смысл интерфейсов.
Они кроме, как для описания методов класса, еще для чего-нибудь нужны?

(Отредактировано автором: 09 Марта, 2012 - 18:56:30)

 
 Top
Okula
Отправлено: 09 Марта, 2012 - 19:18:36
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Opposite, восновном для описания методов класса. Что бы в дальнейшем облегчить разработку приложения.
Так же даёт возможность определить дополнительные соглашения которым должен следовать класс. Любой класс который "заявляет" о поддержке того или иного интерфейса должен реализовывать все константы интерфейса, и обязан содержать реализацию всех функций данного интерфейса.
 
 Top
Opposite
Отправлено: 09 Марта, 2012 - 19:33:12
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Март 2012  


Помог: 4 раз(а)




PHP:
скопировать код в буфер обмена
  1.  дополнительные соглашения

В PHP это как реализуется?
(Добавление)
Я так понимаю, никак, ибо не сталкивался ни разу.
Я писал интерфейсы, понял, что класс должен реализовать все его методы, вплоть до аргументов. Данные интерфейс хранить не может. Что за соглашения? Я вот этого не понимаю. Хочешь сказать, можно наложить условия на аргументы методов так, чтобы php генерировал предупреждение о несоответствии? Или как понимать фразу "соглашения" ?
 
 Top
alexiy
Отправлено: 09 Марта, 2012 - 19:53:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 483
Дата рег-ции: Янв. 2011  


Помог: 6 раз(а)




насколько я знаю, в некоторых языках исключено множественное наследование, в связи с чем используются интерфейсы
 
 Top
Okula
Отправлено: 09 Марта, 2012 - 19:55:26
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Под словом "соглашение" как раз и понимается полное соответсвие аргументов и имён в классе реализующем данный интерфейс.
К тому же в дальнейшем можно проверять реализует данный класс какой-либо интерфейс. Делается это с помощью оператора instanceof
(Добавление)
alexiy пишет:
насколько я знаю, в некоторых языках исключено множественное наследование, в связи с чем используются интерфейсы

Да, интерфейсы в PHP применяются как аналог множественному наследованию.
 
 Top
LIME
Отправлено: 09 Марта, 2012 - 19:57:57
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




уже обсуждалось
может разъяснит http://forum.php.su/topic.php?fo...2&topic=1400
 
 Top
Opposite
Отправлено: 09 Марта, 2012 - 20:03:25
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Март 2012  


Помог: 4 раз(а)




Okula пишет:
Да, интерфейсы в PHP применяются как аналог множественному наследованию.
Но интерфейсы же не позволяют реализовывать в своем теле методы? Какое может быть наследование?
(Добавление)
Наследуют методы и поля, а интерфейс не позволяет в себе реализовать ни того, ни другого
 
 Top
Okula
Отправлено: 09 Марта, 2012 - 20:09:26
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Я и не говорю что они позволяют реализовать множественно наследование. Они являются аналогом, что не одно и то же.
Интерфейсы поддерживают множественное наследование, что позволяет более точно указать какие методы должны быть реализованы в данном классе.
 
 Top
Opposite
Отправлено: 09 Марта, 2012 - 20:11:52
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Март 2012  


Помог: 4 раз(а)




Okay. Вроде понял. Хм
Скажем так, они нужны другим прогерам для того, чтобы все работало корректно после того, как они засунут туда свои шаловливые ручонки
(Добавление)
Абстрактные классы в этом плане мощнее будут, хотя и назначение у них разное ... абстрактные классы - это почти те же интерфейсы ( необходимо соблюдать соглашения ), которые предоставляют плюс ко всему общие методы и поля, которые можно перегружать. Правильно?
 
 Top
LIME
Отправлено: 09 Марта, 2012 - 20:15:39
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




хороший способ раздавать задания в команде
старший пишет интерфейсы и мальчики/девочки их реализуют
а пока суть да дело можно писать на их основе код зная какие методы будут
 
 Top
caballero
Отправлено: 09 Марта, 2012 - 20:23:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Интерфейсы поддерживают множественное наследование

никакое наследование они не поддерживвают.
классы имплементируют интерфейсы а не наследуют


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Opposite
Отправлено: 09 Марта, 2012 - 20:24:44
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Март 2012  


Помог: 4 раз(а)




Цитата:
Интерфейсы поддерживают множественное наследование

Да я понял, что они хотели сказать. Это не суть.
 
 Top
Okula
Отправлено: 09 Марта, 2012 - 21:08:56
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




caballero, имеется ввиду:
PHP:
скопировать код в буфер обмена
  1. interface oneInterface {
  2.     function getOne();
  3. }
  4.  
  5. interface twoInterface {
  6.     function setTwo($name, $val);
  7. }
  8.  
  9. class Numb implements oneInterface, twoInterface {
  10.     function getOne() {
  11.         // put you php code
  12.     }
  13.     function setTwo($name, $val) {
  14.         // put you php code
  15.     }
  16. }
 
 Top
caballero
Отправлено: 09 Марта, 2012 - 21:17:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
caballero, имеется ввиду:

я понял что имеется ввиду но это не наследование - просто реализация нескольких интерфейсов.
в интерфейсе нечего наследовать.

хотя в некоторых языках интерфейсы есть типа наследование интерфейсов друго от друга - но это уже от лукавого


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Мелкий Супермодератор
Отправлено: 09 Марта, 2012 - 21:54:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Да нет и у интерфейсов множественного наследования. Так, фикция.
Попробуйте сделать 2 интерфейса с одинаковым именем метода.


-----
PostgreSQL DBA
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB