2017-01-24 4 views
1

Ich möchte eine anonymous class über eine Factory-Funktion instanziieren. Leider mein naiver Ansatz wirft ein Parse-Fehler Parse error: syntax error, unexpected 'class' für die letzte Zeile:Rufen Sie eine Factory-Funktion der anonymen Klasse

class Foo { 
    static function factory() { 
     return new static; 
    } 
} 
(class extends Foo {})::factory(); 

Ist so etwas möglich? Oder gibt es einen anderen Ansatz, um dasselbe Ziel zu erreichen?

+0

'return new static()' mit backets – Robbie

+0

'neue Klasse erweitert ...' – shudder

Antwort

1

Zwei Fragen:

  1. Sie müssen die statische mit new class() Syntax (dh mit Klammern)

  2. Sie müssen auch die anonyme Klasse mit new

erzeugen zurückzukehren Code:

class Foo { 
    static function factory() { 
     return new static(); 
    } 
} 
(new class extends Foo {})::factory(); 
+0

Dies instanziiert die Klasse zweimal? Und so hat die Fabrik keinen Sinn mehr (weil ich das erste Objekt direkt benutzen könnte)? – flori

+0

Ich stimme zu - was Sie codiert haben, ist sinnlos wie es ist. Bevor Sie statische Kopien einer solchen Klasse erstellen konnten, haben Sie nur den Klassennamen erhalten und eine neue Klasse erstellt. Ich bin mir nicht sicher, was Sie tun wollen, aber ich habe gefragt, dass es eine verkürzte Version eines größeren Beispiels wäre, wo foo weiter ausgebaut wurde. Dort waren statische Eigenschaften (in diesem Fall würde es mehr Sinn machen), also habe ich gerade die Parse-Fehler angegeben Sie könnten sich an Sie volleren Code wenden. – Robbie

+0

@Robbie Entschuldigung, aber warum musste er die Klasse mit Zahnspange zurückgeben? das Problem ist, dass er sein anonymes mit neuem Schlüsselwort instantiieren muss. – hassan

Verwandte Themen