当我在Laravel 5项目中查看代码时,我遇到了一个类 如下 -
class Abc extends Command implements SelfHandling, ShouldBeQueued
{
}
接口如下所示 -
interface SelfHandling {}
interface ShouldBeQueued {}
如果它没有任何方法我感到困惑,那么这些方法的用途是什么 接口?
答案 0 :(得分:1)
它允许按行为处理对象。假设您有一组实现不同界面的对象,您可以将它们区分开来:
if($obj instanceof ShouldBeQueued){
//do something
}
else if{$obj instanceof SelfHandling){
//do something else
}
这个例子有点粗糙,但我希望它会对你有帮助。
答案 1 :(得分:0)
它们被用作一种“旗帜”。可以通过$command instanceof ShouldBeQueued
进行检查。
替代方案是包含一个方法,但这需要多行冗余代码。 (无论如何,大多数实现都会返回true
。)
interface ShouldBeQueued
{
/**
* @return bool
*/
function shouldBeQueued();
}
class Abc extends Command implements ShouldBeQueued
{
function shouldBeQueued()
{
return true;
}
}
检查它会有点复杂:
if ($command instanceof ShouldBeQueued && $command->shouldBeQueued()) { /*...*/ }
这是一个好的做法是另一回事。