我正在创建自己的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中的常量. 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

const php 数组,php-如何在该类中创建类实例的const数组?相关推荐

  1. a.创建动物类Animal,在该类中创建一个成员方法cry(), 输出“动物会发出叫声”,以及一个eat()方法,输出“动物需要食物”; b.创建一个Animal子类Dog类,在该类中重写父类的成员

    创建Zoo类作为主类,在main方法中分别创建各个类对象 ,并调用各自类的cry()方法, 创建Dog类的对象赋值给Animal类的对象,然后调用cry()和eat()方法. ** a.创建动物类An ...

  2. python创建类的实例方法-Python中动态创建类实例的方法

    简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模 ...

  3. 详解Linux交互式shell脚本中创建对话框实例教程

    详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一 ...

  4. celery mysql flask_如何在Flask中创建Celery实例?

    我在flask程序中使用了工厂函数和蓝本,把Flask实例的创建放在了manage.py中(看过Flask Web开发这本书的同学应该懂我). 现在我想要创建一个Celery的实例(在app程序包中) ...

  5. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  6. 二维数组更改vue_使用vue中的v-for遍历二维数组的方法

    如下所示: {{itemss}} 其中,data数据为: this.data = [ [ { type: '', name: '资产', start: '期末余额', end: '期初余额' }, { ...

  7. php 动态多维数组长度,怎么在php中利用count获取多维数组的长度

    怎么在php中利用count获取多维数组的长度 发布时间:2021-01-05 16:38:55 来源:亿速云 阅读:80 作者:Leah 今天就跟大家聊聊有关怎么在php中利用count获取多维数组 ...

  8. java file数组 初始化_java从文件中读取数据并赋值给数组

    从txt文件中读取数据赋值给一维数组 字节流读入字节数组中 字节数组转化为字符串 字符创解析为字符串数组 字符串数组转化为数值,并赋值为数组 文本文件是以字节的形式储存的. 在txt文件中一个数字或者 ...

  9. python生成一个数组_在for循环中创建多个数组(Python)

    我目前遇到Numpy阵列的问题.如果在其他地方已经提出这个问题,我道歉,但我觉得我到处都是. 我最初的问题是我试图创建一个数组并用多组不同大小的站数据填充它.由于我无法使用大小不同的数据集填充相同的数 ...

最新文章

  1. TypeScript 的 ?: 、两个问号、?. 分别是什么意思?
  2. python函数的作用是_Python函数一
  3. Hive数据仓库之快速入门
  4. EM算法 大白话讲解
  5. 抢先体验微软最新客户端系统Windows 8.1!
  6. Python中通过PyPDF2实现PDF拆分
  7. c++面向对象高级编程 学习十五 组合继承关系下的构造和析构
  8. antd的tooltip如何调整间距_Word字符间距不会调?那就试试这些技巧
  9. 解决我的windows不是正版的方法?
  10. “Missing artifact.....的解决办法
  11. 元宇宙里“倒腾狗”,预示“下一代互联网”要来了?
  12. python如何实现输出表格_python如何以表格形式打印输出
  13. OSI网络七层协议与TCPIP协议
  14. TypeError: list indices must be integers or slices, not float
  15. Cookie和Session的使用及其案例分析
  16. PPT双屏,设置主屏
  17. Hbuilder内更改SVN地址(svn服务器IP变更)
  18. ASP.NET Core : 八.图说管道,唐僧扫塔的故事
  19. 基于语音的情绪识别系统(Python)
  20. python entry如何清空_如何清除tkinter中来自Entry小部件的以前输入?

热门文章

  1. from gluonts.trainer import Trainer报错
  2. python使用新线程执行目标函数
  3. java 错误无法启动_1069 错误(由于登录失败而无法启动服务)解决方法
  4. python生成器与迭代器的区别_python生成器和迭代器的区别
  5. pytorch 中的数据类型,tensor的创建
  6. 【C#】byte[]数据转化相关操作
  7. zenoss(智能监控软件)
  8. js时间格式化函数(兼容IOS)
  9. 如何添加WebService调用时的用户认证
  10. 路由到另外一个页面_如何在多个页面中,引入一个公共组件