Расширить интерфейс с помощью общей логики

Предположим, у меня есть,

interface Foo {

}

class FooClass implements Foo {

}

Есть ли способ добавить немного логики в интерфейс за пределами FooClass так что я могу сделать это:

$foo = new FooClass();
$foo->Bar();

где Bar метод применим ко всем Foos? Я прошу что-то похожее на методы расширения в C # но в моем случае я хочу расширить только интерфейсы.

Я знаю, что могу добавить пользовательскую статическую функцию Bar который принимает Foo в качестве параметра, но я хочу знать, есть ли в PHP что-нибудь, что дает мне $foo->Bar() сахар.

Редактировать: Я думаю, что я не был достаточно ясен. У меня есть пара похожих интерфейсов (и многие классы, реализующие их) из внешней библиотеки. Изменение их на абстрактные классы не вариант для меня.

1

Решение

Я думаю, что ближе всего вы можете получить с помощью PHP так называемые черты.

<?php
interface Foo {

}

trait myTraits {
function bar() { echo "BarMethod"; }
}

class FooClass implements Foo {
use myTraits;
}

$foo = new FooClass();
$foo->Bar();
?>

Это выведет «BarMethod».

2

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

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

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