Files
php-doc-ru/reference/classobj/examples.xml
2021-08-06 09:28:43 +03:00

193 lines
5.0 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: 6f11457f11d91834e1240c3351d8c4e289371b6d Maintainer: tony2001 Status: ready -->
<!-- Reviewed: yes Maintainer: rjhdby -->
<!-- $Revision$ -->
<appendix xml:id="classobj.examples">
&reftitle.examples;
<para>
В приведённом ниже примере, мы сначала определим базовый класс
и класс его наследующий. Базовый класс описывает овощ: съедобен
ли он и какого цвета. Дочерний класс <varname>Spinach</varname>
добавляет метод приготовления овоща и проверки, был ли он уже
приготовлен.
</para>
<para>
<example>
<title>Определения классов</title>
<para><varname>Овощ</varname></para>
<programlisting role="php">
<![CDATA[
<?php
class Vegetable {
public $edible;
public $color;
public function __construct($edible, $color = "green")
{
$this->edible = $edible;
$this->color = $color;
}
public function isEdible()
{
return $this->edible;
}
public function getColor()
{
return $this->color;
}
}
?>
]]>
</programlisting>
<para><varname>Шпинат</varname></para>
<programlisting role="php">
<![CDATA[
<?php
class Spinach extends Vegetable {
public $cooked = false;
public function __construct()
{
parent::__construct(true, "green");
}
public function cook()
{
$this->cooked = true;
}
public function isCooked()
{
return $this->cooked;
}
}
?>
]]>
</programlisting>
</example>
</para>
<para>
Теперь мы создадим по объекту каждого класса и распечатаем информацию о
них, включая порядок их наследования. Также мы объявим несколько
функций-утилит, главным образом для удобного вывода результатов.
</para>
<para>
<example>
<title>test_script.php</title>
<programlisting role="php">
<![CDATA[
<?php
// зарегистрировать автозагрузчик для загрузки классов
spl_autoload_register();
function printProperties($obj)
{
foreach (get_object_vars($obj) as $prop => $val) {
echo "\t$prop = $val\n";
}
}
function printMethods($obj)
{
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method) {
echo "\tфункция $method()\n";
}
}
function objectBelongsTo($obj, $class)
{
if (is_subclass_of($obj, $class)) {
echo "Объект принадлежит к классу " . get_class($obj);
echo ", подкласс $class\n";
} else {
echo "Объект не принадлежит к подклассу $class\n";
}
}
// создание 2 объектов
$veggie = new Vegetable(true, "blue");
$leafy = new Spinach();
// вывод информации об объектах
echo "вегетарианский: CLASS " . get_class($veggie) . "\n";
echo "листовой: CLASS " . get_class($leafy);
echo ", PARENT " . get_parent_class($leafy) . "\n";
// показать вегетарианские свойства
echo "\nвегетарианский: Свойства\n";
printProperties($veggie);
// и листовые методы
echo "\nleafy: Методы\n";
printMethods($leafy);
echo "\nПроисхождение:\n";
objectBelongsTo($leafy, Spinach::class);
objectBelongsTo($leafy, Vegetable::class);
?>
]]>
</programlisting>
&examples.outputs;
<screen>
<![CDATA[
вегетарианский: CLASS Vegetable
листовой: CLASS Spinach, PARENT Vegetable
вегетарианский: Свойства
edible = 1
color = blue
листовой: Методы
function __construct()
function cook()
function isCooked()
function isEdible()
function getColor()
Происхождение:
Объект не принадлежит к подклассу Spinach
Объект принадлежит к классу Spinach, подкласс Vegetable
]]>
</screen>
<para>
Важно заметить, что, в приведённом выше примере, объект
<varname>$leafy</varname> - экземпляр класса
<classname>Spinach</classname>, который наследует класс
<classname>Vegetable</classname>.
</para>
</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
-->