Table des matières
Comprendre l'avertissement des normes strictes : "Seules les variables doivent être transmises par référence"
Explication du Comportement
La cause profonde
Résolution
Maison développement back-end tutoriel php Pourquoi PHP émet-il des avertissements « Seules les variables doivent être transmises par référence » et comment peuvent-ils être résolus ?

Pourquoi PHP émet-il des avertissements « Seules les variables doivent être transmises par référence » et comment peuvent-ils être résolus ?

Jan 03, 2025 pm 10:46 PM

Why Does PHP Issue

Comprendre l'avertissement des normes strictes : "Seules les variables doivent être transmises par référence"

En PHP, l'avertissement des normes strictes "Seules les variables doivent être transmises par référence" se déclenche lorsqu'on tente de transmettre une non-variable par référence à une fonction ou une méthode.

Explication du Comportement

Considérez le code suivant :

$el = array_shift($instance->find());

Ce code génère un avertissement de normes strictes car $instance->find() renvoie un tableau, qui n'est pas une variable. Lorsqu'il est passé en argument, il tente de passer le tableau par référence (à l'aide de l'opérateur &), ce qui déclenche l'avertissement.

Cependant, dans le code suivant :

function get_arr(){
    return array(1, 2);
}
$el = array_shift(get_arr());

Les normes strictes l'avertissement n'est pas signalé car get_arr() est une fonction qui renvoie un tableau. Par conséquent, il est traité comme une variable plutôt que comme une simple valeur de tableau.

La cause profonde

L'avertissement des normes strictes se produit spécifiquement dans les situations où une méthode ou une fonction est appelée et sa valeur de retour est passé par référence. Par exemple, considérons le code suivant :

class test {
    function test_arr(&$a) {
        var_dump($a);
    }
    function get_arr() {
        return array(1, 2);
    }
}

$t = new test;
$t->test_arr($t->get_arr());

Dans ce code, l'avertissement de normes strictes est généré car $t->get_arr() renvoie un tableau, qui n'est pas une variable. Cependant, il est passé par référence à la méthode test_arr à l'aide de l'opérateur &.

Résolution

Pour résoudre l'avertissement de normes strictes, il existe deux approches possibles :

  1. Modifier la signature de la méthode : Modifiez la signature de la méthode pour ne pas utiliser de paramètre de référence. Par exemple :
function test_arr($a) {
    var_dump($a);
}
  1. Utiliser une variable intermédiaire : Créez une variable intermédiaire, attribuez-lui la valeur de retour de la méthode et transmettez la variable intermédiaire par référence. Par exemple :
$inter = $instance->find();
$el = array_shift($inter);

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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment vérifier si une adresse e-mail est valide en PHP? Comment vérifier si une adresse e-mail est valide en PHP? Sep 21, 2025 am 04:07 AM

Usefilter_var () tovalidateemailsyntaxandcheckdnsrr () toverifydomainmxrecords.example: $ email = "user@example.com"; if (f ilter_var ($ e-mail, filter_validate_email) && checkdnsrr (explosage ('@', $ e-mail) [1], 'mx')) {echo "ValidAndDeliverableMail & Qu

MySQL Aggrégation conditionnelle: Instruction de cas d'utilisation pour mettre en œuvre le résumé de la condition et le comptage des champs MySQL Aggrégation conditionnelle: Instruction de cas d'utilisation pour mettre en œuvre le résumé de la condition et le comptage des champs Sep 16, 2025 pm 02:39 PM

Cet article explique en profondeur comment utiliser les instructions de cas pour effectuer une agrégation conditionnelle dans MySQL pour atteindre la sommation conditionnelle et le comptage de champs spécifiques. Grâce à un cas de système d'abonnement pratique, il montre comment calculer dynamiquement la durée totale et le nombre d'événements en fonction de l'état des enregistrements (tels que "end" et "annuler"), surmontant ainsi les limites des fonctions de somme traditionnelles qui ne peuvent pas répondre aux besoins d'une agrégation conditionnelle complexe. Le tutoriel analyse en détail l'application des instructions de cas en détail et souligne l'importance de la fusion lorsqu'il s'agit des valeurs nulles possibles de la jointure gauche.

Comment faire une copie profonde ou un clone d'un objet en PHP? Comment faire une copie profonde ou un clone d'un objet en PHP? Sep 21, 2025 am 12:30 AM

UseUnserialize (serialize ($ obj)) FordopcopyingwhenallDataisSerializable; Sinon, implémentez__Clone () TomanuallyDuplicatesedObjectsAndavoidSharedReferences.

Comment fusionner deux tableaux en php? Comment fusionner deux tableaux en php? Sep 21, 2025 am 12:26 AM

UseArray_merge () toCombineArrays, écrasant leduplicatestringKeysAndreIndexingNumericKeys; ForsimplecCaTencatenation, en particulierInphp5.6, usethesplatoperator [... $ array1, ... $ array2].

Comment utiliser des espaces de noms dans un projet PHP? Comment utiliser des espaces de noms dans un projet PHP? Sep 21, 2025 am 01:28 AM

NamespacesInphporganizEcodeAndPreventnamingConflictsBygroupingClasses, Interfaces, Functions et ConstantsunSunSaspecificName.2.DefineanamespaceusingTheNamesPaceSpaceKeyWordAtTopofaFile, suiviByTheNamesPacename, Suchasapp \ Controlers...USUSEUSEKEYWORDTOI

Comment mettre à jour un enregistrement dans une base de données avec PHP? Comment mettre à jour un enregistrement dans une base de données avec PHP? Sep 21, 2025 am 04:47 AM

ToupDateAdatabasereCorDinPhp, FirstConnectUsingPDoOrmysQLi, theNusepreparedStationStoExECUSEASECURSQLUPDATEQUERY.example: $ pdo = newPDO ("MySql: host = localhost; dbname = votre_database", $ username, $ mot de passe); $ sql = "dameussem =.

Quelles sont les méthodes magiques en PHP et fournissent un exemple de `__Call () 'et` __get ()'. Quelles sont les méthodes magiques en PHP et fournissent un exemple de `__Call () 'et` __get ()'. Sep 20, 2025 am 12:50 AM

La méthodiette () méthodiste axée sur le point de réviser la mise en œuvre de l'inscription, ce qui permet de faire de la maintenance à la qualité de qualité et

Comment obtenir l'extension de fichier en php? Comment obtenir l'extension de fichier en php? Sep 20, 2025 am 05:11 AM

UsePathinfo ($ nom de fichier, pathinfo_extension) togetThefileExtension; itreliabblyHandlesMultipledototsEdGasases, renvoyantTheExtension (par exemple, "pdf") oranemptystringefNoneExists.

See all articles