Page 1 sur 1

Déclarations de variables dans des fonctions imbriquées

Posté : 14 déc. 2011, 03:01
par Valmont
Bonjour à tous,

Sûrement une question de débutant (c'est pour ça que je poste ici d'ailleurs :wink: )

Je débute donc avec les classes et j'ai encore un peu de mal avec la portée des variables. Voilà ce que j'aimerais faire :
class Test {
	private function satellite () {
		$maVariable = 'test';
	}
	public function base () {
		$this -> satellite ();
		echo $maVariable;
	}
}

$test = new Test;
$test -> base();
Vous vous doutez du résultat que je souhaiterais obtenir. Je ne parviens pas à faire référence à une variable issue d'une fonction externe. Y a-t-il un moyen ou suis-je obligé de fonctionner comme suit :
class Test {
	private function satellite () {
		$maVariable = 'test';
		return $maVariable;
	}
	public function base () {
		$maVariable = $this -> satellite ();
		echo $maVariable;
	}
}
Ça m'ennuie car ça rallonge un peu le code et dans le cas de plusieurs variables à renvoyer, je suis obligé de faire un tableau ?...

Merci par avance pour votre aide ! :)

Re: Déclarations de variables dans des fonctions imbriquées

Posté : 14 déc. 2011, 04:11
par AB
Souvent on déclare les variables "globales internes" d'une classe après la déclaration de la classe :
class Test 
{
	private $maVariable;
	
        private function satellite () {
                $this->maVariable = 'test_ok';
        }
		
        public function base () {
                $this->satellite ();
                echo $this->maVariable;
        }
}

$test = new Test;
$test -> base();

Re: Déclarations de variables dans des fonctions imbriquées

Posté : 15 déc. 2011, 05:34
par Valmont
Merci AB ! Tu as raison, je ne sais pas pourquoi je n'ai pas fait ça directement :oops:

Re: Déclarations de variables dans des fonctions imbriquées

Posté : 15 déc. 2011, 19:19
par AB
C'est un des gros avantage des classes par rapport à l'équivalent avec plusieurs fonctions indépendantes où l'on aurait été obligé de passer la variable comme argument dans les fonctions ou alors de déclarer la variable globale mais elle aurait été globale pour tout le script.

A noter qu'on est pas obligé de déclarer la variable au début de la classe : la ligne "private $maVariable;" est optionnelle, mais c'est bien pratique de pouvoir les visualiser d'un coup d'oeil d'autant qu'on peut leur affecter des valeurs par défaut. Si l'on affecte aucune valeur par défaut comme dans cet exemple cela revient à affecter la valeur nulle.

private $maVariable;
équivalent à
private $maVariable = null;