193 votes

La syntaxe d'accès aux indices des tableaux et des chaînes de caractères avec des accolades est obsolète

J'ai simplement mis à jour ma version de PHP en 7.4, et j'ai remarqué que cette erreur apparaît :

La syntaxe d'accès aux indices de tableau et de chaîne avec des accolades est obsolète

voici une partie de mon code qui déclenche l'erreur ci-dessus :

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;
}

il y a quelques bibliothèques dans mon projet qui utilisent des accolades pour accéder aux caractères individuels à l'intérieur d'une chaîne, quel est le meilleur moyen de résoudre le problème de syntaxe ?

3 votes

@AbraCadaver comment cela est-il un duplicata de ce que vous avez suggéré?

0 votes

Que voulez-vous dire par "meilleure façon de résoudre ce problème"? Qu'est-ce qui vous empêche exactement de simplement résoudre ce problème en modifiant le code?

8 votes

@NicoHaase Je suppose qu'il ne sait pas quelle est la bonne manière de le changer? C'est probablement pour cela qu'il pose sa question ici sur stackoverflow.

381voto

Pezhvak Points 633

Il est vraiment simple de résoudre le problème, cependant gardez à l'esprit que vous devriez cloner et valider vos modifications pour chaque bibliothèque que vous utilisez dans leurs dépôts pour aider les autres également.

Disons que vous avez quelque chose comme ça dans votre code:

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

depuis PHP 7.4 la méthode des accolades pour obtenir des caractères individuels à l'intérieur d'une chaîne a été obsolète, donc modifiez la syntaxe ci-dessus en ceci:

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

La correction du code dans la question ressemblera à ceci:

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 votes

Savez-vous quand la syntaxe $string{$pos} a été introduite en PHP ? Ça doit être ancien.

24 votes

Ah, techniquement, il devait être obsolète en PHP 5.1 (juin 2008), mais ils ont oublié d'ajouter le code pour notifier les gens : wiki.php.net/rfc/…

1 votes

Depuis quelle version de PHP cela fonctionne-t-il ? PHP 5.1?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X