instanceof

Ключевое слово instanceof

У нас часто класс наследует один класс, а тот в свою очередь наследует другой класс и интерфейс, и т.д. Нам надо узнать является ли данный конкретный объект наследником какого-то класса или интерфейса. Т.е. в цепочке предков у него есть тот или иной класс, или нет.

Для этого в PHP5 появилось ключевое слово instanceof.

Пример:

class Human {}
$myBoss = new Human();
if($myBoss instanceOf Human)
print('Мой Босс – человек!');

Т.е. у нас есть класс Human. Создаем экземпляр этого класса. Далее проверка if. Далее — наследуем класс Human:

class Woman extends Human {}
$englishQueen = new Woman();
if($englishQueen instanceOf Human)
print('Английская королева – тоже человек!');

Такая же ситуация и с интерфейсом:

interface LotsOfMoney {}
class ReachPeople implements LotsOfMoney {}
$billGates = new ReachPeople();
if($billGates instanceOf LotsOfMoney)
print('У Билла Гейтса много денег!');

Здесь класс наследует интерфейс. Получаем, что объект $billGates зависит от нашего интерфейса.

Немного истории instanceof

Конструкция instanceof появилась в PHP5. До этого использовалась функция is_a (). Эта функция существует и сейчас. Но в PHP5 разработчики рекомендуют использовать instanceof. Они объявили is_a () — функцией deprecated, т.е. нежелательной (возможно в будущем удаленной из php). Но поскольку у многих в коде стояла функция is_a (), то начиная с версии PHP5.3 с этой функции убрали признак deprecated. Т.е. сейчас можно использовать обе функции.




Добавить комментарий

Ваш e-mail не будет опубликован.