Проверка, реализует ли класс экземпляра интерфейс?

C не имеет исключений, поэтому в общем случае вы должны поймать все исключения и вернуть код ошибки и / или предоставить функцию, которая возвращает информацию о последней ошибке.

139
задан Wilco 8 November 2008 в 04:24
поделиться

2 ответа

interface IInterface
{
}

class TheClass implements IInterface
{
}

$cls = new TheClass();
if ($cls instanceof IInterface) {
    echo "yes";
}

можно использовать "instanceof" оператор. Для использования его левый операнд является экземпляром класса, и правильный операнд является интерфейсом. Это возвращает true, если объект реализует конкретный интерфейс.

239
ответ дан Tomáš Votruba 8 November 2008 в 04:24
поделиться
  • 1
    Ничего себе! That' s очень близко к тому, чтобы быть точно, что мне нужна... всего одна вещь. Есть ли способ не включать " __ type" пара ключ/значение? I' d скорее люди, использующие этот didn' t видят что значение, но я can' t выясняют, как избавиться от него. – Katherine Williams 28 September 2011 в 23:41

nlaq указывает, что instanceof может использоваться, чтобы протестировать, если объект является экземпляром класса, который реализует интерфейс.

, Но instanceof не различает тип класса и интерфейс. Вы не знаете, ли объект класс , который, оказывается, называют IInterface.

можно также использовать API Reflection в PHP для тестирования этого более конкретно:

$class = new ReflectionClass('TheClass');
if ($class->implementsInterface('IInterface'))
{
  print "Yep!\n";
}

См. http://php.net/manual/en/book.reflection.php

55
ответ дан nlaq 8 November 2008 в 04:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: