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

 PHP.SU

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


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

> Без описания
IGORtrue
Отправлено: 02 Мая, 2014 - 17:17:09
Post Id



Частый гость


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


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




Читаю, понимаю как писать. Не понимаю зачем они. Везде такие примеры:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.   require_once "fileinterface.php";
  3.   require_once "client.php";
  4.   class Shop implements FileInterface, Client{
  5.     public function readFromFile($path) {
  6.       echo "Считываем из файла и возвращаем строку<br />";
  7.     }
  8.     public function writeToFile($path, $some) {
  9.       echo "Записываем в файл данные $some<br />";
  10.     }
  11.     public function buy($id) {
  12.       echo "Спасибо за покупку<br />";
  13.       $this->writeToFile("data.db", "Был куплен товар $id");
  14.     }
  15.     public function repayment($id) {
  16.       $this->readFromFile("data.db");
  17.       //Тут, допустим, проверка того, была ли на самом деле покупка товара $id
  18.       $this->writeToFile("data.db", "Был сделан возврат товара $id");
  19.     }
  20.   }
  21. ?>


И использование:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.   require_once "shop.php";
  4.   $shop = new Shop();
  5.   $shop->buy(5);
  6.   $shop->repayment(5);
  7. ?>
  8.  


Зачем тогда интерфейсы, если они не используются.
 
 Top
LIME
Отправлено: 02 Мая, 2014 - 17:20:09
Post Id


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


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


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




чтоб не забыть чего-то там реализовать
тебе это пока очень совсем не надо
 
 Top
Panoptik
Отправлено: 02 Мая, 2014 - 17:27:44
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




поверхностно на простых примерах эту тему сложно понять

в вашем примере не видно что внутри интерфейсов, могу предположить что в интерфейсе FileInterface 2 метода readFromFile и writeToFile, а в Client - buy, repayment

польза от них следующая:
объявляя интерфейс мы как бы говорим пользователю, что все классы к примеру реализующие ваш интерфейс Client будут иметь методы buy, repayment и для меня как для разработчика архитектуры совершенно неважно как вы их реализуете, главное чтобы они выполняли свои функции итак у меня есть интерфейс клиент и какой-то мой код

PHP:
скопировать код в буфер обмена
  1.  
  2. class SomeClass {
  3.    // ... different methods here
  4.  
  5.   // здесь я вызываю метод buy и я уверен что он реализован в классе, потому что проверяю аргумент
  6.   // я уверен что здесь не будет ошибки что у $client - наверняка есть метод buy
  7.   public function doSomething(Client $client) {
  8.      $client->buy();
  9.   }
  10. }
  11.  


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

часто такие вещи используются в различных фреймворках, можете открыть их коды ядра и поискать/посмотреть где и как это используется

хорошое описание для чего это нужно я встречал в книге Мэтт Зандстра "Objects, Patterns, and Practice / PHP. Объекты, шаблоны и методики программирования"

(Отредактировано автором: 02 Мая, 2014 - 17:29:20)



-----
Just do it
 
 Top
IGORtrue
Отправлено: 02 Мая, 2014 - 17:30:13
Post Id



Частый гость


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


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




Понял, понял, спасибо!
 
 Top
Panoptik
Отправлено: 02 Мая, 2014 - 17:32:36
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




вообще интерфейс - это как стандарт

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


-----
Just do it
 
 Top
IGORtrue
Отправлено: 02 Мая, 2014 - 17:34:19
Post Id



Частый гость


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


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




Теперь понятно, а то смотрю описывает методы, а используется класс также.
 
 Top
LIME
Отправлено: 02 Мая, 2014 - 17:36:07
Post Id


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


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


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




ничего ты не понял
цыц
ну раз уж не ленимся и объясняем то чего автор скорее не поймет сразу дам пример "из жизни"
например я написал сервер для хранения данных на овсяных печеньях
у овсяных печений есть особенности
после чтения данных их надо сожрать сразу тут же
вот я и сделал необходимым работать с ними только через мой интерфейс
в котором обязательно есть метод Печенька::жрать()
и неважно чем ты их жрать будешь и с каким чаем
дело твое
но будь любезен жри
вот такой сумбур
(Добавление)
хм...с микросд наверное лучше всетки пример гы))
 
 Top
IGORtrue
Отправлено: 02 Мая, 2014 - 17:52:23
Post Id



Частый гость


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


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




LIME пишет:
например я написал сервер для хранения данных на овсяных печеньях

Уже интересно Улыбка
Я понял зачем это нужно, всем спасибо Улыбка
 
 Top
LIME
Отправлено: 02 Мая, 2014 - 17:53:56
Post Id


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


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


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




простите те которые не смогут теперь есть печенья
 
 Top
IGORtrue
Отправлено: 02 Мая, 2014 - 18:06:53
Post Id



Частый гость


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


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




LIME пишет:
простите те которые не смогут теперь есть печенья

Аха) Я бы не сказал, что это противно, когда сервер бд написан на печеньках Голливудская улыбка
 
 Top
LIME
Отправлено: 02 Мая, 2014 - 18:09:57
Post Id


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


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


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




смотря как реализовать Печенька:жрать($попой)
(Добавление)
всё...стоп флэйм))
(Добавление)
хотя хороший пример абстракции получился))
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB