IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

pourquoi PHP n'alerte pas l'erreur de fausse affectation par ==


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 391
    Points : 863
    Points
    863
    Par défaut pourquoi PHP n'alerte pas l'erreur de fausse affectation par ==
    bonjour,

    ça fait un bail que cette erreur existe et je comprends pas pourquoi PHP ne la détecte pas en erreur ni en warning :

    souvent, je fais un copié-coller de ma condition se trouvant dans le IF pour la remettre dans le code plus bas et j'oublie d'enlever un "égal"

    Si j'ai dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($a=="45fdfdfdf87") { // do things..}
    alors ma recopie sera :

    au lieu de :


    Je pense copié une affectation qui est en fait une expression de test (qui renvoie true/false) sans produire d'erreur (dans le sens Anomalie de syntaxe) .

    Pourquoi PHP me laisse écrire de tel ligne ? est-ce que ça a une utilité d'écrire ce genre de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $b="rien";
    $a=="45fdfdfdf87";
    $c="truc";
    PHP (son compilateur ou interpréteur) devrait me mettre un warning pour me dire que la ligne 2: $a=="45fdfdfdf87"; est une erreur non ?
    ça n'a pas de sens de faire une expression de test entre deux affectations ! n'est-ce pas ?

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    je pense que ce genre de syntaxe est valide parce qu'on peut écrire des lignes de ce genre : ($a == "225") && appel_fonction();.
    si la variable ne contient pas 225, la suite de la ligne n'est pas évaluée et la fonction n'est pas appelée. c'est une espèce de test "if" mais en version compacte.

    ensuite je pense que l'erreur qui arrive le plus souvent est plutôt de taper trop vite et d'oublier un "=" dans le if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ($a = "225") {
        appel_fonction();
     
    }
    là aussi la syntaxe est valide mais l'erreur d'écriture va provoquer un dysfonctionnement dans le code.
    c'est pour ça que pour faire des comparaisons dans mon code, j'inverse souvent pour mettre la variable en 2e position if ("225" === $a) {.
    ainsi en oubliant des "=", obtient cette fois une erreur php : if ("225" = $a) {.

    vous remarquerez que j'ai utilisé "===" pour faire une comparaison stricte. j'utilise principalement cet opérateur pour éviter les surprises :
    https://www.php.net/manual/fr/types.comparisons.php

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    La syntaxe est valide, au même titre que
    l'est , alors que c'est en général aussi une erreur.

    Le moteur PHP se contente de savoir si ce que tu écrits est valide. Il ne se préoccupe pas de savoir si dans ton contexte particulier le code à du sens ou pas.

    Si tu veux être avertit de ce genre de chose il faut utilser des outils dédiés d'analyse statique.
    PHPStorm par exemple intègre PHP_CodeSniffer qui alerte de ce genre de problématique. Selon ton IDE il faut trouver le bon outil qui s"intègre bien. A toi ensuite de configurer l'outil pour qu'il réponde à tes besoins.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 391
    Points : 863
    Points
    863
    Par défaut
    merci pour vos précisions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pourquoi je n'ai pas d'erreur avec "use strict" ?
    Par moimp dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/12/2020, 07h02
  2. Réponses: 4
    Dernier message: 15/02/2019, 08h30
  3. PHP n'affiche pas les erreurs.
    Par diabli73 dans le forum Langage
    Réponses: 7
    Dernier message: 10/09/2014, 10h26
  4. [Wamp] [MAMP] PHP n'affiche pas les erreurs, même avec display_errors On
    Par Galdon dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 01/02/2010, 18h33
  5. pourquoi php et non pas ASP-net ?!
    Par Root_JDK dans le forum Débuter
    Réponses: 3
    Dernier message: 19/05/2008, 00h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo