Kapitel 14. Klassen und Objekte

Inhaltsverzeichnis
Klassen
extends
Konstruktoren
::
parent
Objekte serialisieren - Objekte in Sessions
Die "magischen" Funktionen __sleep und __wakeup
Referenzen innherhalb des Konstruktors

Klassen

Eine Klasse ist eine Sammlung von Variablen und Funktionen , die mit diesen Variablen arbeiten . Eine Klasse wird folgendermaßen definiert :

 
?php

 
class

 
Cart

 
{

 
var

 
$items

 
;

 
/

 
/

 
Artikel

 
in

 
unserem

 
Einkaufswagen

 
/

 
/

 
Füge

 
dem

 
Einkaufswagen

 
$num

 
Artikel

 
der

 
Sorte

 
$artnr

 
zu

 
function

 
add_item

 
($artnr

 
,

 
$num

 
)

 
    {

 
$this

 
-

 
items[$artnr

 
]

 
+=

 
$num

 
;

 
    }

 
/

 
/

 
Nimm

 
$num

 
Artikel

 
von

 
$artnr

 
aus

 
dem

 
Einkaufswagen

 
function

 
remove_item

 
($artnr

 
,

 
$num

 
)

 
    {

 
if

 
($this

 
-

 
items[$artnr

 
]

 
$num

 
)

 
{

 
$this

 
-

 
items[$artnr

 
]

 
-=

 
$num

 
;

 
return

 
true

 
;

 
}

 
else

 
{

 
return

 
false

 
;

 
}

 
}

 
}

 
?





In diesem Beispiel wird eine Klasse " Cart " definiert . Sie besteht aus einem assoziativen Array von Produkten im Einkaufswagen und zwei Funktionen zum Hinzufügen und Entfernen von Artikeln .

Achtung

Die folgenden warnenden Bemerkungen gelten für PHP 4 .

Der Name stdClass ist reserviert , da er intern von Zend benutzt wird . Sie können in PHP keine Klasse mit dem Namen stdClass haben .

Die Funktionsnamen __sleep und __wakeup Die Funktionsnamen __sleep und __wakeup sind in PHP Klassen " magisch " . Sie können in Ihren Klassen keine Funktionen mit diesen Namen haben , außer Sie wollen sie mit dieser " magischen " Funktionalität assoziieren . Mehr Informationen dazu finden Sie weiter unten .

Sämtliche mit __ beginnende Funktionsnamen sind PHP als " magisch " vorbehalten . Es wird empfohlen , in PHP keine Funktionsnamen mit __ zu verwenden , außer Sie möchten dokumentierte " magische " Funktionalität .

Anmerkung : In PHP 4 sind nur konstante Initialisierungen für var In PHP 4 sind nur konstante Initialisierungen für var Variablen erlaubt . Um Variablen mit nicht konstanten Werten zu initialisieren , benötigen Sie eine Funktion zur Initialisierung , welche beim Erstellen eines Objektes automatisch von der Klasse aufgerufen wird . Eine solche Funktion wird Konstruktor genannt ( siehe unten ) .

 
?php

 
/

 
*

 
Keine

 
wird

 
in

 
PHP

 
4

 
funktionieren

 
*

 
/

 
class

 
Cart

 
{

 
var

 
$todays_date

 
=

 
date("Y-m-d")

 
;

 
var

 
$name

 
=

 
$firstname

 
;

 
var

 
$owner

 
=

 
'Fred

 
'

 
.

 
'Jones'

 
;

 
var

 
$items

 
=

 
array("VCR"

 
,

 
"TV")

 
;

 
}

 
/

 
*

 
So

 
sollte

 
es

 
gemacht

 
werden

 
*

 
/

 
class

 
Cart

 
{

 
var

 
$todays_date

 
;

 
var

 
$name

 
;

 
var

 
$owner

 
;

 
var

 
$items

 
;

 
function

 
Cart(

 
)

 
    {

 
$this

 
-

 
todays_date

 
=

 
date("Y-m-d")

 
;

 
$this

 
-

 
name

 
=

 
$GLOBALS['firstname']

 
;

 
/

 
*

 
etc

 
.

 
.

 
.

 
*

 
/

 
    }

 
}

 
?



Klassen sind Typen , das heißt sie sind die Blaupausen für reale Variablen . Um sie zu nutzen , muss zunächst eine Variable mit dem Operator new angelegt werden .

Dies erstellt die Objekte $cart und $another_cart aus der Klasse Cart . Dann wird die Funktion add_item( ) des $cart Objektes aufgerufen , um $cart einen Artikel mit der Artikelnummer 10 hinzuzufügen . 3 Artikel mit der Artikelnummer 0815 werden $another_cart hinzugefügt .

Sowohl $cart als auch $another_cart haben die Funktionen add_item( ) , remove_item( ) und die Variable items . Dies sind verschiedene Funktionen und Variablen . Sie können sich Objekte ähnlich den Verzeichnissen in einem Dateisystem vorstellen . Sie können in einem Dateisystem zwei verschiedene Dateien README.TXT haben , solange sie sich in verschiedenen Verzeichnissen befinden . So wie Sie in Verzeichnissen den vollen Pfadnamen eingeben müssen , um jede Datei von dem obersten Verzeichnis aus zu erreichen , müssen Sie auch den vollen Namen der aufzurufenden Funktion angeben : Das heißt für PHP , dass das Hauptverzeichnis der globale Namensbereich , und der Separator des Pfadnamens - wäre . Deshalb benennen die Namen $cart - items und $another_cart - items auch zwei verschiedene Variablen . Beachten Sie , dass die Variable $cart - items , und nicht $cart - $items genannt wird , da ein Variablenname in PHP nur ein einziges Dollarzeichen hat .

 
/

 
/

 
korrekt

 
,

 
einfaches

 
$

 
$cart

 
-

 
items

 
=

 
array(

 
"10

 
"

 
=

 
1)

 
;

 
/

 
/

 
falsch

 
,

 
denn

 
$cart

 
-

 
$items

 
wird

 
zu

 
$cart

 
-

 
"

 
"

 
$cart

 
-

 
$items

 
=

 
array("10

 
"

 
=

 
1)

 
;

 
/

 
/

 
richtig

 
aber

 
fraglich

 
,

 
ob

 
dies

 
erwünscht

 
war

 
:

 
/

 
/

 
$cart

 
-

 
$myvar

 
wird

 
zu

 
$cart

 
-

 
items

 
$myvar

 
=

 
'items'

 
;

 
$cart

 
-

 
$myvar

 
=

 
array("10

 
"

 
=

 
1)

 
;



Innerhalb einer Klassendefinition ist nicht bekannt , unter welchem Namen das Objekt in Ihrem Programm erreichbar sein wird : Als die Klasse Cart geschrieben wurde war nicht bekannt , dass das Objekt später $cart oder $another_cart genannt wird . Deshalb können Sie innerhalb der Klasse Cart selbst auch nicht $cart - items schreiben . Um nun die eigenen Funktionen und Variablen innerhalb einer Klasse anzusprechen , können Sie die Pseudo-Variable $this verwenden , welche Sie auch als ' meine eigene ' oder 'aktuelles Objekt ' verstehen können . Deshalb kann ' $this - items[$artnr ] += $num ' auch als 'addiere $num zu $artnr in meinem eigenen Array items' , oder 'addiere $num zu $artnr im Array items innerhalb des aktuellen Objektes ' lesen .

Anmerkung : Es gibt ein paar angenehme Funktionen , um mit Klassen und Objekten umzugehen . Mehr darüber erfahren Sie im Kapitel Klassen - und Objekt-Funktionen .