Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

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_name\n <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 => value,

где 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 : $value\n <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 и выше.

<< Предыдущий параграф Следующий параграф >>
Оглавление