为什么数组中作为默认键的类常量在php中变成了数字键?

为什么数组中作为默认键的类常量在php中变成了数字键?,php,arrays,oop,class,constants,Php,Arrays,Oop,Class,Constants,我想在发送电子邮件时保存用户设置。为了实现这一点,我将使用Mailing类的系统类常量,并将其常量用作数组键值。但是由于某些原因,这些键被转换成数字索引,运行时与类常量的匹配不再有效。当我使用单个字符串时,它会按预期工作 这是一个具有给定输出的类的示例: 你为什么这样做?常量似乎类似于标志——处理这些标志的更有效方法是将它们映射到一个数字,理想情况下使用二进制运算符。这样,您就可以“打开”所有适用的标志,只产生一个整数-更易于存储和传递 检查此项:您确定代码的其他部分不会干扰此$sendmail

我想在发送电子邮件时保存用户设置。为了实现这一点,我将使用Mailing类的系统类常量,并将其常量用作数组键值。但是由于某些原因,这些键被转换成数字索引,运行时与类常量的匹配不再有效。当我使用单个字符串时,它会按预期工作

这是一个具有给定输出的类的示例:
你为什么这样做?常量似乎类似于标志——处理这些标志的更有效方法是将它们映射到一个数字,理想情况下使用二进制运算符。这样,您就可以“打开”所有适用的标志,只产生一个整数-更易于存储和传递


检查此项:

您确定代码的其他部分不会干扰此$sendmail属性吗?我在没有使用或扩展语句的情况下运行了您的代码,无法重现您的错误。在您的示例中,设置了5个字符串键,得到了6个数字键,所以这不仅仅是一个转换。我想你的代码中还有另一部分在干扰。您是否尝试更改属性名称?实际上,我的代码有点长,常数要多得多,我只是想保持示例的整洁,并在第二个var_转储上查看第六个数字输出-因此这只是一个输入错误。很抱歉我更新了粘贴程序,基本上,我使用字符串的唯一原因是,当手动在数据库中移动时,它更具可读性,这里是mongodb和doctrine mongodb odm,所以主要是懒散。。但我现在不明白的是,我怎么能告诉常数的值是二进制值呢?非常简单!仅以存储在2:1、2、4、8、16等的单位幂中的数字为例。例如,激活标志b和c将产生01100位序列,可以作为6传递。它实际上很容易存储/处理,你只需要习惯它。我想这不是你的意思,但基本上它是有效的:-从你的链接,userSettings应该存储到一个二进制变量中,这个二进制变量是由二进制或当用户更改它时构建的。。甚至可以在mongodb中存储二进制值吗?这和我的意思不完全一样。不,你实际上不是在处理二进制值,只是处理表示二进制值的数字。So const TYPE_USER_MESSAGE_NEW=1;const TYPE_USER_MESSAGE_REPLY=2;,设置类将不再包含一个数组,而是一个数字,可以说它是一个位数组。所以你的用户设置var_dump应该是3。或8。或49。明白我的意思吗只要读一点关于位运算符之类的东西。你会得到它: