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
Libérer: 2024-12-20 07:39:11
original
719 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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() ?: []);
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal