Problem mit aufrufen vom Objekt einer Parentklasse

OskarMRz

Grünschnabel
Hallo, ich bin dabei mir eine treiberbasierte Datenbankklasse zu programmieren, die von einer weiteren Klasse ErrorHandler abhängig ist. So hier einmal die ErrorHandlerklasse vereinfacht mit dem Ausführungscript zusammen
PHP:
<?php
class errorHandler {
function spray($e){
echo $e;
}
}
$errorHandler = new errorHandler;
include_once('database.php');
$db=new database($errorHandler);
?>
Dazu kommt die databaseclass, hier nur vereinfacht, damit ihr ungefähr wisst, was ich mache. ;)
PHP:
<?php
class database{
function __construct($errorHandler){
$this->errorHandler = $errorHandler;
include_once('mysqli.php');
$this->driver=new MySQLi;
}
}
?>
Und hier MySQLi:
PHP:
<?php
class MySQLi extends database{
function __construct()
{
//Hier funktioniert die Ausgabe nicht, ich bekomme einen Fehler, dass $this->errorHandler kein Objekt ist. Kann mir bitte jemand erklären, wie ich es schaffe, dass ich das errorHandler-Objekt aus der Parentklasse Database auf MySQLi vererben kann, ohne dass ich wie bei der Databaseklasse das Objekt per Variable in die Klasse integrieren muss. 
$this->errorHandler->spray('Test');
}
}
?>
Wenn ich das Script aufrufe, bekomme ich beim Ausführen den Fehler, dass $this->errorHandler keine Objekt ist. Eigentlich hätte ich gedacht, dass diese Variable von der Databaseklasse auf MySQLi vererbt wird, scheinbar ist es nicht so. Ich würde mich freuen, wenn mir jemand erklären könnte, wie ich $this->errorHandler aus der Databaseklasse auf MySQLi vererben kann, ohne dass ich $this->errorHandler auch als Variable in die MySQLi-Klasse übergeben muss.
Ich hoffe, dass ich mich ausreichend verständlich ausgedrückt habe, sodass ihr mir helfen könnt.
 
So, nach einigen Herumprobieren, habe ich eine (mögliche?) Lösung gefunden:

PHP:
<?php
class MySQLi extends database{
  function __construct()
  {
    global $errorHandler;
    $this->errorHandler = &$errorHandler;
    $this->errorHandler->spray('Test');
  }
}
?>

Somit bräuchtest du auch nicht, das Objekt an die Parent Klasse zu übergeben.
 
So vielen Dank für deine Hilfe. Ich habe auch selbst die Lösung gefunden. ;) Das Problem, was ich bei der Vererbung nicht beachtet habe war, dass ich in der Childklasse den Konstruktor der Parentklasse überschrieben habe, somit waren alle Informationen der Parentklasse, die ich im Konstruktor gesetzt habe nicht in der Childklasse vorhanden. Danke auch für den netten Ansatz mit global, das wollte ich auch machen. Und vielen Dank für die Zeit, die du geopfert hast um nach einer Lösung für mein problem zu suchen.
 
Hmpf, da hätte ich auch selbst drauf kommen können...

Hauptsache es tut jetzt.
 
Zurück