Ich habe in einigen Frameworks diese Codezeile gesehen:
return new static($view, $data);
wie verstehst du das new static
?
Hallo
Ich habe in einigen Frameworks diese Codezeile gesehen:
return new static($view, $data);
wie verstehst du das new static
?
Leichtigkeitsrennen im Orbit
Wenn du schreibst new self()
Innerhalb der Member-Funktion einer Klasse erhalten Sie eine Instanz dieser Klasse. Das ist die Magie der self
Stichwort.
So:
class Foo
{
public static function baz() {
return new self();
}
}
$x = Foo::baz(); // $x is now a `Foo`
Du bekommst ein Foo
auch wenn der von Ihnen verwendete statische Qualifizierer für eine abgeleitete Klasse war:
class Bar extends Foo
{
}
$z = Bar::baz(); // $z is now a `Foo`
Wenn Sie Polymorphie (in gewisser Weise) aktivieren und PHP den verwendeten Qualifizierer beachten lassen möchten, können Sie die austauschen self
Stichwort für die static
Stichwort:
class Foo
{
public static function baz() {
return new static();
}
}
class Bar extends Foo
{
}
$wow = Bar::baz(); // $wow is now a `Bar`, even though `baz()` is in base `Foo`
Möglich wird dies durch die PHP-Funktion namens späte statische Bindung; Verwechseln Sie es nicht mit anderen, konventionelleren Verwendungen des Schlüsselworts static
.
hmm..kurz: new static() – gibt das Objekt der aktuellen Klasse zurück, unabhängig davon, welche Klasse erweitert wird, und new self() – gibt das Objekt aus der Klasse zurück, in der diese Methode deklariert oder erweitert wurde (letzte Version der Funktion ) … ich verstehe richtig?
– Hallo
9. April 2013 um 10:11 Uhr
ja das reicht mir) auch wenn im Grunde)
– Hallo
9. April 2013 um 10:23 Uhr
(Nein – umgekehrt!)
– Leichtigkeitsrennen im Orbit
17. August 2013 um 22:58 Uhr
Nur für den Fall, dass Sie sich fragen, ob Sie “new self” oder “new static” anstelle von “new self()” oder “new static()” verwenden können.
– Außenseiter
12. Juli um 1:12
Welcher Rahmen war das?
– Alexander G
9. April 2013 um 9:55 Uhr
Zum Beispiel Laravel, aber ich fand das nur im Kern, nicht während der Verwendung ihrer API
– Hallo
9. April 2013 um 9:56 Uhr
Auf dieser Seite finden Sie weitere Informationen; stackoverflow.com/questions/5197300/new-self-vs-new-static
– Benutzer1467267
9. April 2013 um 9:57 Uhr
PHP späte statische Bindung
– Alvin Wong
9. April 2013 um 9:57 Uhr
@Allendar: So ist es
decltype(*this)
mit deaktiviertem Polymorphismus? Was für eine schreckliche Keyword-Nutzung!– Leichtigkeitsrennen im Orbit
9. April 2013 um 10:00 Uhr