Просто замечательный пример использования интерфейсов.
Новичкам (и не только) читать обязательно!
<?php
/**
* Интерфейс "смертный"
*/
interface Killable
{
public function kill();
}
/**
* Класс-убийца
*/
class Killer
{
private $victims = array();
/**
* Добавляет жертву в список смертников
*/
public function add(Killable $v)
{
$this->victims[] = $v;
}
/**
* Убивает всех нафиг
*/
public function killAll()
{
foreach( $this->victims as &$victim )
{
$victim->kill();
}
}
}
/**
* Киса
*/
class Cat implements Killable
{
public function kill()
{
echo "— Мяу<br/>\n";
}
}
/**
* Собачко
*/
class Dog implements Killable
{
public function kill()
{
echo "— Гав<br/>\n";
}
}
/**
* Хуман
*/
class Human implements Killable
{
public function kill()
{
echo "— АААА!!!!<br/>\n";
}
}
/**
* дункан маклауд из клана маклаудов
*/
class DuncanMacLeod extends Human
{
public function kill()
{
throw new Exception('Я ж бессмертный, ёпте!');
}
}
// тест
$klr = new Killer();
$klr->add(new Cat());
$klr->add(new Dog());
$klr->add(new Human());
$klr->add(new DuncanMacLeod());
try
{
$klr->killAll();
}
catch( Exception $e )
{
echo "Нифига: «" . $e->getMessage() . "»\n";
}
©2010. Postage by Greg Cooper. Icons by P.J. Onori. Thanks to Jamie Cassidy & Panic.
Edited by Neris
Comments