2009-10-20 9 views
0

je le scénario (simplifié) suivant:fonction PHP confusion

function changeFruit($fruit) { 
    changeAgain($fruit); 

} 

function changeAgain($fruit) { 
    $fruit = "Orange"; 
} 

MAIN: 

$fruit = "Apple"; 
changeFruit($fruit); 
echo $fruit // Will show up as "Apple", How do I get it to show up as "Orange"?? 

EDIT: AJOUTER OUBLIÉ. LE SCÉNARIO NE PEUT PAS UTILISER DE DÉCLARATIONS DE RETOUR - JUSTE & $ variable

Merci! Matt Mueller

+2

Pour la personne qui a downvoted la question, vous devriez sérieusement revenir en arrière et vérifier votre tout premier code. – Anax

+3

Et aussi, bonne pratique pour laisser un commentaire si vous downvote une question, pour aider à améliorer la question) – Mez

+0

Anax: Ce n'était pas moi qui vous a downvoted, mais il semble que vous n'avez pas lu beaucoup de manuel. Essayez ceci: http://www.php.net/manual/fr/functions.arguments.php – Tom

Répondre

10

Lorsque vous passez quelque chose qui est pas un objet à une fonction en PHP, php fait une copie de ce à utiliser dans la fonction. Pour ne pas utiliser de copie, vous devez indiquer à PHP que vous passez une référence.

Cela se fait avec l'opérateur &

function changeFruit(&$fruit) { 
    changeAgain($fruit); 

} 

function changeAgain(&$fruit) { 
    $fruit = "Orange"; 
} 

$fruit = "Apple"; 
changeFruit($fruit); 
echo $fruit; 

Il serait plus judicieux, et de meilleures pratiques, d'utiliser des valeurs de retour des fonctions (comme cela rend les choses plus faciles à lire)

function changeFruit($fruit) { 
    return changeAgain($fruit); 
} 

function changeAgain($fruit) { 
    // do something more interesting with$fruit here 
    $fruit = "Orange"; 
    return $fruit; 
} 

$fruit = "Apple"; 
$fruit = changeFruit($fruit); 
echo $fruit 
+0

Merci d'avoir creusé dans la question un peu plus. J'ai oublié d'ajouter, que je ne peux pas retourner des valeurs! – Matt

+0

J'étais sur le point d'écrire exactement cela. Entièrement correct et très complet. Propre réponse et des exemples clair! –

+0

Merci Paul - J'ai tendance à ne répondre que si je ne vais pas donner de doublures, et il y a quelque chose que je peux détailler concernant: D – Mez

2
function changeFruit($fruit) { 
    return changeAgain($fruit); 

} 

function changeAgain($fruit) { 
    return $fruit = "Orange"; 
} 

MAIN: 

$fruit = "Apple"; 
$fruit = changeFruit($fruit); 
echo $fruit; 

Hope that helps!

Note: le retour de la fonction changeAgain et l'écrasement $ fruit = changeFruit ($ fruit);

+1

changeFruit doit également retourner – Mez

+0

Merci raté que ... édité en conséquence – Lizard

1

Vous ne renvoyez pas les valeurs de vos fonctions. Essayez ceci:

function changeFruit($fruit) { 
    return changeAgain($fruit); 

} 

function changeAgain($fruit) { 
    $fruit = "Orange"; 
    return $fruit; 
} 

MAIN: 

$fruit = "Apple"; 
$fruit = changeFruit($fruit);