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
617 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!

source:php.cn
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