problème de return variable via fonction

Eléphant du PHP | 85 Messages

13 août 2010, 14:40

Salut,

Ma question du jour concerne le renvoi de variable via une fonction.

Le 1 ne fonctionne pas, le echo n'affiche rien.
Le 2 fonctionne echo affiche "coucou".
Pourquoi ?
Je précise que cela fonctionne dans le cas 1 si j'appelle la fonction ainsi :

Code : Tout sélectionner

$aff = testaff(); echo $aff;
function testaff() {
$vartest = "coucou";
return $vartest
}
testaff();
echo $vartest;
function testaff() {
$_SESSION['vartest'] = "coucou";
return $_SESSION['vartest']
}
testaff();
echo $_SESSION['vartest'];

Eléphant du PHP | 50 Messages

13 août 2010, 14:59

Bonjour,

C'est lié à la portée d'une variable, dans ton exemple 1
$vartest
est une variable locale à la fonction
testaff()
elle est donc inaccessible à l'exterieur de ta fonction
-> http://www.manuelphp.com/php/language.v ... .scope.php

Eléphant du PHP | 85 Messages

13 août 2010, 15:23

Ah ouais...

Donc en la définissant comme global dans la fonction, je devrais la retrouver ensuite sans être obliger de la passer en variable de session.

Merci

Eléphanteau du PHP | 34 Messages

13 août 2010, 15:34

Oui .. sachant que les globals sont globalement à proscrire ^^
Pourquoi ne pas faire tout simplement
function testaff()
{
    return "coucou";
}

$vartest = testaff();

echo $vartest;
These lines the last endeavor,
To find the missing lifeline.

Eléphant du PHP | 85 Messages

13 août 2010, 16:29

Ah ?
Pourquoi sont-elle à proscrire ? Juste pour le risque de modifier ailleurs la variable mis en global ?
Dans ce cas, pas de soucis, aucune de mes variable n'a jamais le même nom.

Et le fait que je n'appelle pas ma fonction via variable = fonction est juste pour des raisons pratiques.

Eléphanteau du PHP | 34 Messages

13 août 2010, 17:49

Pourquoi ne pas utiliser les globals ?
Parce que ça créer des dépendances monstrueuses, qui sont généralement difficilement repérable dans les scripts.
Parce que l'on a finalement assez peu de contrôle dessus.

Généralement, on préfère l'utilisation de registre (cf Hoa Registry ou Zend Registry ) ou encore l'injection de dépendance.
These lines the last endeavor,
To find the missing lifeline.

Eléphant du PHP | 85 Messages

14 août 2010, 11:33

Hummm, je vais regarder ça.

Merci.