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
Форумы портала PHP.SU :: Версия для печати :: Интерфейсы в php
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Интерфейсы в php

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

1. IGORtrue - 02 Мая, 2014 - 17:17:09 - перейти к сообщению
Читаю, понимаю как писать. Не понимаю зачем они. Везде такие примеры:
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.  


Зачем тогда интерфейсы, если они не используются.
2. LIME - 02 Мая, 2014 - 17:20:09 - перейти к сообщению
чтоб не забыть чего-то там реализовать
тебе это пока очень совсем не надо
3. Panoptik - 02 Мая, 2014 - 17:27:44 - перейти к сообщению
поверхностно на простых примерах эту тему сложно понять

в вашем примере не видно что внутри интерфейсов, могу предположить что в интерфейсе 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. Объекты, шаблоны и методики программирования"
4. IGORtrue - 02 Мая, 2014 - 17:30:13 - перейти к сообщению
Понял, понял, спасибо!
5. Panoptik - 02 Мая, 2014 - 17:32:36 - перейти к сообщению
вообще интерфейс - это как стандарт

в реальной жизни к примеру много устройств поддерживают форматы карт памяти. вот когда к примеру производитель заявляет что поддерживается карта памяти микросд - он как бы объявляет интерфес, а вы уже покупаете любую карту на рынке, вставляете в разъем и оно у вас работает, причем неважно какой производитель ее сделал и как, главное что она тоже стандарта микросд, то есть разработчики карт памяти как бы реализуют интерфейс микросд и их продукт работает в каких-то устройтвах от третьих производителей (фотоаппараты, телефоны, плееры... )
6. IGORtrue - 02 Мая, 2014 - 17:34:19 - перейти к сообщению
Теперь понятно, а то смотрю описывает методы, а используется класс также.
7. LIME - 02 Мая, 2014 - 17:36:07 - перейти к сообщению
ничего ты не понял
цыц
ну раз уж не ленимся и объясняем то чего автор скорее не поймет сразу дам пример "из жизни"
например я написал сервер для хранения данных на овсяных печеньях
у овсяных печений есть особенности
после чтения данных их надо сожрать сразу тут же
вот я и сделал необходимым работать с ними только через мой интерфейс
в котором обязательно есть метод Печенька::жрать()
и неважно чем ты их жрать будешь и с каким чаем
дело твое
но будь любезен жри
вот такой сумбур
(Добавление)
хм...с микросд наверное лучше всетки пример гы))
8. IGORtrue - 02 Мая, 2014 - 17:52:23 - перейти к сообщению
LIME пишет:
например я написал сервер для хранения данных на овсяных печеньях

Уже интересно Улыбка
Я понял зачем это нужно, всем спасибо Улыбка
9. LIME - 02 Мая, 2014 - 17:53:56 - перейти к сообщению
простите те которые не смогут теперь есть печенья
10. IGORtrue - 02 Мая, 2014 - 18:06:53 - перейти к сообщению
LIME пишет:
простите те которые не смогут теперь есть печенья

Аха) Я бы не сказал, что это противно, когда сервер бд написан на печеньках Голливудская улыбка
11. LIME - 02 Мая, 2014 - 18:09:57 - перейти к сообщению
смотря как реализовать Печенька:жрать($попой)
(Добавление)
всё...стоп флэйм))
(Добавление)
хотя хороший пример абстракции получился))

 

Powered by ExBB FM 1.0 RC1