2016-03-25 13 views
2

Ich habe irgendwo gelesenKönnen wir ein Objekt als Argument im Objektaufruf übergeben?

Der Parameter eines Konstruktors jeglicher Art, außer dass die Klasse sein kann, zu dem es gehört.

So

$obj = new class_name(new class_name()); 

dies in PHP erlaubt ist?

+4

1) Haben Sie es getestet? 2) Hast du darüber nachgedacht? – Rizier123

+0

@ Rizier123 ja https://3v4l.org/BkVh8 – Exception

+0

Sie erhalten die Warnung, weil das "innere" 'neue A' keinen Parameter hat. https://3v4l.org/lOWhn oder https://3v4l.org/Z8flQ – VolkerK

Antwort

4

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

Standard-Parameterwerte zur Rettung ;-) – VolkerK

+1

Nun, das wird unendlich gehen – Exception

+0

@Exception Sie haben die ["Aha-Effekt"] (https: //en.wikipedia.org/wiki/Eureka_effect). – Rizier123

Verwandte Themen