[PHP] Recuperer une variable dans une classe

Résolu/Fermé
IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 - 23 avril 2010 à 12:17
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 - 23 avril 2010 à 14:59
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.

A voir également:

2 réponses

Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
23 avril 2010 à 14:59
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
ACervoise Messages postés 216 Date d'inscription mercredi 3 juin 2009 Statut Membre Dernière intervention 21 juin 2010 85
Modifié par ACervoise le 23/04/2010 à 12:20
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
IdleMan Messages postés 243 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juin 2012 60
23 avril 2010 à 14:29
Merci beaucoup, ça fonctionne !!
0