[英]How to create const arrays of instances of a class, within that class?
我正在創建自己的PHP類。 我希望在該類的實例類中具有常量引用,如枚舉。
我不斷收到2個錯誤:1。常量不能是數組2.第11行解析錯誤(見下文)
怎么了? 我真的沒有一個恆定的陣列嗎? 我來自Java背景......
這是我的代碼:
class Suit {
const SUIT_NAMES = array("Club", "Diamond", "Heart", "Spade");
const COLOURS = array("red", "black");
const CLUB = new Suit("Club", "black"); // LINE 11
const DIAMOND = new Suit("Diamond", "red");
const HEART = new Suit("Heart", "red");
const SPADE = new Suit("Spade", "black");
var $colour = "";
var $name = "";
function __construct($name, $colour) {
if (!in_array(self::SUIT_NAMES, $name)) {
throw new Exception("Suit Exception: invalid suit name.");
}
if (!in_array(self::COLOURS, $colour)) {
throw new Exception("Suit Exception: invalid colour.");
}
$this->name = $name;
$this->colour = $colour;
}
}
更新 :
從PHP 5.6開始,可以定義類型為array
的const
。
從PHP 7.1開始,可以定義常量可見性(在它始終是公共的之前)。
原始答案 :
在PHP中,數組和對象都不能分配給常量。 文檔說它必須是“持續表達”。 我不知道他們是否定義了這個術語,但是他們注意到它排除了“變量,屬性,數學運算的結果或函數調用”。
毫不奇怪,也不允許構造函數調用,雖然array
實際上不是函數,但它“類似於函數”。
可能你必須像下面那樣進行解決。 我們使用private static
而不是實際常量。 這意味着您需要手動避免重新分配,並且必要時必須提供getter( getClub
等,並命名為您)。
此外,因為您無法將對象分配給static
,並且PHP沒有靜態初始值設定項,所以我們在構造函數中按需初始化。
一個不相關的問題是你有向后的in_array
class Suit {
private static $CLUB, $DIAMOND, $HEART, $SPADE;
private static $SUIT_NAMES = array("Club", "Diamond", "Heart", "Spade");
private static $COLOURS = array("red", "black");
private static $initialized = false;
function __construct($name, $colour) {
if(!self::$initialized)
{
self::$CLUB = new Suit("Club", "black");
self::$DIAMOND = new Suit("Diamond", "red");
self::$HEART = new Suit("Heart", "red");
self::$SPADE = new Suit("Spade", "black");
self::$initialized = true;
}
if (!in_array($name, self::$SUIT_NAMES)) {
throw new Exception("Suit Exception: invalid suit name.");
}
if (!in_array($colour, self::$COLOURS)) {
throw new Exception("Suit Exception: invalid colour.");
}
$this->name = $name;
$this->colour = $colour;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.