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 :

scoop : false = true ! [PHP 7]


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut scoop : false = true !
    Bonjour,

    mon titre est ironique car je passe false par l'URL (http://dev.tickets.fr/?debug=false&action=Search). Le routeur contenu par index.php reçoit l'action Search et de ce fait, lance l'exécution de la méthode invoke de la classe Search ('Search' => ticket_rawsrc\controller\Search::class,)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $data['debug'] = isset($_GET['debug']) ? (bool)$_GET['debug'] : false;
     
    $controller = new $routes[$action];
    $controller->invoke($data);
    La méthode en question est bien appelée, mais un var_dump au début donne $data['debug']=true !

    Quel mon problème SVP ?

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    C'est parce que $_GET['debug'] contient la chaîne de caractères 'false' et non pas le booléen false. Lors du transtypage d'une chaîne de caractères vers un booléen, il n'y a qu'une chaîne vide ou la chaîne '0' qui puissent produire le booléen false, tout le reste donnera true.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    php > var_dump((bool)false);
    bool(false)
    php > var_dump((bool)'false');
    bool(true)
    php > var_dump((bool)'tartempion');
    bool(true)
    php > var_dump((bool)'');
    bool(false)
    php > var_dump((bool)'0');
    bool(false)
    php > var_dump((bool)'00');
    bool(true)
    php > var_dump((bool)'null');
    bool(true)

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Avec ce code $data['debug'] = isset($_GET['debug']) ? (bool)(($_GET['debug']=='true') ? true : false ) : false;, c'est réglé !

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Le (bool) n'est pas nécessaire puisque ton test renvoie déjà un booléen.

    Mais tu peux écrire ça de manière plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data['debug'] = isset($_GET['debug']) && $_GET['debug']==='true';
    (La deuxième partie d'une condition && n'est évaluée que si la première partie est vraie, donc même si $_GET['debug'] n'est pas définie, la deuxième partie ne produira pas de notice.)

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

Discussions similaires

  1. [PHP 7] false || true renvoit false
    Par dubitoph dans le forum Langage
    Réponses: 2
    Dernier message: 20/01/2019, 21h48
  2. Utilisation de" Application.ScreenUpdating = False/True"
    Par pelerin98 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2016, 18h46
  3. [AC-2010] Que signifie Me.fieldname = False/True
    Par gravier3000 dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/10/2014, 16h38
  4. False, True =0,1 #problème
    Par Zorro dans le forum Général Python
    Réponses: 4
    Dernier message: 17/03/2007, 13h41
  5. DBGrid Enabled true/false > pb de rafraichissement
    Par Harry dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/10/2004, 17h50

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