PHP Klassen: Ausgabe von Werten in Konstruktor

Hallo,

ich habe eine Klasse geschrieben mit einem Konstruktor. Durch den Konstruktor sollen Optionen auf der Seite eingestellt werden und eine Verbindung zur Datenbank aufgebaut. Allerdings harkt es hier.

Die Klasse namens "Server" ist ganz oben im Skript eingebaut und wird von einer Kindfunktion "Client" aufgerufen, was ich erwarte ist eine Ausgabe:

class Server { public $zu;

private function TestsSa() { echo '<h1>Test hier das</h1>'; }

public function __construct() {

$this->zu = 'Test';

$this->TestsSa();

} }

class Client extends Server {     // Andere Funktionen }

$do = new Client();

Durch das initialisieren von "Client", wird automatisch der Konstruktor von der Klasse "Server" aufgerufen. Das weiß ich deshalb, da ich im Konstruktor der Elternklasse die Datenbankverbindung mittels PDO aufbaue und in anderen Funktionen der Kindklasse nutzen kann. Wenn ich nämlich die Klasse Server und die Klasse Client initialisiere, dann führt es einige Befehle doppelt aus, deshalb habe ich im Skript nur einmal new Client() stehen, damit das nicht doppelt kommt.

So, die Funktion TestsSa wird garnicht ausgeführt. Schreibe ich in meine PHP Seite $do->zu bleibt das ebenfalls leer. Keine einzige Ausgabe. Kann man in Konstruktoren keine Variablen ändern oder Funktionen aufrufen, die danach öffentlich genutzt werden?

Mache ich $do = new Server();, funktioniert es. Aber warum plötzlich, wenn ich doch die Kindklasse initialisiere, dann führt er auch den Konstruktor der Serverklasse aus.

Ich bin ein Wenig verwirrt, wann der eine, wann der andere Fall eintritt um das zu vermeiden, dass einige Funktionen durch den Konstruktor doppelt ausgeführt werden.

Vielen Dank, Rolf

  1. Hallo,

    ich habs. Gerade jetzt herausgefunden... Ich habe gestern Abend noch einen Konstruktor in der Kindklasse definiert. Definiert man einen Konstruktor in einer Kindklasse, wird der der Elternklasse ja nicht mehr automatisch aufgerufen...

    Daher muss man in der Kindklasse, wenn man den Konstruktor behalten möchte, den Konstruktor explizit aufrufen mit:

    parent::__construct();

    Ich Dummerchen. So viel Zeit verschwendet und die Welt nicht mehr verstanden, warum vorher noch alles funktionierte und plötzlich garnichts mehr ging.

    mfg, Rolf