Files
php-doc-ru/reference/classobj/examples.xml
Andrey Gromov 8fea8ade31 63 files updated
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@340063 c90b9560-bf6c-de11-be94-00142212c4b1
2016-09-21 08:37:25 +00:00

179 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: 24f1c77edb908f0c73d7fb66410b86b18ecd84db 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 Vegetable($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 Spinach()
{
$this->Vegetable(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
-->