Необходимо просмотреть объект, чтобы определить, какие методы и свойства у него есть, что позволяет написать код, работающий с любыми родовыми объектами независимо от типа.
Для исследования объекта и получения информации о нем применяются функции get_class_methods() и get_class_vars():
// изучаем машины
$car_methods = get_class_methods('car');
$car_vars = get_class_vars('car');
// действуем на основании полученных знаний
if (in_array('speed_away', $car_methods)) {
$getaway_van = new car;
$getaway_van >speed_away();
}
Редко бывает, когда есть объект, но невозможно исследовать его фактический исходный код, чтобы разобраться в его работе. Все же эти
функции могут оказаться полезными для проектов, в которых необходимо применить целый ряд различных классов, таких как автоматическое создание документации по классам, отладчиков родовых объектов и хранителей состояний, подобных функции serialize().
И функция get_class_methods(), и функция get_class_vars() возвращают массив значений. В функции get_class_methods() ключи – это числа,
а значения – это имена методов. В случае функции get_class_vars()
возвращаются и имена переменных, и значения по умолчанию (присвоенные с помощью конструкции var), при этом имена переменных
возвращаются как ключи, а значения по умолчанию, если таковые
есть, – как значения.
Другая полезная функция – это get_object_vars(). В отличие от своей
сестры, функции get_class_vars(), функция get_object_vars() возвращает информацию о переменных конкретного экземпляра объекта,
а не предка вновь созданного объекта.
Поэтому с ее помощью можно проверить статус объекта, то есть его текущее состояние в программе:
$clunker = new car;
$clunker_vars = get_object_vars($clunker); // мы передаем объект, а не класс
Нам нужна информация о конкретном объекте, поэтому передается
объект, а не имя его класса. Но функция get_object_vars() возвращает
информацию в том же формате, что и функция get_class_vars().
Это позволяет без труда написать короткий сценарий, чтобы посмотреть, как добавляются переменные класса:
$new_vars = array_diff(array_keys(get_object_vars($clunker)),
array_keys(get_class_vars('car')));
Сначала при помощи функции array_keys() извлекаем имена переменных. Затем, вызвав функцию array_diff(), определяем, какие из переменных объекта $clunker не определены в классе car.
Если вам достаточно лишь взглянуть на экземпляр объекта, и вы не
хотите разбираться с функцией get_class_vars(), то для печати значений объекта обратитесь либо к функциям var_dump(), var_export(), либо
к функции print_r(). Каждая из них выводит информацию на печать
немного по-разному; функция var_export(), по вашему выбору, может
возвращать информацию, не отображая ее.
документацию по функции get_class_vars() на http://www.php.net/getclass-vars, по функции get_class_methods() на http://www.php.net/getclass-methods, по функции get_object_vars() на http://www.php.net/getobject-vars, по функции var_dump() на http://www.php.net/var-dump, по функции var_export() на http://www.php.net/var-export и по функции print_r() на http://www.php.net/print-r.