[PHP] Recuperer une variable dans une classe

Résolu/Fermé
Signaler
Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
-
Messages postés
251
Date d'inscription
vendredi 15 mai 2009
Statut
Contributeur
Dernière intervention
2 mars 2015
-
Bonjour,

J'ai un petit soucis complètement débile, j'espère que la solution est aussi bête que le problème:

Problème:

Je n'arrive pas a récupérer une variable d'un fichier inclus dans une classe.

Explication Détaillée:

j'ai un fichier variables.php :
<?php $test="coucou"; ?>

j'ai un fichier maClasse.php:
require_once("variables.php");
class maClasse{

function __construct()
	{
     echo $test;
         }
}



Lors de l'instanciation de la classe, la variable $test n'est pas affichée...

Évidences:

-Le fichier variables.php est bien inclus
-La classe est bien instanciée
-Si j'utilise une constante a la place d'une variable, ça fonctionne (ex define('test','coucou'))

Hypothèse:

Est il possible que les classes PHP requièrent une certaine syntaxe pour appeler des variables extérieures? J'ai essayé avec $parent->test, $this->test etc... mais rien n'y fait.

En vous remerciant pour votre attention (et je l'espère, pour votre aide) j'attends avec impatience vos réponses, je suis sûr que c'est tout bête mais je suis novice dans la POO.

2 réponses

Messages postés
251
Date d'inscription
vendredi 15 mai 2009
Statut
Contributeur
Dernière intervention
2 mars 2015
52
Bonjour,

un constructeur sert à initialiser un objet. Autrement dit, c'est la fonction qui est appelée lorsque tu crées un objet avec le mot clé new. Ici en l'occurence, dans un constructeur, une instruction "echo" n'a pas sa place.

Tu devrais plutôt:
1/ Définir un attribut pour ta classe, par exemple $nom
2/ Appeler ton constructeur avec un paramètre, par exemple $nom, $blabla, $toto, peu importe.
3/ Initialiser ton attribut avec le paramètre passé par le constructeur, par exemple $this->nom = $nom ou $this->nom = $blabla, etc.


Exemple1:


class maClasse{
    
    public $nom;  // je crée un attribut "nom"
 
    function __construct($nom) {
        $this->nom=$nom;
    }
}
 
$objet = new maClasse("toto");

echo $objet->nom; //affiche "toto" (sans les guillemets évidemment...)



Exemple2:
Avec le premier exemple tu est obligé de fournir un nom quand tu crée un objet de ta classe. Ainsi $objet = new maClasse(); va te générer une erreur. Il est possible de passer outre cela en définissant une valeur par défaut pour ton attribut et ton paramètre.


class maClasse{
    
    public $nom = null;  // je crée un attribut "nom" que j'initialise à null; ce n'est pas obligatoire mais conseillé. 
 
    function __construct($nom=null) {//par défaut le paramètre vaut null
        $this->nom=$nom;
    }
}
 
$objet1 = new maClasse();
$objet2 = new maClasse("toto");

echo "\n\$objet1->nom = ".$objet1->nom; 
//affiche "$objet1->nom =   " (toujours sans guillemets...)

echo "\n\$objet2->nom = ".$objet2->nom; 
//affiche "$objet2->nom = toto "(sans les...)



Remarque:

Pour l'exemple, j'ai déclaré tes attributs en "public". Sache que cela expose cet attribut dans le reste de ton code. Donc je t'invite à te document sur les modes "private" et "protected".

7
Messages postés
216
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
21 juin 2010
85
Il faut que dans ta classe tu déclares ta variable $test comme global il me semble.

Ca doit donner :

function __construct()
{
global $test;
echo $test;
}

Merci de mettre le statut du sujet en résolu lorsque c'est le cas (-:
2
Messages postés
243
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
25 juin 2012
59
Merci beaucoup, ça fonctionne !!
0