1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 16:52:12 +01:00
Files
archived-doc-ru/reference/classobj/examples.xml
2021-01-05 20:16:26 +03:00

178 lines
4.6 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 62d53f70bd8d83c2b5abf2b6d39b53657a2f41ae Maintainer: tony2001 Status: ready -->
<!-- Reviewed: yes Maintainer: rjhdby -->
<!-- $Revision$ -->
<appendix xml:id="classobj.examples">
&reftitle.examples;
<para>
В приведённом ниже примере, мы сначала определим базовый класс
и класс его наследующий. Базовый класс описывает овощ: съедобен
ли он и какого цвета. Дочерний класс <varname>Spinach</varname>
добавляет метод приготовления овоща и проверки, был ли он уже
приготовлен.
</para>
<para>
<example>
<title>classes.inc</title>
<programlisting role="php">
<![CDATA[
<?php
// базовый класс с основными свойствами и методами
class Vegetable {
var $edible;
var $color;
function __construct($edible, $color="green")
{
$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 __construct()
{
parent::__construct(true, "green");
}
function cook_it()
{
$this->cooked = true;
}
function is_cooked()
{
return $this->cooked;
}
} // конец класса Spinach
?>
]]>
</programlisting>
</example>
</para>
<para>
Теперь мы создадим по объекту каждого класса и распечатаем информацию о
них, включая порядок их наследования. Также мы объявим несколько
функций-утилит, главным образом для удобного вывода результатов.
</para>
<para>
<example>
<title>test_script.php</title>
<programlisting role="php">
<![CDATA[
<pre>
<?php
include "classes.inc";
// функции-утилиты
function print_vars($obj)
{
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
echo "\t$prop = $val\n";
}
function print_methods($obj)
{
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method)
echo "\tfunction $method()\n";
}
function class_parentage($obj, $class)
{
if (is_subclass_of($GLOBALS[$obj], $class)) {
echo "Object $obj belongs to class " . get_class($GLOBALS[$obj]);
echo " подкласс класса $class\n";
} else {
echo "Объект $obj более не является подклассом $class\n";
}
}
// создание экземпляров объектов
$veggie = new Vegetable(true, "blue");
$leafy = new Spinach();
// распечатка информации об объектах
echo "veggie: CLASS " . get_class($veggie) . "\n";
echo "leafy: CLASS " . get_class($leafy);
echo ", PARENT " . get_parent_class($leafy) . "\n";
// показать свойства объекта класса Spinach
echo "\nveggie: Properties\n";
print_vars($veggie);
// и методы объекта базового класса Vegetable
echo "\nleafy: Methods\n";
print_methods($leafy);
echo "\nParentage:\n";
class_parentage("leafy", "Spinach");
class_parentage("leafy", "Vegetable");
?>
</pre>
]]>
</programlisting>
<para>
Важно заметить, что, в приведённом выше примере, объект
<varname>$leafy</varname> - экземпляр класса
<classname>Spinach</classname>, который наследует класс
<classname>Vegetable</classname>,
вследствие чего последняя часть скрипта выведет:
</para>
<screen>
<![CDATA[
[...]
Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class spinach a subclass of Vegetable
]]>
</screen>
</example>
</para>
</appendix>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->