数组错误可能是PHP版本问题吗?

时间:2019-02-26 15:34:05

标签: php arrays version

自去年10月以来,我在一个网站上工作,下面的代码行可以正常工作:

if(empty($post_types))  
{ 
  $post_types[] = 'post';         
  $post_types[] = 'product-list';
}

我以前从没有在PHP中看到过这种结构,(而且自从我开始用C语言进行编程以来,这有点恼人),但是它确实有效。

我们使用相同的技术和基本设置启动了另一个站点,该站点在相同的代码行中引发了以下错误,

  

“未捕获的错误:字符串不支持[]运算符...”

这些站点托管在同一位置,但是我注意到它们使用的是不同的PHP 7.x版本。我做了一些研究,以查看行为是否是由于PHP 7.3的更改而引起的,但是我没有找到答案。

请注意,我的问题是这种情况是否可能是PHP版本问题,而不是如何解决数组问题(我用

更改过)
$post_types = array('post', 'product-list');

1 个答案:

答案 0 :(得分:2)

我在PHP文档Creating/modifying with square bracket syntax中找到了您的答案:

$arr[key] = value;
$arr[] = value;
// key may be an integer or string
// value may be any value of any type
     

如果$ arr还不存在,它将被创建,因此这也是一个   创建数组的另一种方法。但是这种做法是   不鼓励使用,因为如果$ arr已经包含一些值(例如字符串   来自请求变量),则此值将保留在该位置,[]   实际上可能代表字符串访问运算符。总是更好   通过直接赋值来初始化变量。

     

注意:从PHP 7.1.0开始,在字符串上应用空索引运算符会引发致命错误。以前,该字符串被默默转换为   数组。

因此,PHP 7.1.0中发生了与您描述的问题相匹配的更改。

在您的代码中,必须将$ post_type变量初始化为字符串[编辑:我只能使用空字符串来重现问题],并且之前(PHP <7.1.0)已将其静默转换为数组。