【问题标题】:PHP 7 Fatal error: Uncaught Error: Cannot use string offset as an arrayPHP 7 致命错误:未捕获的错误:不能将字符串偏移量用作数组
【发布时间】:2018-07-21 15:01:52
【问题描述】:

在有人将我的问题标记为重复之前,我想澄清一下我的情况是独一无二的,并且特定于 PHP 7(我在 UniformServer 中使用 PHP 7.1.1)。我在这里看到了所有其他类似的问题,但它们对我不起作用。

我有一个工作代码如下:

在类构造函数中:

$this->fldSection = "header";

在下面的另一个函数中:

$_ENV['validate'][$this->fldSection][$this->name] = $params;

这在 PHP 5.6 中运行良好。但是,当在 $_ENV 变量中设置 $this->fldSection = 'header' 时,这会在 PHP 7.1.1 中出现臭名昭著的“不能将字符串偏移量用作数组..”错误

我所有的变量都是动态填充的。在 PHP 7.1.1 中是否有不同/更好的方法来实现这一点?

【问题讨论】:

  • 我怀疑$_ENV['validate'] 是一个字符串或$_ENV['validate'][$this->fldSection] 是一个字符串
  • 我做了一个 $_ENV 的转储,那是一个数组。 ($_ENV 实际上是一个标准的 PHP 全局数组)。我在网上看到的信息表明这是因为$this->fldSection 被定义为文本(“标题”),后来被用作数组键。但是这段代码在 PHP 5.6 中可以完美运行。我试图了解 7.1 在这方面发生了什么变化以及如何缓解这种情况。
  • @Ravi 你能提供$_ENV的var_dump吗?

标签: php arrays php-7.1


【解决方案1】:

我终于破解了这个问题的原因。我正在使用超级全局 $_ENV 来存储我的值并尝试为其分配变量变量。但是,从 PHP 文档中,我发现超级全局变量 支持变量变量。我将变量更改为 $GLOBAL 而不是 $_ENV(如下所示)并且它起作用了。

$GLOBAL['validate'][$this->fldSection][$this->name] = $params;

我不确定为什么它适用于 5.6 而不是 7.1。我猜 PHP 可能只是从 v7 开始严格执行这些规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多