24.5. Возврат массива параметров объекта в PHP
Иногда при работе с классами возникает необходимость получить значения объектов, переменных или методов. Такая возможность упрощает программу и делает ее намного короче и понятнее. Для выполнения таких операций были созданы три функции:
• get_class_methods(),
• get_class_var(),
• get_object_vars().
Рассмотрим функции в том порядке, в котором они располагаются. Функция get_class_methods() создана для того, чтобы возвращать массив значений. Значения эти будут соответствовать именам методов в имеющемся классе. Имя класса, имена методов которого будут возвращены, и будет указываться в функции get_class_methods(). Функция имеет следующий синтаксис:
array get_class_methods(string class_name)
СОВЕТ
Что касается версии РНР 4.0.6, то там вы можете определить объект непосредственно вместо class_name. Например:
$class_methods = get_class_rnethods($class);
Приведем пример использования функции get_class_methods():
<?php
class new_class {
function new_class() {
return (true);
}
function func1() {
return(true);
}
function func2() {
return(true);
}
function func3() {
return(true);
}
}
$class = new new_class();
$class_methods = get_class_methods(get_class($class)); foreach ($class_methods as $method_name) {
echo "$method_namen <br>";
}
?>
Данный пример подробно показывает принцип применения функции get_class_methods() на практике. В примере рассматриваются четыре метода. После объявления этих методов происходит создание объекта класса. Строка
$class_methods = get_class_methods(get_class($class));
возвращает массив значений, т. е. имен функции. В свою очередь параметр, заключенный в функцию get_class_methods(), представляет собой строку get_class ($class). Эта функция позволяет вернуть строку с именем класса, принадлежащего объекту. Именно для таких операций и создавались эти функции.
После получения массива значений методов его необходимо вывести. Для этого можно применить блок программы с использованием операции последовательного вывода значений нашего массива. Результат программы будет следующий:
new_class
func
func1
func2
func3
Именно столбец имен функций.
Функция get_class_vars() позволяет получить ассоциативный массив определенных переменных указанного класса. Если переменная не является константой, эта функция ее не возвратит, т. е. функция исключит константу. Функция get_class_vars() имеет следующий синтаксис:
array get_class_vars(string class_name)
Результирующий массив элементов, который возвратит эта функция, будет ющей формы:
где varname — имя определенной переменной, a value — ее значения, т. е. функция, как было сказано ранее, возвратит ассоциативный массив.
ВНИМАНИЕ
Неинициализированные переменные класса не будут сообщены функции get_class_vars(). Когда это не учитывают, возникает много ошибок.
Рассмотрим пример:
<?php
class new_class {
var $var1; // переменная не определена
var $var2 = "foo";
var $var3 = 100;
var $var4; // переменная не определена
var $var5 = 400;
function new_class() {
return (true);
}
}
$class = new new__class();
$class_vars = get_class_vars(get_class($class) );
foreach ($class_vars as $name => $value) {
echo "$name : $valuen <br>";
}
?>
В начале класса мы объявили несколько переменных, при этом некоторым их них задали значения, другие же остались неопределены. И не важно, на каком месте они стояли. Результат все равно будет соответствующий:
var2 : foo
var3 : 100
var5 : 400
Обратите внимание на то, что переменные, которые были неопределены, в имеющийся ассоциативный массив вообще не вошли.
Когда нужно проделать аналогичную операцию, но только с объектами, используют функцию get_object_vars(). Она позволяет получать значения переменных созданного объекта, конечно, при условии, что они определены, и имеет следующий синтаксис:
array get_object_vars (object obj)
Функция возвращает ассоциативный массив определенных объектных свойств для указанного объекта obj. Если переменные, объявленные в классе (объект obj которого является образцом), не были подчинены каким-либо значениям (не имели значения), то эти переменные не будут возвращены в ассоциативный массив.
Рассмотрим пример:
<?php
class GetName {
var $name1;
var $name2;
var $name3;
function GetName ($name1, $name2) {
$this->name1 = $name1;
$this->name2 = $name2;
}
function setName($name3) {
$this->name3 = $name3;
}
function Name() {
return array("name1" => $this->name1, "name2" => $this->name2, "name3" => $this->name3);
}
}
$class1 = new GetName("Sasha", "Sveta");
print_r(get_object_vars($class1)) ;
echo"<br>";
$class1->setName("Igor");
print_r(get_object_vars($classl));
?>
При выполнении данного примера будут выведены две строки.
Первый ассоциативный массив будет иметь только два значения. Это связано прежде всего с тем, что переменной $name3 не было задано какое-либо значение. Операцией:
$classl->setName("Igor");
print_r(get_object_vars($class1)) ;
присваивается значение переменной $name3. И ассоциативный массив принял сразу не два значения, а три. В результате выполнения этого скрипта будет выведено:
Array ([name1] => Sasha [name2] => Sveta) Array ([name1] => Sasha [name2] => Sveta [name3] => Igor)
Все рассмотренные функции работают в версиях PHP 4—4.0RC1 и выше.