У нас часто класс наследует один класс, а тот в свою очередь наследует другой класс и интерфейс, и т.д. Нам надо узнать является ли данный конкретный объект наследником какого-то класса или интерфейса. Т.е. в цепочке предков у него есть тот или иной класс, или нет.
Для этого в PHP5 появилось ключевое слово instanceof.
Пример:
[php] class Human {} $myBoss = new Human(); if($myBoss instanceOf Human) print('Мой Босс – человек!'); [/php]
Т.е. у нас есть класс Human. Создаем экземпляр этого класса. Далее проверка if. Далее — наследуем класс Human:
[php] class Woman extends Human {} $englishQueen = new Woman(); if($englishQueen instanceOf Human) print('Английская королева – тоже человек!'); [/php]
Такая же ситуация и с интерфейсом:
[php] interface LotsOfMoney {} class ReachPeople implements LotsOfMoney {} $billGates = new ReachPeople(); if($billGates instanceOf LotsOfMoney) print('У Билла Гейтса много денег!'); [/php]
Здесь класс наследует интерфейс. Получаем, что объект $billGates зависит от нашего интерфейса.
Немного истории instanceof
Конструкция instanceof появилась в PHP5. До этого использовалась функция is_a (). Эта функция существует и сейчас. Но в PHP5 разработчики рекомендуют использовать instanceof. Они объявили is_a () — функцией deprecated, т.е. нежелательной (возможно в будущем удаленной из php). Но поскольку у многих в коде стояла функция is_a (), то начиная с версии PHP5.3 с этой функции убрали признак deprecated. Т.е. сейчас можно использовать обе функции.