Modifier les paramètres d'une procédure [Résolu]

Signaler
Messages postés
126
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
16 octobre 2010
-
Messages postés
126
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
16 octobre 2010
-
Bonjour!
Voici à quelques choses près ce que je veux faire :
<?
function test($texte)
{
$texte="essai";
}
$test="ok";
test($test);
echo $test;
?>

ET ALORS LA VOILA LE PROBLEME !!!
Il m'affiche "ok" au lieu de "test". Comment rectifier ça???
Le but est qu'après je puisse passé un objet en paramètres.
Voilà j'espère avoir été clair.
A bientôt.

6 réponses

Messages postés
5
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
27 février 2006

Hoy,



Attention, tu prends pas en compte la portée des variables !!

Dans ta fonction test, là où tu as $texte="essai", c'est une variable
locale, donc quand tu en sors, tu n'as pas modifié la varaible
extérieure.



Il faudrait que tu fasses



function test(&$texte) //attention, note bien le & pour le passage par référence

{

$texte="essai";

}



Voilà :o)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

<?
function test($texte)
{
$texte="essai";
}
$test="ok";
test($test);
echo $test;
?>

2 choses : dans n'importe quel langage, les variables ont une portée.
Dans le cadre de fonctions, une variable déclarée dans une fonction voit sa portée limitée à la fonction.

Bref :
<?php
fonction declareVar () {
$var = 'bla';
}
declareVar ();
echo $var; // provoque une erreur : $var n'est pas définie...
?>

De même avec ton test, tu passes ta variable, certes, mais ta fonction utilise une COPIE de la variable.
On en vient aux passagres par copie et par référence...une copie, est, comme son nom l'indique, une copie lol...ref, ce n'est pas l'original.
Une référence EST l'original (même emplacement mémoire).
donc tu peux faire ceci :
<?
function test(& $texte)
{
$texte="essai";
}
$test="ok";
test($test);
echo $test;
?>

Une autre façon est de retourner ta variable :

<?
function test($texte)
{
return $texte="essai";
}
$test="ok";
$test = test($test);
echo $test;
?>
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
Salut,


autre façon de passer une variable par référence :



<?php

function test($texte)

{

$texte='essai';

}

$test='ok';

test(&$test);

echo $test;

?>


In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
126
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
16 octobre 2010

Merci à tous pour votre spontanéité.
C'est vrai que j'ai pas pensé. Pourtant, j'y suis habitué en C mais c'est que je pensais pas que cela puisse s'appliquer au PHP.
En tout cas merci beaucoup.
Je n'ai plus qu'à tester pour mon objet et si ça ne marche pas je vous refais appel.
A+.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
Salut,

fais réponse accèptée stp...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
126
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
16 octobre 2010

C'était déjà fait ...