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

Печать: Шрифт: Абв Абв Абв
admin 28 Февраля 2006 в 17:08:51
Функции для работы с классами и объектами

В РНР существует несколько стандартных функций для работы с классами и объектами; эти функции рассматриваются в следующих разделах. Все они часто используются на практике, особенно в процессе разработки интерфейса, администрирования кода и диагностики ошибок.

get_class_methods()

Функция get_class_methods( ) возвращает массив имен методов класса с заданным именем. Синтаксис функции get_class_methods( ):

array get_class_methods (string имя_класса)

Простой пример использования get_class_methods( ) приведен в листинге 6.7.

Листинг 6.7. Получение списка методов класса

<?
...
class
Airplane extends Vehicle {
var
$wingspan;
function
setWingSpan($wingspan) {
$this->wingspan = $wingspan;
}
function
getWingSpan() {
return
$this->wingspan;
}
}
$cls_methods = get_class_methods(Airplane);
// Массив $cls_methods содержит имена всех методов,
// объявленных в классах "Airplane" и "Vehicle"
?>


Как видно из листинга 6.7, функция get_class_methods( ) позволяет легко получить информацию обо всех методах, поддерживаемых классом.

get_class_vars()

Функция get_class_vars( ) возвращает массив имен атрибутов класса с заданным именем. Синтаксис функции get_class_vars( ):

array get_class_vars (string имя_класса)

Пример использования get_class_vars( ) приведен в листинге 6.8.

Листинг 6.8. Получение списка атрибутов класса функцией get_class_vars( )

<?
class Vehicle {
var
$model;
var
$current_speed; }
class
Airplane extends Vehicle {
var
Swingspan; } $a_class = "Airplane";
$attribs = get_class_vars($a_class);
// $attribs = array ( "wingspan", "model", "current_speed")
?>


Массив $attribs заполняется именами всех атрибутов класса Airplane.

get_object_vars()

Функция get_object_vars( ) возвращает ассоциативный массив с информацией обо всех атрибутах объекта с заданным именем. Синтаксис функции get_object_vars( ):

array get_object_vars (object имя_обьекта)

Пример использования функции get_object_vars( ) приведен в листинге 6.9.

Листинг 6.9. Получение информации о переменных объекта
<?
class Vehicle {
var
Swheels;
}
class
Land extends Vehicle {
var
Sengine;
}
class
car extends Land {
var
$doors:
function
car($doors, $eng, $wheels) {
$this->doors = $doors;
$this->engine = $eng;
$this->wheels = $wheels;
}
function
get_wheels() {
return
$this->wheels;
}
}
$toyota = new car(2,400,4);
$vars = get_object_vars($toyota);
while (list(
$key, $value) = each($vars)) :
print
"$key ==> $value <br>";
endwhile;
// Выходные данные:
// doors ==> 2
// engine ==> 400
// wheels ==> 2
?>


Функция get_object_vars( ) позволяет быстро получить всю информацию об атрибутах конкретного объекта и их значениях в виде ассоциативного массива.

method_exists()

Функция method_exists( ) проверяет, поддерживается ли объектом метод с заданным именем. Если метод поддерживается, функция возвращает TRUE, в противном случае возвращается FALSE. Синтаксис функции method_exists( ):

bool method_exists (object имя_обьекта. string имя_метода)

Пример использования метода method_exists( ) приведён в листинге 6.10.

Листинг 6.10. Проверка поддержки метода объектом при помощи функции method_exists()

<?
class Vehicle {
...
}
class
Land extends Vehicle {
var
$fourWheel;
function
setFourWheel Drive() {
$this->fourWeel = 1;
}
}
// Создать объект с именем $саr
$car = new Land;
// Если метод "fourWheelDrive" поддерживается классом "Land"
// или "Vehicle", вызов method_exists возвращает TRUE;
// в противном случае возвращается FALSE.
// В данном примере method_exists() возвращает TRUE.
if (method_exists($car, "setfourWheelDrive")) :
print
"This car is equipped with 4-wheel drive";
else :
print
"This car is not equipped with 4-wheel drive";
endif;
?>


В листинге 6.10 функция method_exists ( ) проверяет, поддерживается ли объектом $car метод с именем setFourWheelDrive( ). Если метод поддерживается, функция возвращает логическую истину и фрагмент выводит соответствующее сообщение. В противном случае возвращается FALSE и выводится другое сообщение.

get_class()

Функция get_class( ) возвращает имя класса, к которому относится объект с заданным именем. Синтаксис функции get_class():

string get_class(object имя_объекта);

Пример использования get_class( ) приведен в листинге 6.11.

Листинг 6.11. Получение имени класса функцией get_class( )

<?
class Vehicle {
...
class
Land extends Vehicle {
...
}
// Создать объект с именем $саr $car = new Land;
// Переменной $class_a присваивается строка "Land"
$class_a = get_class($car);
?>


В результате переменной $class_a присваивается имя класса, на основе которого был создан объект $саr.

get_parent_class()

Функция get_parent_class( ) возвращает имя родительского класса (если он есть) для объекта с заданным именем. Синтаксис функции get_parent_dass():

string get_parent_class (object имя_обьекта);

Листинг 6.12 демонстрирует использование get_parent_class( ).

Листинг 6.12. Получение имени родительского класса функцией get_parent_class( )

<?
class Vehicle {
...
}
class
Land extends Vehicle {
...
}
// Создать объект с именем $саr $саr = new Land;
// Переменной $parent присваивается строка "Vehicle"
$parent = get_parent_dass($car);
?>


Как и следовало ожидать, при вызове get_parent_class( ) переменной $parent будет присвоена строка "Vehicle".

is_subclass_of()

Функция is_subclass_of( ) проверяет, был ли объект создан на базе класса, имеющего родительский класс с заданным именем. Функция возвращает TRUE, если проверка дает положительный результат, и FALSE в противном случае. Синтаксис функции is_subclass_of():

bool is_subclass_of (object объект, string имя_класса)

Использование is_subclass_of( ) продемонстрировано в листинге 6.13.

Листинг 6.13. Использование функции is_subdass_of( )

<?
class Vehicle {
...
}
class
Land extends Vehicle {
...
}
$auto = new Land;
// Переменной $is_subclass присваивается TRUE
$is_subclass = is_subclass_of($auto, "Vehicle");
?>


В листинге 6.13 переменной $is_subclass( ) присваивается признак того, принадлежит ли объект $auto к субклассу родительского класса Vehicle. В приведенном фрагменте $auto относится к классу Vehicle; следовательно, переменной $is_subclass( ) будет присвоено значение TRUE.

get_declared_classes()

Функция get_declared_classes( ) возвращает массив с именами всех определенных классов (листинг 6.14). Синтаксис функции get_declared_classes( ):

array get_declared_classes()

Листинг 6.14. Получение списка классов функцией get_declared_classes( )

<?
class Vehicle {
...
}
class
Land extends Vehicle {
...
}
$declared_classes = get_declared_classes();
// $declared_classes = array("Vehicle", "Land")
?>


Технология объектно-ориентированного программирования не очень сложна, но полное усвоение всех концепций обычно требует некоторого времени. Однако я гарантирую, что затраченное время полностью окупится — ООП поднимет эффективность вашей работы на принципиально новый уровень.
Комментарии, по рейтингу, по дате
  Гость 28.11.2011 в 18:38:53   # 159306
  Гость 28.11.2011 в 18:39:27   # 159307
  Гость 28.11.2011 в 18:39:55   # 159308
  Гость 28.11.2011 в 19:45:36   # 159319
  Гость 28.11.2011 в 19:46:55   # 159321
  Гость 28.11.2011 в 19:47:41   # 159322
  Гость 28.11.2011 в 21:28:50   # 159340
  Гость 28.11.2011 в 21:29:24   # 159341
  Гость 28.11.2011 в 21:30:08   # 159344
  Гость 29.11.2011 в 13:39:30   # 159549
  Гость 29.11.2011 в 13:39:58   # 159550
  Гость 29.11.2011 в 13:41:03   # 159551
  Гость 12.05.2012 в 19:21:12   # 196768
йцу фывфыв фывыфыыыыыыыыыыыыыыыыыыыыыыыыыыы
  Гость 12.05.2012 в 19:21:55   # 196769
Добавить сообщение
Чтобы добавлять комментарии зарeгиcтрирyйтeсь