使用通用逻辑扩展接口

时间:2015-11-10 19:50:49

标签: php interface extension-methods syntactic-sugar

假设我有,

interface Foo {

}

class FooClass implements Foo {

}

有没有办法可以在FooClass之外的界面添加一些逻辑,以便我可以这样做:

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

其中Bar是适用于所有Foo的方法吗?我要求的是与extension methods in C#类似的东西,但在我的情况下,我想扩展接口。

我知道我可以添加一个自定义静态函数Bar,它接受​​Foo作为参数,但我想知道PHP中是否有任何东西给我$foo->Bar()

编辑:我认为我不够清楚。我从外部库中有几个类似的接口(以及许多实现它们的类)。将它们更改为抽象类不是我的选择。

1 个答案:

答案 0 :(得分:2)

我认为使用PHP最接近的就是所谓的traits

<?php
interface Foo {

}

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

class FooClass implements Foo {
        use myTraits;
}

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

这将输出&#34; BarMethod&#34;。