我得到一個錯誤:PHP錯誤:致命錯誤:常量表達式包含無效操作
Fatal error: Constant expression contains invalid operations in config.php on line 214
這條線是:
protected static $dbname = 'mydb_'.$appdata['id'];
無論我做了引號任何錯誤?或者別的地方?
我對錯誤消息的搜索只顯示了不同的原因(函數定義中的動態默認值)。
我得到一個錯誤:PHP錯誤:致命錯誤:常量表達式包含無效操作
Fatal error: Constant expression contains invalid operations in config.php on line 214
這條線是:
protected static $dbname = 'mydb_'.$appdata['id'];
無論我做了引號任何錯誤?或者別的地方?
我對錯誤消息的搜索只顯示了不同的原因(函數定義中的動態默認值)。
Like any other PHP static variable, static properties may only be initialized using a literal or constant before PHP 5.6; expressions are not allowed. In PHP 5.6 and later, the same rules apply as const expressions: some limited expressions are possible, provided they can be evaluated at compile time.
所以你不能初始化另一個變量的靜態變量。用常量字符串替換$appdata['id']
或刪除static
屬性。
這是因爲靜態聲明在編譯時解決,當其他變量的內容是不知道(見this other page of official doc)。
Raja這是因爲一個靜態變量包含一個常量值。但是,在你的情況:
protected static $dbname = 'mydb_'.$appdata['id'];
$ APPDATA [「身份證」]是動態的,可以在執行過程中改變它的值。這就是錯誤顯示的原因。
我明白了,我只是學習善意引導我,因爲在這種情況下,我需要關聯一個動態變量。所以,我應該如何關聯動態數據庫名稱 –
除非你陷入困境與反思,我能想到的唯一的辦法有一個靜態的私人/保護類與動態生成的價值屬性是在類的外部計算的話:
class Foo {
protected static $dbname = DBNAME;
public static function debug() {
return Foo::$dbname;
}
}
$appdata = array(
'id' => 31416,
);
define('DBNAME', 'mydb_'.$appdata['id']);
var_dump(Foo::debug());
在您的精確使用但是,它的可能,這是沒有什麼好理由的屬性是靜態的。在這種情況下,這是因爲使用構造也很簡單:
class Foo {
protected $dbname;
public function __construct($appdata){
$this->dbname = 'mydb_'.$appdata['id'];
}
public function debug() {
return $this->dbname;
}
}
$appdata = array(
'id' => 31416,
);
$foo = new Foo($appdata);
var_dump($foo->debug());
我有這個錯誤,我的修補程序是不是類屬性數組
public static $config_array = array(
'start_date' => date('Y-m-d H:i:s') // No can do
);
內聲明的日期。如果你不說什麼對你所發現的解釋不清楚,人們可能會浪費時間再次撰寫相同的信息。 –
@ÁlvaroGonzález對不起隊友,Al Fonce的回答在這裏解決了我的問題。實際上其他類似的標題,我在這裏找到SO只有相似的標題,但查詢不同隊友。這就是爲什麼我問這個問題 –
然後,另一種表達方式就是「我在這裏找不到類似的問題」,如果你什麼都不說,我會說這是明確的假設。我冒昧地編輯你的問題來反映這一點。沒關係,如果沒有愚蠢的話,問題本身可能會非常有趣(如果有愚蠢的話,它可能會被鏈接到一個)。 –