2010-12-03 81 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() ?>調用以保持清楚。