In diesem Artikel wird hauptsächlich die Analyse der Unterschiede und Ähnlichkeiten zwischen new static und new self() in PHP vorgestellt. Ich glaube, dass es Vorteile bringen kann Jeder lernt PHP-Programmierung.
Das Problem wird durch den lokalen Aufbau einer Website verursacht. Ich habe festgestellt, dass es nicht mit PHP 5.2 erstellt werden kann. Der PHP-Code der Website enthält viele Teile, die über 5.3 liegen und Änderungen erfordern, um unter 5.2 ausgeführt zu werden.
Nachdem ich den Ort gewechselt hatte, habe ich einen Platz gefunden
return new static($val);
Dieses verdammte Pferd ist unglaublich, ich habe es bisher nur gesehen
return new self($val);
Also habe ich online nachgeschaut und die beiden sind unterschiedlich.
self – Das ist diese Klasse, diese Klasse im Codesegment.
statisch – PHP 5.3 fügt nur die aktuelle Klasse hinzu, was ein bisschen wie $this ist. Es wird aus dem Heap-Speicher extrahiert und greift auf die aktuell instanziierte Klasse zu, sodass static diese Klasse darstellt.
Werfen wir einen Blick auf die professionelle Erklärung des Ausländers:
self bezieht sich auf dieselbe Klasse, in deren Methode die neue Operation stattfindet.
statisch in PHP 5.3 Statische Bindungen beziehen sich auf jede Klasse in der Hierarchie, für die Sie die Methode aufrufen.
Im folgenden Beispiel erbt B beide Methoden von A. self ist an A gebunden, da es in der Implementierung der ersten Methode durch A definiert ist. wohingegen static an die aufgerufene Klasse gebunden ist (siehe auch get_claimed_class() ).
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_static()); // A
Dieses Beispiel ist grundsätzlich auf einen Blick verständlich.
Ich verstehe das Prinzip, aber das Problem ist noch nicht gelöst. Wie kann ich das Problem der Rückgabe von new static($val); lösen?
Tatsächlich ist es so einfach wie die Verwendung von get_class($this); Der Code lautet wie folgt:
class A { public function create1() { $class = get_class($this); return new $class(); } public function create2() { return new static(); } } class B extends A { } $b = new B(); var_dump(get_class($b->create1()), get_class($b->create2())); /* The result string(1) "B" string(1) "B" */
Interessierte Freunde können den Beispielcode testen und ich glaube, es wird neuen geben Gewinne!
Das obige ist der detaillierte Inhalt vonEinführung in die Unterschiede und Verwendung zwischen new static() und new self(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!