Это первый вопрос, который я задаю многим другим.
Кто-то здесь может назвать меня сумасшедшим, потому что я следую за упомянутой книгой в названии вопроса, используя PHP-OO.
В первой главе авторы представляют простой проект под названием «SimUDuck», и, хотя я воспроизвел его на Java, мне было интересно воспроизвести его с помощью PHP.
В конце проект SimUDuck создает два (2) интерфейса (FlyBehavior и QuackBehavior), более пяти (5) классов, реализующих эти интерфейсы (например, FlyWithWings (), Quack () и т. Д.), Абстрактный класс, называемый Duck и три (3) или четыре (4) различных класса видов уток, расширяющих Duck (Mallard, HeadRedDuck, RubberDuck и т. д.), просто чтобы продемонстрировать, насколько важно программировать для интерфейса.
Чтобы имитировать среду основных методов Java, я создал класс PHP с именем MiniDuckSimulator, включая функцию 'public static function main ()', и в том же сценарии я добавил "MiniDuckSimulator :: main ();" , Скрипт работает без ошибок.
Интересной проблемой является то, что без вызова какого-либо реализованного метода QuackBehavior :: quack () выводится эхо 'Quack! Quack!' появляется. Те, кто читал эту книгу, знают, о чем я говорю.
Примечание. Ниже приведен фрагмент скрипта:
interface FlyBehavior {
public function fly();
}
interface QuackBehavior {
public function quack();
}
include_once 'FlyBehavior.php';
class FlyWithWings implements FlyBehavior {
public function fly() {
echo 'I'm flying!<br />';
}
}
include_once 'QuackBehavior.php';
class Quack implements QuackBehavior {
public function quack() {
echo 'Quack!<br />';
}
}
abstract class Duck {
protected $flyBehavior;
protected $quackBehavior;
function __construct() {
}
public function performFly(){
$this->flyBehavior->fly();
}
public function performQuack(){
$this->quackBehavior->quack();
}
public function setFlyBehavior($flyBehavior){
$this->flyBehavior = $flyBehavior;
}
public function swim(){
echo "All the ducks float, including the decoy!<br />";
}
}
include_once 'Duck.php';
include_once 'FlyWithWings.php';
include_once 'Quack.php';
class Mallard extends Duck {
function __construct() {
$this->flyBehavior = new FlyWithWings();
$this->quackBehavior = new Quack();
}
}
class MiniDuckSimulator {
public static function main(){
$mallard = new Mallard();
$mallard->performFly();
}
}
MiniDuckSimulator::main();
Заранее спасибо.
LucDaher.