Was bedeutet neue Statik? [duplicate]

Lesezeit: 2 Minuten

Benutzer-Avatar
Hallo

Ich habe in einigen Frameworks diese Codezeile gesehen:

return new static($view, $data);

wie verstehst du das new static?

  • 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


Benutzer-Avatar
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

1345280cookie-checkWas bedeutet neue Statik? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy