2010-11-10 8 views
0

J'ai cette fonction:Comment "répercuter" les résultats d'une fonction dans une autre fonction?

function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    echo '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 

qui ne reviennent pas, mais fait écho aux résultats.

Je voudrais l'utiliser comme il est dans une autre fonction:

function ItkMakeMo($NomDebVar) { 
$Output = ' 
    <tr>  
     <td>Test</td> 
    </tr> 
    <tr> 
     <td>'.MakeInput($NomDebVar.'moshj','IntInput').'</td> 
    </tr> 
'; 
echo $Output; 

}

donc cette solution ne fonctionne pas, PHP envoie la sortie MakeInput avant la "echo $ Output"

+0

Il me semble que vous ne comprenez pas comment utiliser les fonctions? http://php.net/manual/en/language.functions.php – MatTheCat

+2

Super, 3 réponses exactement les mêmes en 30 secondes, un nouveau record ???? – Grumpy

+0

a dû tous les voter;) – Grumpy

Répondre

1

Si pour une raison quelconque, vous ne pouvez pas changer MakeInput() ou il faudrait plus d'efforts que cela vaut la peine de le changer, alors vous pouvez l'écho de la sortie directement à partir ItkMakeMo():

function ItkMakeMo($NomDebVar) { 
echo ' 
    <tr>  
     <td>Test</td> 
    </tr> 
    <tr> 
     <td>'; 

MakeInput($NomDebVar.'moshj','IntInput'); 

echo '</td> 
    </tr> 
'; 
} 

Ensuite, la sortie MakeInput() serait dans la bonne place.

Si possible, il est généralement préférable de ne pas générer directement les fonctions et de renvoyer la sortie sous la forme d'une chaîne, vous pouvez alors la sortir lorsque vous appelez la fonction.

1

par opposition à l'utilisation de l'écho dans votre fonction, utilisez retour:

function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 
1

Essayez de retour chaîne en fonction MakeInput au lieu de faire écho à lui,

function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 
0
function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 
5

Vous devez return la valeur:

function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 

Et plus tard il echo.

1

Dans votre cas particulier, j'essaierais de répercuter la sortie tout de suite, sans la stocker d'abord dans une variable.

function ItkMakeMo($NomDebVar) { 
echo ' 
    <tr>  
     <td>Test</td> 
    </tr> 
    <tr> 
     <td>'; 
MakeInput($NomDebVar.'moshj','IntInput').'</td> 
echo ' </tr> 
'; 
} 

Mais comme indiqué par d'autres, il serait certainement préférable de changer la fonction pour renvoyer la valeur, plutôt que de l'écho qu'elle. Pas seulement dans ce cas, mais en tant que meilleure pratique générale. Donc, essayez seulement ceci si vous ne pouvez pas changer vous-même MakeInput pour une raison quelconque.

+0

Cela produirait toujours la chaîne 'MakeInput()' avant la chaîne 'ItkMakeMo()', puisque 'MakeInput()' est 'echo'ing, et n'est pas quelque chose que vous pouvez concaténer. – Aether

+0

C'est un bon point @Aether, j'ai changé la fonction pour faire face à cela. – Rob

0

Dans le premier changement de fonction écho avec retour:

function MakeInput($id, $class) { 
    $value = substr($id, 2); 
    global $$value; 
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />'; 
} 
0

Puisque vous avez dit que vous ne souhaitez pas modifier la fonction MakeInput, utilisez en mémoire tampon de sortie. Si vous n'avez pas besoin de la variable de sortie $ mais que vous avez besoin de faire écho à MakeInput, je suivrais les suggestions de Rob. Cela dit, suivez ce que tout le monde a écrit parce que c'est juste une façon laide d'une mauvaise programmation.

+0

Cette solution fonctionne mais le MakeInput sort toujours avant le ob_get_flush() – younes0

+0

Opps, je voulais dire ob_get_clean! Merci d'avoir fait remarquer cela. –

+0

J'utiliserais '$ input = ob_get_contents(); ob_end_clean(); 'si vous prenez cette approche. 'ob_get_flush();' affiche le contenu du tampon lorsqu'il est appelé. Editer: Bon appel, @Phil R .: 'ob_get_clean()' fait les deux en un. – Aether

Questions connexes