2010-12-03 6 views
1

donc j'ai 2 fonctions comme ceci:PHP - détecter si une fonction est utilisée pour attribuer une valeur à une variable

function boo(){ 
    return "boo"; 
} 

et

function foo(){ 
    echo "foo"; 
} 

le poing on retourne une valeur, et le 2ème affichera quelque chose à l'écran directement.

$var = boo(); 
foo(); 

Comment puis-je fusionner ces 2 fonctions en un seul, et détecter en quelque sorte si elle est appelée à produire le résultat à l'écran, ou si elle est appelée pour obtenir la valeur de retour? Ensuite, choisissez d'utiliser le retour ou l'écho ...

retour bien

Répondre

3
function boo_or_foo ($output = false) { 
    if ($output) { 
     echo "fbo"; 
    } else { 
     return "foo"; 
    } 
} 

Mais ce qui est l'avantage contre juste en utilisant une fonction (boo()) et écho c'est toi?

echo $boo(); 
+0

merci, j'espérais qu'il y avait un meilleur moyen :) Quelque chose de plus élégant que d'ajouter une variable supplémentaire – Alex

1

vrai dans la fonction qui imprime alors yo juste faire

function foo(){ 
    echo "foo"; 
    return true; 
} 

    if(foo()){ 
    echo "foo did print something"; 
    }else{ 
    echo "nope foo is broken"; 
    } 
1

Eh bien, une fonction ne devrait faire qu'une chose, donc typiquement vous auriez deux fonctions. Mais, si vous voulez les combiner, vous pouvez simplement vérifier si est réglé:

function boo($var=null){ 
    if(isset($var)) echo $var 
    else return "boo"; 
} 
1

Je voulais obtenir le même effet. Dans mon cas, j'ai des fonctions qui produisent du HTML que je veux répercuter directement parfois (quand un appel Ajax est en cours), ou renvoyé (quand un appel est fait depuis un autre script). Par exemple, une fonction qui crée une liste de <option> éléments HTML - listOfOption($filter). Quand un de mes pages est créé, la fonction est appelée et le résultat est repris en place:

<?= listOfOption($var) ?>

Mais parfois les mêmes données doit être récupéré dans un appel Ajax:

http://site.com/listOfOption.php?parameter=2

au lieu d'écrire deux scripts différents ou de spécifier le comportement d'un paramètre, je garde listOfOption($filter) dans son propre fichier comme celui-ci:

if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) 
{ 
    echo listOfOption($_REQUEST['parameter']); 
} 

function listOfOption($filter) 
{ 
    return '<option value="1">Foo</option>'; 
} 

De cette façon, si l'appel provient d'un autre script, il renvoie les données; sinon, il imprime les données.

Notez que si un paramètre n'est pas passé à la fonction je n'aurais pas à faire cela, je pourrais vivre avec l'écho des données toujours et remplacer l'invocation <?= listOfOption() ?> par <? listOfOption() ?> pour garder les choses claires.

Questions connexes