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 :

Porté des variables


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Points : 301
    Points
    301
    Par défaut Porté des variables
    Bonjour à tous,

    Je me pose une question quant à la portée des variables en php. J'ai un petit exemple, sans grand intérêt, qui permet d'illustrer mon propos.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
     
    $jeGlobale = "J'ai une portée globale !";
    if(2>1){
      $estPlusGrand = "Oui, c'est vrai...<br>";
    }
    if(true){
      echo $estPlusGrand;
    }
    echo $estPlusGrand;
    ?>
    Logiquement la variable $estPlusGrand n’existe que dans le contexte du premier if. Cependant, $estPlusGrand semble avoir une portée globale, pourquoi ? Par contre, $jeGlobale je suis d'accord est elle globale.

    Autre exemple un peu plus rustique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    try{
    $pdo = new PDO('hello');
    }catch(Exception $ex){
      echo "Exception lancée...<br>";
    }
    echo $ex->getMessage();
    ?>
    Là aussi $ex->getMessage() affiche le message...

    La doc php à ce sujet :
    PHP variables scope

    Est-ce que quelqu'un pourrait m'expliquer ?

    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Ce n'est pas comme le C ou autre langage, les if ou autre bloc du type ne possèdent pas de scope à eux.
    Pour PHP tout ce qui n'est pas dans une fonction ou dans un namespace est dans le scope global.

  3. #3
    Membre éclairé Avatar de srvremi
    Homme Profil pro
    Directeur d'école d'ingénieurs
    Inscrit en
    Mars 2002
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur d'école d'ingénieurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 554
    Points : 656
    Points
    656
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Ce n'est pas comme le C ou autre langage, les if ou autre bloc du type ne possèdent pas de scope à eux.
    Pour PHP tout ce qui n'est pas dans une fonction ou dans un namespace est dans le scope global.
    En PHP une variable existe dès qu'elle est créée et ce jusqu'à la sortie de la fonction actuelle ou du programme si elle est déclarée dans le corps principal.
    Mais en C/C++/Java/etc. ce serait effectivement impossible car les variables ont une portée liée au bloc dans lequel elles sont déclarées.

    @+
    Rémi

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    quand tu ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(2>1){
    //if 2 > 1 ; toujours vrai donc exécuté, note les closures
      $estPlusGrand = "Oui, c'est vrai...<br>";
    }
    cela revient à écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $estPlusGrand = "Oui, c'est vrai...<br>";
    quand tu ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(true){
    //if true ; toujours vrai donc exécuté, note les closures
      echo $estPlusGrand;
    }
    cela revient à écrire
    Au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $estPlusGrand = "Oui, c'est vrai...<br>";
    echo  $estPlusGrand;
    je ne vois pas dans quel langage, si je demande (1 = 1 ) cela me répondra que ce n'est pas vrai... c'est un peu étrange comme raisonnement, mais pas dénué de sens.. C'est un peu comme si je te demande si ton arrière grand mère coté paternel à eu au moins un enfant ?

    si tu veux comprendre, fait des test anti-egalitaires ( la en php, mais franchement...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $open = false ; 
    if($open === false) {
    echo 'Close : last open';
    $open = true;
    }
    if($open===true){
    echo 'New Open, good Luck';
    $open = false ; 
    }

    Alors je n’espère pas que ce soit le cas, mais tu t'es peu être aussi trompé sur les autres langages. As tu bien pris le temps de lire les notices en POO ?

    et aussi, assure toi que cet "Exemple avec global" , ne sois pas ni périmé ni trop rapidement remis au gout du jour; je fais confiance à l’équipe pour te dire ca, la le gobal, tel quel, ca me parle pas, désolé...

    Note :
    Dans un contexte de conception j'aurais compris mais po présenté comme ca..

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/02/2005, 09h05
  2. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  3. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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