【问题标题】:in_array does not work with class constantsin_array 不适用于类常量
【发布时间】:2015-01-01 18:44:38
【问题描述】:

我对使用新引入的数组类常量的 in_array 有疑问。当我将包含数组的类常量放入函数时,我收到警告:

Warning: in_array() expects parameter 2 to be array, unknown given in...

代码:

foreach ($fields as $key => $value) {
    if (in_array($key, self::FIELDS)) $this->$key = $value;
}

常量(类内):

const FIELDS = [
    self::FIELD_ID,
    self::FIELD_STREET,
    self::FIELD_HOUSE_NR,
    self::FIELD_POSTCODE,
    self::FIELD_CITY,
    self::FIELD_PERSONAL_NUMBER,
    self::FIELD_SELLER_NAME,
    'empty'
];

这个问题最奇怪的部分是它可以在我的本地机器上运行,没有任何错误/警告(Mac)运行 PHP 5.6.2,但在我的服务器上也运行 PHP 5.6.2。

如何解决此错误? (我不想使用静态数组...)

【问题讨论】:

  • 自我是什么::FIELDS
  • 显然 self::FIELDS 不是你想的那样,你能甩掉它吗?
  • 在我的本地机器上,self::FIELDS 是一个包含 8 个字符串的数组(应该是这样)。在我的服务器上它是“未知:0”。
  • 在这种情况下,发布的代码不相关。
  • 我在帖子中添加了常量定义。

标签: php arrays class constants


【解决方案1】:

根本问题是类常量不能是数组(除非 bluefirex 指出它是 php 5.6 或更高版本)。 PHP Constants Containing Arrays? http://php.net/manual/en/language.oop5.constants.php

【讨论】:

  • 当然!从 PHP 5.6 开始,这是一个特性。它确实可以按预期在我的本地机器上工作 - 只是不在服务器上。
【解决方案2】:

在 PHP 7.2 和 in_array 返回 FALSE 和一个类常量数组,至少在我的情况下......

我用这个作为解决方法:

if(isset(self::MAPPING_OLD_REFS[$sku]))  $sku = self::MAPPING_OLD_REFS[$sku];

【讨论】:

    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 2020-04-27
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多