# Функции для работы с классами и объектами

## Функция get_class

`get_class`

Сделайте объект какого-нибудь класса. Примените к объекту функцию `get_class` и узнайте имя класса, которому принадлежит объект.

Сделайте два класса: `Test1` и `Test2`. Пусть оба класса имеют свойство `name`. Создайте некоторое количество объектов этих классов и запишите в массив `$arr` в произвольном порядке. Переберите этот массив циклом и для каждого объекта выведите значение его свойства `name` и имя класса, которому принадлежит объект.

## Функция get_class_methods

`get_class_methods`

Сделайте класс `Test` с методами `method1`, `method2` и `method3`. С помощью функции `get_class_methods` получите массив названий методов класса `Test`.

Создайте объект класса `Test`, запишите его в переменную `$test`. С помощью функции `get_class_methods` получите массив названий методов объекта. Переберите этот массив циклом и в этом цикле вызовите каждый метод объекта.

## Функция get_class_vars

`get_class_vars`

Сделайте класс `Test` с публичными свойствами `prop1` и `prop2`, а также с приватными свойствами `prop3` и `prop4`.

Вызовите функцию `get_class_vars` снаружи класса `Test`. Выведите массив доступных свойств.

Вызовите функцию `get_class_vars` внутри класса `Test` (например, в конструкторе). Выведите массив доступных свойств.

## Функция get_object_vars

`get_object_vars`

Сделайте класс `Test` с публичными свойствами `prop1` и `prop2`, а также с приватными свойствами `prop3` и `prop4`. Создайте объект этого класса. С помощью функции `get_object_vars` получите массив свойств созданного объекта.

## Функция class_exists

`class_exists`

Пусть у вас есть класс `Test1` и нет класса `Test2`. Проверьте, что выведет функция `class_exists` для класса `Test1` и для класса `Test2`.

Пусть GET параметром в адресную строку передается название класса. Проверьте, существует ли такой класс. Выведите соответствующее сообщение на экран.

## Функция method_exists

`method_exists`

Сделайте класс `Test` с методом `method1` и без метода `method2`. Проверьте, что выведет функция `method_exists` для метода `method1` и для метода `method2`.

Пусть GET параметрами в адресную строку передаются название класса и его метод. Проверьте, существует ли такой класс. Если существует - проверьте существование переданного метода. Если и метод существует - создайте объект данного класса, вызовите указанный метод и выведите результат его работы на экран.

## Функция property_exists

`property_exists`

Сделайте класс `Test` со свойством `prop1` и без свойства `prop2`. Проверьте, что выведет функция `property_exists` для свойства `prop1` и для свойства `prop2`.

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

## Функция get_parent_class

`get_parent_class`

Сделайте класс `ChildClass` наследующий от `ParentClass`. С помощью функции `get_parent_class` выведите на экран родителя класса `ParentClass`.

## Функции is_subclass_of

`is_subclass_of`

Сделайте класс `ChildClass` наследующий от `ParentClass`, который в свою очередь наследует от `GrandParentClass`

С помощью функции `is_subclass_of` проверьте, является ли класс `ChildClass` потомком `GrandParentClass`.

С помощью функции `is_subclass_of` проверьте, является ли класс `ParentClass` потомком `GrandParentClass`.

С помощью функции `is_subclass_of` проверьте, является ли класс `ChildClass` потомком `ParentClass`.

## Функция is_a

`is_a`

Сделайте класс `ChildClass` наследующий от `ParentClass`. Создайте объект класса `ChildClass`, запишите его в переменную `$obj`.

С помощью функции `is_a` проверьте, принадлежит ли объект `$obj` классу `ChildClass`.

С помощью функции `is_a` проверьте, принадлежит ли объект `$obj` классу `ParentClass`.

## Функция get_declared_classes

`get_declared_classes`

Выведите на экран список всех объявленных классов.

←→
↑