Php 如何在类中创建类实例的常量数组?

Php 如何在类中创建类实例的常量数组?,php,arrays,enums,constants,Php,Arrays,Enums,Constants,我正在创建自己的PHP类。我希望在该类中有该类实例的常量引用,比如枚举 我一直有两个错误: 1.常量不能是数组 2.第11行的分析错误(见下文) 怎么了?我真的不能有一个常量数组吗?我来自Java背景 这是我的代码: class Suit { const SUIT_NAMES = array("Club", "Diamond", "Heart", "Spade"); const COLOURS = array("red", "black"); const CLUB =

我正在创建自己的PHP类。我希望在该类中有该类实例的常量引用,比如枚举

我一直有两个错误: 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中,数组和对象都不能指定给常量。我不知道他们是否定义了这个术语,但他们注意到它排除了“变量、属性、数学运算的结果或函数调用”

构造函数调用也不被允许,这并不奇怪,尽管
array
不是真正的函数,但它是“类似函数的”

也许你需要做一个如下的工作。我们使用
私有静态
而不是实际常量。这意味着您需要手动避免重新分配,并且如果需要,必须提供getter(
getClub
等,由您自己命名)

另外,由于您不能将对象分配给
静态
,并且PHP没有静态初始值设定项,因此我们在构造函数中按需初始化

一个不相关的问题是,您的数组中有

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;
    }
}

附近有工作吗?如果没有这个:X,我的程序将相当困难,而且对我来说,用任何其他方式来做都没有意义……那么静力学呢?同样的交易?你的代码有一个无限循环。在初始化静态属性之前,将initialized设置为true。我也缺少枚举。。。