PHP имеет много полезных функций, которые предоставляют информацию о классах и объектах. Они полезны, когда необходимо работать с объектами из других приложений, также помогают писать гибкий, удобный код. С помощью этих функций можно узнать имя класса объекта, получить его поля, методы, убедиться, создан ли он от назначенного класса и т.д.
Перечислим наиболее часто употребляемые функции:
- get_class( $obj ) – применяется для возвращения имя класса, принадлежащему объекту $obj;
- get_parent_class($className или $obj ) — возвращает имя класса, являющимся родителем класса $className, или родителем класса, чьим объектом есть $obj;
- is_a( $obj, $className ) — возвращает true, если $obj — объект класса $className, или если $obj — объект класса — потомка $className;
- $obj instanceof $className – выполняет ту же функцию, чтои is_a();
- get_class_methods($className или $obj ) — возвращает массив, который содержит имена всех методов указанного класса $className или объекта $obj;
- get_class_vars( $className ) – может возвращать ассоциативный массив всех свойств указанного класса $className вместе с их значениями по умолчанию;
- get_object_vars( $obj ) – создан возвращать ассоциативный массив всех свойств объекта $obj, вместе с их текущими значениями.
Функции get_class_vars(),get_object_vars() и get_class_methods() могут возвращать лишь те поля и методы, находящиеся в одной части действия с кодом, который их вызывает.
Поэкспериментируем с некоторыми функциями:
loggedIn = true;
}
public function logout() {
$this->loggedIn = false;
}
public function isLoggedIn() {
return $this->loggedIn;
}
public function listMyProperties() {
echo "My properties are: ";
print_r( get_object_vars( $this ) );
}
}
class Administrator extends Member {
public $adminLevel = 1;
public function createForum( $forumName ) {
echo "$this->username created a new forum: $forumName";
}
public function banMember( $member ) {
echo "$this->username banned the member: $member->username";
}
}
$admin = new Administrator();
$admin->username = "Mary";
$admin->login();
echo "1. $admin->username's class is " . get_class( $admin ) . "";
echo "2. $admin->username's parent class is " . get_parent_class( $admin ) . "";
echo "3. Is $admin->username a Member? " . ( is_a( $admin, "Member" ) ? "Yes" : "No" ) . "";
echo "4. $admin->username's methods are: ";
print_r( get_class_methods( $admin ) );
echo "5. $admin->username's class properties are: ";
print_r( get_class_vars( get_class( $admin ) ) );
echo "6. $admin->username's object properties are: ";
print_r( get_object_vars( $admin ) );
echo "7. ";
$admin->listMyProperties();
?>
Класс Member создается в скрипте с несколькими методами и полями. В нем же создается класс Administrator, в котором добавляется поле public $adminLevel, также пара методов banMember() и createForum(), располагающихся только в объектах класса Administrator.
После того как создан класс, создаем объект класса Administrator. Его нужно сохранить в переменной $admin. Называем его «Mary. С помощью вызова метода login() даем админу логин.
В конце скрипта применяем разные функции к классам и обьектам.
Смотрим результат:
Mary's class is Administrator
Mary's parent class is Member
Is Mary a Member? Yes
Mary's methods are: Array ( [0] => createForum [1] => banMember [2] => login [3] => logout [4] => isLoggedIn [5] => listMyProperties )
Mary's class properties are: Array ( [adminLevel] => 1 [username] => )
Mary's object properties are: Array ( [adminLevel] => 1 [username] => Mary )
My properties are: Array ( [adminLevel] => 1 [username] => Mary [loggedIn] => 1 )



