2010-02-04 19 views
14

Wie deklarieren Sie eine Klasseneigenschaft als ein Objekt?Eigenschaft als Objekt deklarieren?

Ich habe versucht:

public $objectname = new $Object(); 

Aber es hat nicht funktioniert. Außerdem, warum sollten Sie es so machen?

Ist es nicht besser, nur dieses Objekt zu instanziieren und nur seine Mitglieder zu verwenden?

Antwort

24

Vom PHP manual on class properties (Hervorhebung von mir):

Klassenmitgliedsvariablen heißen "Eigenschaften". Sie können sie auch mit anderen Begriffen wie "Attribute" oder "Felder" bezeichnet sehen, aber für den Zweck dieser Referenz werden wir "Eigenschaften" verwenden. Sie werden mit einem der Schlüsselwörter public, protected oder private definiert, gefolgt von einer normalen Variablendeklaration. Diese Deklaration kann eine Initialisierung enthalten, aber diese Initialisierung muss ein konstanter Wert sein - das heißt, sie muss in der Lage sein, zur Kompilierzeit ausgewertet zu werden und darf nicht auf Laufzeitinformationen angewiesen sein, um ausgewertet zu werden.

Entweder schaffen es innerhalb des Konstruktors (composition)

class Foo 
{ 
    protected $bar; 
    public function __construct() 
    { 
     $this->bar = new Bar; 
    } 
} 

oder inject es im Konstruktor (aggregation)

class Foo 
{ 
    protected $bar; 
    public function __construct(Bar $bar) 
    { 
     $this->bar = $bar; 
    } 
} 

setter oder Injektion verwendet werden.

class Foo 
{ 
    protected $bar; 
    public function setBar(Bar $bar) 
    { 
     $this->bar = $bar 
    } 
} 

Sie möchten favor aggregation over composition.

+2

Aggregation ist auch bekannt als "Dependency Injection" und Fabien Potencier hat ein Tutorial hier: http://fabien.potencier.org/article/11/Was-ist-Abhängigkeit-Injektion –

1

PHP unterstützt keine explizite Typisierung von Klassenmitgliedern. So kann man nicht sagen:

public Object $objectname; 

Wenn die Klasse Object vorhanden ist, und Sie möchten eine Instanz davon, versuchen:

public $objectname = new Object(); 
+2

Dies wird einen schwerwiegenden Fehler erzeugen, "Konstante Ausdruck enthält ungültige Operationen" – hassan

1

Wenn Sie gerade suchen, um eine generische Klasse instanziiert können Sie tun:

$objectname = new stdClass; 

Ich glaube nicht, Sie dies in der Deklaration einer Eigenschaft tun, so würden Sie müssen nur $ erklären Objektname und im Konstruktor auf neue stdClass setzen.

Verwandte Themen