Konstruktoren

Achtung

In PHP 3 und PHP 4 verhalten sich die Konstruktoren unterschiedlich . Die PHP 4 Semantik wird dringend empfohlen .

Konstruktoren sind Funktionen innerhalb einer Klasse , die automatisch aufgerufen wird , sobald Sie mittels new eine neue Instanz erstellen . In PHP 3 wird eine Funktion zum Konstruktor , wenn sie den gleichen Namen wie die Klasse hat . In PHP 4 wird eine Funktion zum Konstruktor , wenn sie den gleichen Namen wie die Klasse hat , in der sie definiert ist . Der Unterschied ist subtil , aber entscheidend ( siehe unten ) .

 
/

 
/

 
Funktioniert

 
sowohl

 
in

 
PHP

 
3

 
,

 
als

 
auch

 
in

 
PHP

 
4

 
.

 
class

 
Auto_Cart

 
extends

 
Cart

 
{

 
function

 
Auto_Cart(

 
)

 
    {

 
$this

 
-

 
add_item

 
("10"

 
,

 
1)

 
;

 
    }

 
}



Die Klasse Auto_Cart entspricht der Klasse Cart und hat einen Konstruktor , der Cart bereits mit einem Artikel der Nummer " 10 " initialisiert , sobald ein neuer Auto_Cart mittels "new " erstellt wird . Konstruktoren können Argumente übernehmen , die optional sein können , was sie sehr praktisch macht . Um eine Klasse auch ohne Parameter verwenden zu können , sollten alle Parameter für Konstruktoren optional sein , indem sie mit Standardwerten ausgestattet werden .

 
/

 
/

 
Funktioniert

 
sowohl

 
in

 
PHP

 
3

 
,

 
als

 
auch

 
in

 
PHP

 
4

 
.

 
class

 
Constructor_Cart

 
extends

 
Cart

 
{

 
function

 
Constructor_Cart($item

 
=

 
"10"

 
,

 
$num

 
=

 
1

 
)

 
    {

 
$this

 
-

 
add_item

 
($item

 
,

 
$num)

 
;

 
    }

 
}

 
/

 
/

 
Kaufe

 
das

 
gleiche

 
alte

 
Zeug

 
ein

 
.

 
$default_cart

 
=

 
new

 
Constructor_Cart

 
;

 
/

 
/

 
Kaufe

 
etwas

 
anderes..

 
.

 
$different_cart

 
=

 
new

 
Constructor_Cart("20"

 
,

 
17)

 
;



Sie können auch den Operator @ verwenden , um Fehlermeldungen innerhalb des Konstruktors zu unterdrücken , z.B . @new .

Achtung

In PHP 3 haben abgeleitete Klassen und Konstruktoren ein paar Einschränkungen . Sie sollten das folgende Beispiel sorgfältig lesen , um diese Einschränkungen zu verstehen .

 
class

 
A

 
{

 
function

 
A(

 
)

 
    {

 
echo

 
"I

 
am

 
the

 
constructor

 
of

 
A

 
.

 
br

 
\n"

 
;

 
    }

 
}

 
class

 
B

 
extends

 
A

 
{

 
function

 
C(

 
)

 
    {

 
echo

 
"I

 
am

 
a

 
regular

 
function

 
.

 
br

 
\n"

 
;

 
    }

 
}

 
/

 
/

 
In

 
PHP

 
3

 
wurde

 
kein

 
Konstruktor

 
aufgerufen

 
.

 
$b

 
=

 
new

 
B

 
;



In PHP 3 wird bei dem obigen Beispiel kein Konstruktor aufgerufen . Die Regel in PHP 3 besagt : ' Ein Konstruktor ist eine Funktion mit dem selben Namen wie die Klasse ' . Der Name der Klasse ist B , und nachdem in Klasse B keine Funktion namens B( ) existiert , passiert nichts .

Dies ist in PHP 4 mit der Einführung einer anderen Regel behoben : Wenn eine Klasse keinen Konstruktor hat , wird der Konstruktor der Basisklasse aufgerufen , so dieser existiert . Das obige Beispiel hätte in PHP 4 also ' I am the constructor of A . br ' ausgegeben .

 
class

 
A

 
{

 
function

 
A(

 
)

 
    {

 
echo

 
"I

 
am

 
the

 
constructor

 
of

 
A

 
.

 
br

 
\n"

 
;

 
    }

 
function

 
B(

 
)

 
    {

 
echo

 
"I

 
am

 
a

 
regular

 
function

 
named

 
B

 
in

 
class

 
A

 
.

 
br

 
\n"

 
;

 
echo

 
"I

 
am

 
not

 
a

 
constructor

 
in

 
A

 
.

 
br

 
\n"

 
;

 
    }

 
}

 
class

 
B

 
extends

 
A

 
{

 
function

 
C(

 
)

 
    {

 
echo

 
"I

 
am

 
a

 
regular

 
function

 
.

 
br

 
\n"

 
;

 
    }

 
}

 
/

 
/

 
Dies

 
ruft

 
B(

 
)

 
als

 
Konstruktor

 
auf

 
.

 
$b

 
=

 
new

 
B

 
;



In PHP 3 wird die Funktion B( ) in der Klasse A plötzlich zum Konstruktor in Klasse B , auch wenn dies nie beabsichtigt war . Die Regel in PHP 3 lautet : ' Ein Konstruktor ist eine Funktion mit dem gleichen Namen wie die Klasse ' . PHP 3 kümmert sich nicht darum , ob die Funktion in Klasse B definiert , oder ob sie nur vererbt wurde .

Dies ist in PHP 4 mit einer modifizierten Regel behoben : ' Ein Konstruktor ist eine Funktion mit dem selben Namen wie die Klasse , in der sie definiert wurde ' . So hätte die Klasse B in dem obigen Beispiel keinen eigenen Konstruktor , und würde der Konstruktor der Basisklasse aufgerufen , welcher ' I am the constructor of A . br ' ausgeben würde .

Achtung

Weder PHP 3 , noch PHP 4 rufen vom Konstruktor der abgeleiteten Klasse aus automatisch Konstruktoren der Basisklasse auf . Wenn angebracht , ist der Aufruf von Konstruktoren aufwärts Ihre Aufgabe .

Anmerkung : In PHP 3 und PHP 4 gibt es keine Destruktoren . Stattdessen können Sie register_shutdown_function( ) verwenden , um die meisten Effekte von Destruktoren zu simulieren .

Destruktoren sind Funktionen die automatisch aufgerufen werden , wenn ein Objekt entweder mittels unset( ) , oder durch Verlassen des Gültigkeitsbereiches zerstört wird . Es gibt in PHP keine Destruktoren .