2017-02-17 96 views
1

是否可以定義一個靜態屬性,同時包含另一個靜態屬性?像下面的代碼示例東西:聲明靜態屬性,同時包括另一個靜態屬性

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

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

顯然,這並不編譯,將導致以下錯誤:

致命錯誤:常量表達式包含無效操作

有什麼辦法在聲明你自己的同時調用另一個類的靜態/常量?我試圖減少代碼的重複使用,這對我來說是最簡單的方法。

很明顯,在PHP 5.6之前沒有辦法做到這一點,所以我使用PHP 7/7.1。

+0

[屬性聲明手冊頁](http://de2.php.net/manual/en/language.oop5.properties.php),「該聲明可以包括初始化,但是這個初始化必須是一個常量 - 也就是「 – hassan

回答

2

可以使一個類有const。爲此,根據工作在5.6和更高

class Foo { 
    const CON = 'Yep'; 
} 

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

我正在考慮將所有這些改爲const,因爲它們不會改變。只要我可以訪問類常量而不需要實例化類,那就行了。 5.6支持也是好的。 –

0

你可以設置一個常量與第一類變量,並用它在第二個,例如:

​​
+0

這也不是一個壞的解決方案,但我想避免在類聲明之外放置任何代碼。 –