1
0
mirror of https://github.com/php/doc-de.git synced 2026-03-24 23:32:10 +01:00
Files
archived-doc-de/reference/classobj/examples.xml
2010-03-29 00:47:47 +00:00

181 lines
4.1 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: hholzgra Status: ready -->
<appendix xml:id="classobj.examples">
&reftitle.examples;
<para>
In diesem Beispiel definieren wir zuerst eine Basisklasse und eine
Erweiterung dieser Klasse. Die Basisklasse beschreibt ein beliebiges
Gemüse, ob es essbar ist oder nicht, sowie seine Farbe. Die Subklasse
<varname>Spinat</varname> fügt eine Methode hinzu, um sie zu kochen
und eine weitere, um herauszufinden, ob sie gekocht ist.
</para>
<para>
<example>
<title>classes.inc</title>
<programlisting role="php">
<![CDATA[
<?php
// Basisklasse mit Eigenschaften und Methoden
class Gemuese {
var $essbar;
var $farbe;
function Gemuese( $essbar, $farbe="grün" )
{
$this->essbar = $essbar;
$this->farbe = $farbe;
}
function ist_essbar()
{
return $this->essbar;
}
function welche_farbe()
{
return $this->farbe;
}
} // Ende der Klasse Gemuese
// erweitert die Basisklasse
class Spinat extends Gemuese {
var $gekocht = false;
function Spinat()
{
$this->Gemuese( true, "grün" );
}
function koche_es()
{
$this->gekocht = true;
}
function ist_gekocht()
{
return $this->gekocht;
}
} // Ende der Klasse Spinat
?>
]]>
</programlisting>
</example>
</para>
<para>
Jetzt instantiieren wir zwei Objekte von diesen Klassen und geben
Informationen über sie aus, einschließlich ihrer Abstammung.
Wir definieren auch einige Hilfsfunktionen, hauptsächlich um eine
hübsche Ausgabe der Variablen zu erhalten.
</para>
<para>
<example>
<title>test_script.php</title>
<programlisting role="php">
<![CDATA[
<pre>
<?php
include "classes.inc";
// utility functions
function zeige_vars($obj)
{
$arr = get_object_vars($obj);
foreach (get_object_vars($obj) as $prop => $val) {
echo "\t$prop = $val\n";
}
}
function zeige_methoden($obj)
{
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method) {
echo "\tfunction $method()\n";
}
}
function klassen_abstammung($obj, $class)
{
global $$obj;
if (is_subclass_of($$obj, $class)) {
echo "Objekt $obj gehört zur Klasse ".get_class($$obj);
echo " einer Subklasse von $class\n";
} else {
echo "Object $obj gehört nicht zu einer Subklasse von $class\n";
}
}
// Instantiiere zwei Objekte
$veggie = new Gemuese(true,"blau");
$leafy = new Spinat();
// Informationen über die Objekte ausgeben
echo "veggie: KLASSE ".get_class($veggie)."\n";
echo "leafy: KLASSE ".get_class($leafy);
echo ", ELTERN ".get_parent_class($leafy)."\n";
// Zeige Eigenschaften von veggie
echo "\nveggie: Eigenschaften\n";
zeige_vars($veggie);
// und Methoden von leafy
echo "\nleafy: Methoden\n";
zeige_methoden($leafy);
echo "\nAbstammung:\n";
klassen_abstammung("leafy", "Spinat");
klassen_abstammung("leafy", "Gemuese");
?>
</pre>
]]>
</programlisting>
<para>
Wichtig ist in diesem Beispiel, dass das Objekt <varname>$leafy</varname>
eine Instanz der Klasse <varname>Spinat</varname> ist, die eine Subklasse
von <varname>Gemuese</varname> ist. Darum gibt der letzte Teil des
obigen Skripts folgendes aus:
</para>
<screen>
<![CDATA[
[...]
Abstammung:
Objekt leafy gehört nicht zu einer Subklasse von Spinat
Objekt leafy gehört zur Klasse spinat einer Subklasse von Gemuese
]]>
</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
-->