Шаблон простой стратегии возвращает нежелательный вывод эха

когда я запускаю скрипт

<?php

interface IBrakeBehaviour {
public function brake();
}

class Brake implements IBrakeBehaviour {
public function brake() {
echo "Simple Brake applied.";
}
}

class BrakeWithABS implements IBrakeBehaviour {
public function brake() {
echo "Brake with ABS applied.";
}
}

class Car {
private $_brakeBehavior;

public function __construct(IBrakeBehaviour $brakeBehavior)
{
$this->_brakeBehavior = $brakeBehavior;
}

public function brake() {
$this->_brakeBehavior->brake();
}
}

$bmw = new Car(new Brake());
$audi = new Car(new BrakeWithABS());

это автоматически повторяет «Простой Тормоз применен». Но это сообщение должно появиться, когда я выполню

$bmw->brake(); or $audi->brake();

и не раньше.

Кто-нибудь знает, что я делаю не так? Спасибо заранее.

Герберт

0

Решение

В PHP вы можете использовать оба __construct и, если хотите, назовите конструктор так же, как класс (не уверен на 100%, применимо ли это ко всем версиям).
Итак, проблема, которую вы испытываете, заключается в том, что ваш Brake класс реализует конструктор вместо того метода, который, как вы думаете, он реализует (brake).

Теперь можно подумать, что будет разница между Brake() а также brake(), но нет. В php имена методов / функций нечувствительны к регистру, поэтому они одинаковы …

Как обойти эту проблему?
Если вы реализуете конструктор как __construct до реализация brake функция, она должна работать, т.е.

class Brake {
public function __construct() {} // First
public function Brake() {}       // Then this
}

Иначе вы можете получить Redefining already defined constructor ошибка.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]