2017-02-17 2 views
1

Ist es möglich, eine statische Eigenschaft zu definieren, während eine andere statische Eigenschaft mit einbezogen wird? So etwas wie das folgende Beispiel-Code:Deklarieren einer statischen Eigenschaft beim Einbeziehen einer anderen statischen Eigenschaft

class Foo { 
    public static $foo = array(Bar::$bar); 
} 

class Bar { 
    public static $bar = "Hello"; 
} 

Offensichtlich ist dies nicht kompiliert, und verursacht den folgenden Fehler:

Fatal error: Konstanter Ausdruck enthält ungültige Operationen

Gibt es eine Möglichkeit eine andere Klasse statisch/Konstanten aufrufen, während Sie Ihre eigenen deklarieren? Ich versuche, die Wiederverwendung von Code zu reduzieren, und dies wäre der einfachste Weg für mich, dies zu tun.

Offensichtlich gibt es keine Möglichkeit, dies vor PHP 5.6 zu tun, also verwende ich PHP 7/7.1.

+0

nach [properties Erklärung Manpage] (http://de2.php.net/manual/en/language.oop5.properties.php): „Diese Erklärung kann eine Include Initialisierung, aber diese Initialisierung muss ein konstanter Wert sein - das ist " – hassan

Antwort

2

Sie können eine der Klassen eine const haben machen. Dies funktioniert in 5.6 und später

class Foo { 
    const CON = 'Yep'; 
} 

class BAR { 
    public static $var = Foo::CON; 
} 
echo BAR::$var; 
+0

Ich denke darüber nach, all dies zu const zu ändern, da sie sich sowieso nicht ändern. Solange ich auf Klassenkonstanten zugreifen kann, ohne die Klasse zu instanziieren, wird das funktionieren. Eine Unterstützung von 5,6 wäre auch gut. –

0

Sie können eine Konstante mit der ersten Klasse variabel, gesetzt und es in der zweiten, zum Beispiel:

class Bar { 
    public static $bar = 'Hello'; 
} 

define('bar_constant', Bar::$bar); 

class Foo { 
    public static $foo = array(bar_constant); 
} 

// now Foo::$foo = array('Hello') 
+0

Dies ist auch keine schlechte Lösung, aber ich möchte vermeiden, dass Code außerhalb der Klassen-Deklarationen gesetzt wird. –

Verwandte Themen