Рассмотрев все возможные функции, продемонстрируем их применение на практике. Напишем пример с применением имеющихся у нас знаний и покажем основные принципы работы часто встречаемых описанных нами функций классов и объектов.
Для начала создадим два файла, один из которых будет содержать основные классы и подклассы со своими методами и свойствами:
<?php
// базовый класс со свойствами и методами
class Vegetable1 {
var $edible;
var $color;
function Vegetable ( $edible, $color="зеленый" ) {
$this->edible = $edible;
$this->color = $color;
}
function is_edible() {
return $this->edible;
}
function what_color () {
return this->color;
}
} // конец класса Vegetable
// расширение базового класса
class Spinach extends Vegetable {
var $cooked = false;
function Spinach() {
$this->Vegetable (true, "зеленый");
}
function cook_it() {
$this->cooked = true;
}
function is_cooked() {
return $this->cooked;
}
} // конец класса Spinach
?>
В имеющемся файле мы создали два класса, один из которых — главный, второй является распространением первого. Каждый из имеющихся классов имеет свои методы и свойства. Теперь создадим еще один класс, который будет совершать доступ к этому файлу, а также при помощи изученных функций попытаемся получить все необходимые имена классов, методов и т. д.:
<рre>
<?php
include "classes-1.inc";
// сервисные функции
function print_vars($obj) {
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
echo = "t$prop = $valn";
}
function print_methods($obj) {
$arr = get_class_methods(get_class($obj) );
foreach($arr as $method)
echo "tfunction $method()n";
}
function $class) {
global $$obj;
if (is_subclass_of ($$obj, $class) ) {
echo "Объект $obj принадлежит классу " .get_class($$obj);
echo " и является подклассом классу $classn";
}
else {
echo "Объект $obj не принадлежит подклассу $classn";
}
}
// создание двух объектов
$veggie = new Vegetable (true, "синий");
$leafy = new Spinach();
// вывод информации об объекте
echo "Объект veggie содержит следующие классы: CLASS ".get_class($veggie). "n";
echo "Объект leafy распространяется на следующие классы: CLASS ".get_class($leafy);
echo "<br> главный класс " .get_parent_class($leafy) . "n";
// показ свойств veggie
echo "nveggie: Свойстваn";
print_vars ($veggie);
// и методов leafy
echo "nleafy: Методыn";
print_methods($leafy);
echo "nПроисхождениеn";
class__parentage("leafy", "Spinach");
class_parentage("leafy", "Vegetable");
?>
</pre>
Объект veggie содержит следующие классы: CLASS vegetable
Объект leafy распространяется на следующие классы: CLASS spinach, главный класс vegetable
veggie: Свойства
edible = 1
color = синий
leafy: Методы
function vegetable()
function is_edible()
function what_color()
function spinach()
function cook_it()
function is_cooked()
Происхождение:
Объект leafy не принадлежит подклассу Spinach
Объект leafy принадлежит классу spinach и является подклассом классу Vegetable
На этом изучение классов, объектов и функций работы с ними считаем завершенным. В случае какого-либо вопроса при работе этого примера просто попытайтесь изменить его и посмотреть, что случится с результатом работы. Или же обратитесь к соответствующему описанию той или иной функции в нашей книге.