2016-04-18 2 views
0

Lassen Sie uns sagen, dass ich die folgende Klasse:Können Sie statisch in PHP auf eine nicht statische Klasseneigenschaft zugreifen?

class A { 
    public $Foo; 
    public $Foo2; 

    public static function $Current; 

    public static function setCurrent($Foo, $Foo2) { 
     self::$Current=new A($Foo, $Foo2); 
    } 

    public function __construct($Foo, $Foo2) { 
     $this->Foo=$Foo; 
     $this->Foo2=$Foo2; 
    } 

} 

Wenn ich den folgenden Code schreiben:

A::setCurrent(1,2); 

ist es eine Art und Weise, später A::$Foo, zu verwenden und den Inhalt von A::$Current->Foo bekommen?

Antwort

0

Ihr Code weist einige Fehler auf.

public static setCurrent sollte public static function setCurrent sein und public __construct sollte public function __construct sein.

Sie können A::$Foo nicht verwenden, da dies keine statische Eigenschaft ist. Aber Sie können A::$Current->Foo anrufen.

Aber das Design der Klasse ist meiner Meinung nach schlecht. Sie sollten die Kapselung verwenden. Und ich verstehe nicht, warum Sie eine Instanz erstellen und dann in eine Klasseneigenschaft einfügen möchten.

+0

Ja, danke, dass Sie darauf hingewiesen haben, das ist nicht mein genauer Anwendungsfall, ich wollte einfach einen einfacheren Code, um das Verständnis zu erleichtern. Der Anwendungsfall wäre der folgende: Es wird immer eine Standardklasse "A" definiert sein, auf die ich schnell zugreifen möchte, ohne das initialisierte Objekt als globale Variable und alles zu speichern, aber es kann mehr "A" -Klassen geben im gesamten Code definiert. Ich weiß, dass, wie es geschrieben steht, es nicht funktionieren wird, ich denke darüber nach, die Magie irgendwie zu nutzen, um mein gewünschtes Ergebnis zu erreichen. –

Verwandte Themen