2008-11-02 63 views

回答

7

許多PHP函數通過傳遞一個名爲$ return的布爾值來實現此目的,如果$ return爲true,則返回該值;如果$ return爲false,則會輸出該值。幾個例子是print_r()highlight_file()

所以,你的功能應該是這樣的:

function fn($return=false) { 
    if ($return) { 
     return 'blah'; 
    } else { 
     echo 'blah'; 
    } 
} 

任何其他方式不會是良好的編程風格。

0

不,沒有辦法找到它。你可以做的獨特的事情是抓住調用堆棧(http://it2.php.net/debug_backtrace)並檢查它。

+0

得到了一個代碼示例? – eyelidlessness 2008-11-02 17:52:54

+0

這是一個非常糟糕的事情要做,除非它是用於調試。 – troelskn 2008-11-02 18:28:46

0

不,它不能。

0

它不容易完成,但如果你只是傳遞一個額外的布爾變量給函數呢?這樣,該功能的結束將如下所示:

if (namespace) { 
    return $output; 
} else { 
    echo $output; 
} 

似乎是一個非常簡單的解決方法。

3

不,它不應該。這是語言的一個非常基本的前提,即函數不知道使用它們的上下文。這使您可以分解您的應用程序,因爲每個部分(功能)都完全與周圍環境隔離。

也就是說,你可以對這個特定的用例做些什麼,就是關於輸出緩衝。默認情況下,echo會將數據發送到標準輸出,但是您可以設置一個緩衝區,它會將輸出捕獲到一個變量中。例如:

function foo() { 
    echo "Hello World"; 
} 
foo(); // will output "Hello World" 
ob_start(); 
foo(); 
$foo = ob_get_clean(); // will assign the string "Hello World" into the variable $foo 

除此之外,通常認爲它是直接輸出函數的錯誤風格。您通常應該返回一個字符串,並將其保留爲腳本的頂層輸出。理想情況下,整個應用程序中應該只有一個單一的echo語句。

2

想想如何解釋執行該語句:

$var = fn(); 

的解釋評估操作數從右到左用賦值運算符,所以首先它會評估對右側的表達式(fn()在這種情況下),然後將結果分配給$var。每個表達式都會返回一個值,並且您可以選擇如何處理此值。

相關問題