IX. Klassen- und Objekt-Funktionen

Einführung

About

Diese Funktionen ermöglichen Ihnen den Zugriff auf Informationen über Klassen und Objektinstanzen . Sie können den Namen der Klasse ermitteln , zu der ein Objekt gehört , sowie ihre Eigenschaften und -methoden . Mit diesen Funktionen können Sie nicht nur die Klassenmitgliedschaft eines Objektes herausfinden , sondern auch ihre Abstammung ( d . h . welche Klasse die des Objektes erweitert ) .

Anwendungsbeispiel

In diesem Beispiel definieren wir zuerst eine Basisklasse und eine Erweiterung dieser Klasse . Die Basisklasse beschreibt ein beliebiges Gemüse , ob es eßbar ist oder nicht , sowie seine Farbe . Die Subklasse Spinat fügt eine Methode hinzu , um sie zu kochen und eine weitere , um herauszufinden , ob sie gekocht ist .

Beispiel 1 . classes.inc

 
?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

 

?





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 .

Beispiel 2 . test_script.php

 
pre

 
?php

 
include

 
"

 
classes.inc"

 
;

 
/

 
/

 
utility

 
functions

 
function

 
zeige_vars($obj

 
)

 
{

 
$arr

 
=

 
get_object_vars($obj)

 
;

 
while

 
(list($prop

 
,

 
$val

 
)

 
=

 
each($arr)

 
)

 
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





Wichtig ist in diesem Beispiel , dass das Objekt $leafy eine Instanz der Klasse Spinat ist , die eine Subklasse von Gemuese ist . Darum gibt der letzte Teil des obigen Skripts folgendes aus :

 
[

 
..

 
.

 
]

 
Abstammung

 
:




 
Objekt

 
leafy

 
gehört

 
nicht

 
zu

 
einer

 
Subklasse

 
von

 
Spinat

 
Objekt

 
leafy

 
gehört

 
zur

 
Klasse

 
spinat

 
einer

 
Subklasse

 
von

 
Gemuese





Inhaltsverzeichnis
call_user_method_array -- Call a user method given with an array of parameters [deprecated]
call_user_method -- Aufruf einer benutzerdefinierten Methode eines bestimmten Objektes
class_exists -- Prüft, ob eine Klasse definiert ist
get_class_methods -- Liefert die Namen aller Methoden einer Klasse
get_class_vars -- Liefert die Standard-Elemente einer Klasse
get_class -- Gibt den Namen der Klasse eines Objektes zurück
get_declared_classes -- Gibt ein Array mit den Namen der definierten Klassen zurück
get_object_vars -- Liefert die Elemente eines Objekts
get_parent_class -- Gibt den Namen der Elternklasse eines Objektes zurück
is_a -- Returns TRUE if the object is of this class or has this class as one of its parents
is_subclass_of -- Bestimmt, ob ein Objekt zu einer Subklasse der angegebenen Klasse gehört
method_exists -- Prüft, ob Methode in einer Klasse definiert ist