Синтаксис доступа к смещению массива и строки с фигурными скобками устарел

Я только что обновил свою версию 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;
}

в моем проекте есть несколько библиотек, которые используют фигурные скобки для получения отдельных символов внутри строки, как лучше всего изменить проблему синтаксиса?


person Pezhvak    schedule 03.12.2019    source источник
comment
@AbraCadaver, как эта копия того, что вы предложили?   -  person Pezhvak    schedule 03.12.2019
comment
Что вы подразумеваете под лучшим способом решить эту проблему? Что именно мешает вам просто исправить эту проблему, изменив код?   -  person Nico Haase    schedule 06.12.2020
comment
@NicoHaase Я думаю, он не знает, как правильно это изменить? Вероятно, поэтому он спрашивает здесь о stackoverflow.   -  person Dtipson    schedule 04.02.2021


Ответы (1)


Решить проблему действительно просто, однако имейте в виду, что вы должны разветвить и зафиксировать свои изменения для каждой библиотеки, которую вы используете в их репозиториях, чтобы помочь другим.

Допустим, у вас есть что-то вроде этого в вашем коде:

$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;
}
person Pezhvak    schedule 03.12.2019
comment
Вы случайно не знаете, когда в PHP появился синтаксис $string{$pos}? Он должен быть древним. - person Henk Poley; 10.11.2020
comment
Ах, технически это должно было быть объявлено устаревшим в PHP 5.1 (июнь 2008 г.), но они забыли добавить код для уведомления людей ????: ="nofollow noreferrer">wiki.php.net/rfc/ - person Henk Poley; 10.11.2020
comment
с какой версии php это работает? php5.1? - person helle; 14.01.2021
comment
@helle это было частью языка до того, как оно устарело - person Pezhvak; 16.01.2021
comment
Это правильное исправление, как описано в документации 7.4: php.net/manual/en/ - person thelr; 09.03.2021