ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-如何在该类中创建类实例的const数组?

2019-12-09 00:28:11  阅读:357  来源: 互联网

标签:enums const constants arrays php


我正在创建自己的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;
    }
}

解决方法:

更新:

As of PHP 5.6 it’s possible to define a const of type array.

Also as of PHP 7.1 it’s possible to define constant visibility (before it would always be public).

原始答案:

数组和对象都不能分配给PHP中的常量. documentation说它必须是“常量表达式”.我不知道他们是否定义了该术语,但他们注意到它不包括“变量,属性,数学运算结果或函数调用.”.

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

可能您需要像下面这样解决.我们使用私有静态代替实际的常量.这意味着您需要手动避免重新分配,并且如果需要,必须提供一个吸气剂(getClub等,由您自己命名).

另外,由于您不能将对象分配给静态对象,并且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;
    }
}

标签:enums,const,constants,arrays,php
来源: https://codeday.me/bug/20191209/2095405.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有