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 :

[POO] Portée des variables, classe....


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Avatar
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 137
    Par défaut [POO] Portée des variables, classe....
    Bon, y a un truc que je comprends plus du tout en php.
    Prenons comme exemple cette structure de programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?
    require('maClasse.class.php');
     
    $objet = new maClasse(); // instancie $objet et remplit ses attributs de pleins de valeurs
    //point1
     
    function f1(){
    //point2
      f2();
     
    }
     
     
    function f2(){
    //pleins de choses
    //point3
    }
     
    f1();
    //point4
    Si je fais un var_dump($objet) aux point1 et point4, pas de problème, l'objet existe et tous ses attributs sont remplis.
    Par contre, aux point2 et point3, PHP me renvoie NULL :-(

    une variable définie au "niveau0" de la structure d'un programme n'est pas définie dans les niveaux imbriqués? Quand mon fichier est une classe, je n'ai pas de problèmes car mes variables sont soit des attributs, soit elles sont passées en argument de fonction.
    Pour que je puisse utiliser $objet dans f1() et f2(), il va donc falloir que je passe $objet en argument?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    function f1($o1){
    //point2
      f2($o1);
     
    }
     
     
    function f2($o2){
    //pleins de choses
    //point3
    }
     
    f1($objet);

  2. #2
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Salut,

    j'ai un peu de mal à comprendre ce que tu voulais exposer, mais je pense avoir compris la

    En faites tu voudrait dumper ton objet dans une fonction....

    La portée des fonctions ne concerne que ce qui est initialisé dans la fonction ou ce qui arrive en parametre en clair regarde le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    class test
    {
    public $Nom;
    public function __construct()
    {
    $this->Nom = "Yop c Moi";
    }
    }
     
    function yo ( $Arg )
    {
    echo $Arg->Nom;
    }
     
    function YoYo ( )
    {
    echo $Obj->Nom;
    }
     
    $Obj = new test ();
     
    echo $Obj->Nom; // Yop c Moi
     
    yo( $Obj ); // Yop c Moi
     
    YoYo ( ); 
    /* Erreur : Notice: Undefined variable: Obj in d:\program files\easyphp1-8\www\yop.php on line 19
     
    Notice: Trying to get property of non-object in d:\program files\easyphp1-8\www\yop.php on line 19
    */
    L'erreur survenu est du au fait que la variable $Obj dans la fonction YoYo n'existe pas dans ce contexte !

    Pour que cela fonctionne il faut le lui passé en parametre.

    Derniere solution, passé cette objet dans les variables super globals tels GLOBALS, mais c'est une très mauvaises pratiques si on s'en sert pour tout et rien.

    Enfin si jamais tu désires accéder une méthodes d'une classe de manière globale sans avoir besoin d'instancier un objet tourne toi vers la propriété static d'une méthode.

    Voila, j'espère avoir bien comprios ton problème et avoir été clair !

    Bye

  3. #3
    Membre confirmé Avatar de Avatar
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 137
    Par défaut
    Nan, ce n'est pas tout à fait ça...
    Dans mon cas, je ne suis pas dans une classe, je suis dans mon fichier main.php, qui execute le programme.
    En gros donc, dans le cas d'un script php basique, si j'instancie un objet dans ce script, pourrais-je utiliser cet objet dans le corps d'une fonction définie aussi dans ce script, sans passer l'objet en paramètre.
    Pour résumer, le script suivant marche-t-il? (en sachant que je n'ai pas de message d'erreur mais que au point2, $objet vaut null alors qu'au point1, tout va bien)
    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
    require('maClasse.class.php');
     
    $objet = new maClasse();
    //point1
     
    f1(){
    //point2
    $prof = $objet ;
    }
     
    f1();
    ?>
    ou alors je dois écrire ceci :
    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
    require('maClasse.class.php');
     
    $objet = new maClasse();
    //point1
     
    f1($o){
    //point2
    $prof = $o ;
    }
     
    f1($objet);
    ?>

    En espérant avoir été plus clair, merci :-)

  4. #4
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Oui tu dois l'ecrire de la seconde facon

    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 
    require('maClasse.class.php'); 
     
    $objet = new maClasse(); 
    //point1 
     
    f1($o){ 
    //point2 
    $prof = $o ; 
    } 
     
    f1($objet); 
    ?>
    Garde tout de même à l'esprit que $prof n'est pas accessible en dehors de la fonction.

    Mais ATTENTION, ton objet est passer par référence, ce qui veut dire que ce que tu modifies sur l'objet dans la fonction ce repercute plus tard sortie de la fonction.

    Explication par l'exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?php
     
    class test 
    { 
    	public $Nom; 
    	public function __construct() 
    	{ 
    		$this->Nom = "Yop c Moi"; 
    	} 
    } 
     
    function yo ( $Arg ) 
    { 
    	echo $Arg->Nom;
    	$Arg->Nom = "\nYop C plus moi !";
    } 
     
     
    $Obj = new test (); 
    yo ( $Obj ); // Yop C moi
     
    echo $Obj->Nom; // \nYop C plus moi !
     
    ?>
    Voila !

    bye

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/09/2013, 17h38
  2. portée et transmission des variables
    Par senvedgi dans le forum Débuter
    Réponses: 7
    Dernier message: 17/10/2011, 12h38
  3. Réponses: 4
    Dernier message: 08/04/2007, 17h17
  4. [POO] Portée des variables de classe
    Par guidav dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2007, 19h27
  5. [POO] un truc me chagrine (portée des variables ?)
    Par novices dans le forum Langage
    Réponses: 2
    Dernier message: 08/08/2006, 15h05

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