Вот классический пример. Совсем запутали, кому что надо. Это для ТС подходит.
в пхп поддерживается Duck Typing поэтому явное указание интерфейса не обязательно, но явное указание как бы тру путь, чтобы не пропихивали то, что не подходит.
1)Обычная обертка (Декоратор).
2)Наследование с переопределением этого метода.
3)Изменение функциональности метод на лету - стратегии.
PHP:
<?php
//интерфейс (необязателен, поэтому в пхп4 можно не объявлять
interface ITest{
function test();
}
//один вариант класса.
class A implements ITest{
function test(){
return "A";
}
}
//другой вариант класса
class B implements ITest{
function test(){
return "B";
}
}
class Client{
private $_ab;
function __construct(ITest $ab){
$this->_ab=$ab;
}
function run(){
echo $this->_ab->test();
}
}
//А и В снаружи совершенно идентичны
//создание по условию какому нибудь
//условие. Может быть задано в коде, в конфиге, динамически и так далее.
$class=1;
//$class=2;
$ab=($class==1)?new A():new B();
//использование
//код не меняется даже если создать еще море классов C, D, E ...
$client=new Client($ab);
$client->run();
в пхп поддерживается Duck Typing поэтому явное указание интерфейса не обязательно, но явное указание как бы тру путь, чтобы не пропихивали то, что не подходит.
Можно и очень даже в стиле ООП.если же вам нужно создать класс, а потом программным путем изменить в нем поведение метода - то этого походу сделать нельзя ... а если и можно - то не желательно делать, так как такое поведение типа "не в стиле ооп" и усложнит дальнейшее понимание кода
1)Обычная обертка (Декоратор).
2)Наследование с переопределением этого метода.
3)Изменение функциональности метод на лету - стратегии.