Nun, um herauszufinden, warum wir nicht einfach den Code ausführen und Schritt für Schritt durchgehen, was passiert, sollen wir?
Also, wenn die Klasse ein Argument für den Konstruktor nimmt, bedeutet dies, es so etwas wie folgt aussehen würde:
class A {
public function __construct($parameter){
}
}
Nun erstellen wir eine Instanz davon:
$o = new A(new A);
Aber die Argument braucht auch eine Instanz:
$o = new A(new A(new A));
Aber das Argument braucht auch eine Instanz:
$o = new A(new A(new A(new A)));
Aber das Argument muss auch eine Instanz:
$o = new A(new A(new A(new A(new A))));
Aber das Argument muss auch eine Instanz:
$o = new A(new A(new A(new A(new A(new A)))));
Aber das Argument muss auch eine Instanz:
$o = new A(new A(new A(new A(new A(new A(new A))))));
... warte jetzt ich bin verloren.
Und zur Rettung kommt "default argument values"! Wie VolkerK bereits in den Kommentaren darauf hingewiesen hat, ist es nicht unmöglich, man muss nur irgendwie die Kette irgendwo beenden. Und das ist irgendwie mit Standardwerten, z.B.
class A {
public function __construct($parameter = NULL){
}
}
So mit dem Standardwert der Kette dann enden wird, wenn Sie keine andere Instanz an den Konstruktor übergeben, und es wird den Standardwert übernehmen, die NULL
hier sein wird.
1) Haben Sie es getestet? 2) Hast du darüber nachgedacht? – Rizier123
@ Rizier123 ja https://3v4l.org/BkVh8 – Exception
Sie erhalten die Warnung, weil das "innere" 'neue A' keinen Parameter hat. https://3v4l.org/lOWhn oder https://3v4l.org/Z8flQ – VolkerK