Предположим,
interface Foo {
}
class FooClass implements Foo {
}
Есть ли способ добавить логику к интерфейсу вне FooClass
чтобы я мог это сделать:
$foo = new FooClass();
$foo->Bar();
где Bar
- метод, применимый ко всем Foo
? То, что я прошу, похоже на методы расширения в С#, но в моем случае я хочу расширить только интерфейсы.
Я знаю, что могу добавить пользовательский статическую функцию Bar
, которая принимает Foo
в качестве параметра, но я хочу знать, если есть что - нибудь в PHP, который дает мне $foo->Bar()
сахар.
Редактировать: Я думаю, что я был недостаточно ясен. У меня есть пара подобных интерфейсов (и многие классы, реализующие их) из внешней библиотеки. Изменение их для абстрактных классов для меня не является вариантом.
Я думаю, что самое близкое, что вы можете получить с PHP, - это так называемые черты.
<?php
interface Foo {
}
trait myTraits {
function bar() { echo "BarMethod"; }
}
class FooClass implements Foo {
use myTraits;
}
$foo = new FooClass();
$foo->Bar();
?>
Это выведет "BarMethod".
interface Foo
(то естьpublic function Bar();
). Реализация указанной функции будет тогда требоваться любыми классами, реализующими ее, но все будет зависеть от того, как она ее реализовала.