Wenn Du eine extends-Klasse schreibst, dann erwartet das erbende Objekt auch die Konstruktor-Parameter des Parents. Sonst kann ja der Parent nicht erzeugt werden, der aber einen Teil des Childs ist, dass Du mit extends definierst. Du kannst nur Parameter hinzugeben, aber keine weglassen.
Zu Deinem vorigen Problem: Das scheint mir alles sehr unlogisch aufgebaut zu sein, und das ist auch der Knackpunkt : es kann so nicht funktionieren.
1) Du bindest die Klassen-Files innerhalb des Konstruktors von All ein (das soll ein Repository werden, oder?) - das finde ich schon mal sehr gewagt, würde ich nicht dazu raten - kA ob das überhaupt funktioniert, ich hab nie getestet, Klassen innerhalb eines Konstruktors zu deklarieren
2) $_SESSION['objects'] wird nie true (da steht ob
ejects)
3) Du verwendest in All lokale Variablen des Konstruktors, anstatt deklarierte Objekt-Variablen ($this), d.h. das Repository ist damit ziemlich unnütz, denn als Variablen stehen Dir die Objekte nur im Konstruktor von All zur Verfügung, außerhalb bzw. in einer anderen Methode von All musst Du immer wieder an die Session linken.
4) Alle Objekte in der Session sind beim Neuaufruf verloren, weil Du die Session an lokale Objekte bindest und nicht umgekehrt (der Speicherbereich, den Du mit new definierst, gilt nur innerhalb des Konstruktors)
5) den Parameter $all im Konstruktor von All verstehe ich nicht :) Wozu ist der da?
Ich würde Dir zu einer sichereren Variante raten (vorsicht, ungetestet):
<?php
require_once "db_class.php";
require_once "form_class.php";
require_once "navi_class.php";
require_once "display_class.php";
class All {
var $db;
var $form;
var $navi;
var $display;
function All(){
if(!isset($_SESSION['objects']) || !$_SESSION['objects']){
//if objects are not saved in the session(first visit or failure) they will be set
$_SESSION['db'] = new DB;
$this->db =& $_SESSION['db'];
$_SESSION['form'] = new Form;
$this->form =& $_SESSION['form'];
$_SESSION['navi'] = new Navi;
$this->navi =& $_SESSION['navi'];
$_SESSION['display'] = new Display;
$this->display =& $_SESSION['display'];
$_SESSION['objects'] = true;
} else {
//if they are set, the access is simplified
$this->db =& $_SESSION['db'];
$this->form =& $_SESSION['form'];
$this->navi =& $_SESSION['navi'];
$this->display =& $_SESSION['display'];
}
}
function showSiteParts() {
//show different parts of the site
$this->display->headshow();
$this->display->topshow();
$this->display->navishow();
$this->display->rightshow();
$this->display->contentshow();
$this->display->footershow();
}
session_start();
$all = new All;
$all->showSiteParts();
?>