使用花括号的数组和字符串偏移访问语法已经过时。

212

我刚刚将我的php版本更新到7.4,然后注意到出现了以下的错误:

使用花括号的数组和字符串偏移访问语法已被弃用

以下是导致上述错误的代码的一部分:

public function getRecordID(string $zoneID, string $type = '', string $name = ''): string
{
    $records = $this->listRecords($zoneID, $type, $name);
    if (isset($records->result{0}->id)) {
        return $records->result{0}->id;
    }
    return false;
}

我的项目中有一些库在使用花括号来获取字符串内个别字符,有什么最好的方法可以解决语法问题?


4
@AbraCadaver,这个与你所建议的重复了吗? - Pezhvak
“最好的解决方法”是什么意思?为什么不直接通过更改代码来解决这个问题? - Nico Haase
10
我猜他不知道该如何正确地更改它?这可能就是他在stackoverflow上发问的原因。 - Dtipson
2
@Abra的规范中具体的答案可以在这里找到:https://dev59.com/hOo6XIcBkEYKwwoYPR_f#59158847 - mickmackusa
1
拥有“收集答案”是可以的,但滥用它们来关闭特定答案是不正确的。 - Your Common Sense
1个回答

415

修复这个问题非常简单,但请记住,您应该在各个库的存储库中分支和提交您所使用的每个库的更改,以帮助其他人。

假设您的代码类似于以下内容:

$str = "test";
echo($str{0});

自 PHP 7.4 开始,使用花括号来获取字符串中的单个字符的方法已被弃用,因此将上述语法更改为以下内容:

$str = "test";
echo($str[0]);

修复问题中的代码将类似于以下内容:

public function getRecordID(string $zoneID, string $type = '', string $name = ''): string
{
    $records = $this->listRecords($zoneID, $type, $name);
    if (isset($records->result[0]->id)) {
        return $records->result[0]->id;
    }
    return false;
}

1
你知道在PHP中$string{$pos}语法是什么时候引入的吗?它一定很古老了。 - Henk Poley
27
啊,严格来说,花括号数组访问语法应该在PHP 5.1(2008年6月)被弃用,但是他们忘记添加通知人们的代码:https://wiki.php.net/rfc/deprecate_curly_braces_array_access#wasn_t_the_curly_brace_syntax_deprecated_once_before - Henk Poley
1
这个功能从哪个PHP版本开始支持?PHP5.1吗? - helle
1
@helle 在它被弃用之前,它是语言的一部分。 - Pezhvak
2
这是正确的修复方法,如7.4文档中所述:https://www.php.net/manual/en/migration74.deprecated.php#migration74.deprecated.core.array-string-access-curly-brace - thelr
谢谢,将{}更改为[]对我有用,我遇到了相同的错误,在squirrelmail中出现了HTTP ERROR 500 PHP致命错误:在/var/www/html/functions/strings.php的第634行不再支持使用花括号的数组和字符串偏移访问语法 - bl3ssedc0de

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接