2010-08-26 7 views
1

En supposant le code suivant:PHP: passer une variable à une fonction, faire quelque chose à la variable, retourner en arrière

<?php 
function doStuff($rowCount) { 
    $rowCount++; 
    echo $rowCount.' and '; 
    return $rowCount; 
} 
$rowCount = 1; 
echo $rowCount.' and '; 
doStuff($rowCount); 
doStuff($rowCount); 
doStuff($rowCount); 
?> 

La sortie souhaitée est

1 and 2 and 3 and 4 and 

La sortie réelle est

1 and 2 and 2 and 2 and 

Je suppose que je suis en train de comprendre comment fonctionne le "retour" dans ce contexte. Comment pourrais-je le mieux accomplir cela?

+3

je suppose que vous devez revoir votre compréhension de la portée des variables, passage par valeur et reportez-vous concepts de concepts dans php ... – ultrajohn

Répondre

1

changement function doStuff($rowCount)

à function doStuff(&$rowCount)

Normalement en PHP vous envoyez une copie de la variable à la fonction, de sorte que des modifications au sein de la fonction ne sera pas affecter la valeur de la variable en dehors de la fonction. Ajouter l'esperluette dit à PHP d'envoyer une référence à la variable afin que les modifications apportées à la variable reviennent à l'appelant.

+0

Pourquoi utiliser ce type de méthode alors que doStuff renvoie déjà la nouvelle valeur de '$ rowCount'? –

+0

dans votre code, à quelle variable stockez-vous réellement la valeur retournée? – ultrajohn

+0

@ultrajohn - Je ne suis pas, la valeur retournée est abandonnée. – tloach

2

Vous devriez essayer ceci:

$rowCount = 1; 
echo $rowCount.' and '; 
$rowCount = doStuff($rowCount); 
$rowCount = doStuff($rowCount); 
$rowCount = doStuff($rowCount); 

Votre doStuff() méthode retourne un entier qui est jamais utilisée lorsque vous utilisez simplement la déclaration doStuff($rowCount); sans rendez-vous.

9

Soit vous devez attribuer la valeur de retour des doStuff appels vers la variable $rowCount locale:

$rowCount = 1; 
echo $rowCount.' and '; 
$rowCount = doStuff($rowCount); 
$rowCount = doStuff($rowCount); 
$rowCount = doStuff($rowCount); 

Ou vous passez la variable en tant que reference en mettant un & devant le paramètre formel $rowCount:

function doStuff(&$rowCount) { 
    $rowCount++; 
    echo $rowCount.' and '; 
    return $rowCount; 
} 

maintenant, le paramètre formel $rowCount dans la fonction doStuff fait référence à la même valeur que la variable qui est passé à doStuff dans l'appel de fonction.

1

je voudrais juste essayer de corriger le code: ...

<?php 
function doStuff($rowCount) { 
    $rowCount++; 
    echo $rowCount.' and '; 
    return $rowCount; 
} 
$rowCount = 1; 
echo $rowCount.' and '; 
doStuff(doStuff(doStuff($rowCount))); 

?> 
1

Vous devez passer la variable « par référence » au lieu de « en valeur » pour ce faire ajouter un & à la variable dans la déclaration de fonction:

function doStuff(&$rowCount); 

consultez également PHP: Passing by Reference

Questions connexes