Maison >développement back-end >tutoriel php >Pourquoi PHP émet-il des « normes strictes : seules les variables doivent être transmises par référence » lors de l'utilisation de array_shift() ?

Pourquoi PHP émet-il des « normes strictes : seules les variables doivent être transmises par référence » lors de l'utilisation de array_shift() ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-20 07:39:11713parcourir

Why Does PHP Issue

Comprendre le passage de références en PHP : normes strictes et Array_Shift()

En PHP, le mode normes strictes peut émettre des avertissements lors du passage de valeurs non variables par référence. Un exemple courant de ceci est lors de l'utilisation de la fonction array_shift().

Quand l'avertissement se produit-il ?

L'avertissement « Normes strictes : seules les variables doivent être transmises par référence » apparaît lorsque array_shift( ) est utilisé avec une valeur non variable passée en argument. Par exemple :

$instance = new MyClass();
$el = array_shift($instance->find(...)); // Warning

En revanche, lorsque array_shift() est appelé avec une variable contenant un tableau, aucun avertissement n'est généré :

function get_arr() {
    return [1, 2];
}
$el = array_shift(get_arr()); // No warning

Comportement non intuitif

L'avertissement peut prêter à confusion car array_shift() est une fonction qui renvoie une valeur de tableau. Cependant, en mode strict, PHP considère la valeur de retour de array_shift() comme une non-variable.

Résoudre l'avertissement

Pour résoudre l'avertissement en mode strict, il existe deux options :

  1. Modifier la signature de la méthode : Modifiez la signature de la méthode renvoyant le tableau pour éviter d'utiliser un référence.
  2. Utiliser une variable intermédiaire : Affectez le tableau renvoyé par la méthode à une variable intermédiaire avant de le transmettre à array_shift().

Par exemple :

// Modify Method Signature
function get_arr() {
    return [1, 2];
}
$instance = new MyClass();
$el = array_shift($instance->get_arr());

// Use Intermediate Variable
$el = array_shift($instance->get_arr() ?: []);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn