自去年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');
答案 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)已将其静默转换为数组。