2010-12-03 82 views
1

所以我有2个功能是这样的:PHP - 检测一个功能用于将值分配给变量

function boo(){ 
    return "boo"; 
} 

function foo(){ 
    echo "foo"; 
} 

拳头一个将返回一个值,并第二个将直接输出一些东西到屏幕上。

$var = boo(); 
foo(); 

我怎么能合并这两个功能于一体,并以某种方式检测,如果它被称为将结果输出到屏幕上,或者如果它被称为用于获取返回值?然后选择使用回报或回声......

回答

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

但什么反对只用一个函数(boo())的利益和呼应函数返回true它自己?

echo $boo(); 
+0

谢谢,我希望有更好的办法:)比添加额外的变量更优雅的东西 – Alex 2010-12-03 10:37:58

1

以及在打印然后哟只是做

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

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

那么,一个函数应该只做一件事,所以通常你会有两个函数。但是,如果您想合并它们,您可以检查是否已设置:

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

我希望达到相同的效果。在我的情况下,我有函数生成HTML,我希望有时直接回显(当进行Ajax调用时)或返回(当调用另一个脚本时)。

例如,创建一个HTML <option>元素列表的函数 - listOfOption($filter)。在首次创建我的网页之一,该函数被调用,结果到位附和道:

<?= listOfOption($var) ?>

但有时需要同样的数据在Ajax调用来检索:

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

而是写两个不同的脚本或者在参数中指定的行为,我一直在listOfOption($filter)它自己的文件是这样的:

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

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

这种方式如果调用来自另一个脚本,它返回数据;否则它会打印数据。

请注意,如果一个参数没有传递给函数,我不需要这样做,我可以随时响应数据并用替换<?= listOfOption() ?>调用以保持清楚。