класс — Каковы преимущества использования интерфейса без каких-либо методов? В переполнении стека

Как я смотрел код в проекте Laravel 5, я столкнулся с классом
Как ниже —

class Abc extends Command implements SelfHandling, ShouldBeQueued
{

}

И где интерфейсы, как показано ниже —

interface SelfHandling {}
interface ShouldBeQueued {}

Я запутался, если у него нет никаких методов, то в чем польза от этих
интерфейсы?

3

Решение

Это позволяет обрабатывать объекты по поведению. Допустим, у вас есть массив объектов, реализующих различные интерфейсы, затем вы можете различить их, выполнив это:

if($obj instanceof ShouldBeQueued){
//do something
}
else if{$obj instanceof SelfHandling){
//do something else
}

Этот пример немного грубоват, но я надеюсь, что он поможет вам.

1

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

Они используются как своего рода «флаг». Это можно проверить, выполнив $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()) { /*...*/ }

Является ли это хорошей практикой, это другой вопрос.

0

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