数组键作为对象属性


Array key as object property

我有一个PHP类,它有一些静态属性,比如:

static public $_TYPE_DESIGN_DRAFT = 'design_draft';
static public $_TYPE_STORYTELLING_DRAFT = 'storytelling_draft';
static public $_TYPE_OTHER = 'other';
static public $_TYPE_DATA_FILE = 'data_file';
static public $_ALLOWED_EXTENSIONS = array(       // on the next line it breaks
                self::$_TYPE_DESIGN_DRAFT => array("jpeg", "jpg", "png", "gif", "pdf", "txt", "rtf", "doc", "csv"),
                self::$_TYPE_STORYTELLING_DRAFT => array("jpeg", "jpg", "png", "gif", "pdf", "txt", "rtf", "doc", "csv"),
                self::$_TYPE_OTHER => array("jpeg", "jpg", "png", "gif", "pdf", "txt", "rtf", "doc", "csv"),
                self::$_TYPE_DATA_FILE => array("pdf", "txt", "rtf", "doc", "csv", "xls")
);

但PHP似乎不允许我定义这样一个数组,将键的值定义为同一类的静态属性。

一个解决方法是只在类的构造函数中定义$_ALLOWED_EXTENSIONS var,但我不能将其设为static,因为当它是静态的时,构造函数不会被调用。

有没有有效的解决方法?

不能像这样使用类属性。

根据我的评论;你能不做这样的事吗?

class Test
{
    static public $_TYPE_DESIGN_DRAFT = 'design_draft';
    static public $_TYPE_STORYTELLING_DRAFT = 'storytelling_draft';
    static public $_TYPE_OTHER = 'other';
    static public $_TYPE_DATA_FILE = 'data_file';
    static public $_ALLOWED_EXTENSIONS = array();
    public static function init()
    {
        self::$_ALLOWED_EXTENSIONS = array(
            self::$_TYPE_DESIGN_DRAFT => array("jpeg", "jpg", "png", "gif", "pdf", "txt", "rtf", "doc", "csv"),
            self::$_TYPE_STORYTELLING_DRAFT => array("jpeg", "jpg", "png", "gif", "pdf", "txt", "rtf", "doc", "csv"),
            self::$_TYPE_OTHER => array("jpeg", "jpg", "png", "gif", "pdf", "txt", "rtf", "doc", "csv"),
            self::$_TYPE_DATA_FILE => array("pdf", "txt", "rtf", "doc", "csv", "xls")       
        );      
    }
}
Test::init();
print_r(Test::$_ALLOWED_EXTENSIONS);