換句話說,fn()
可以知道它被用作$var = fn();
而不是fn();
?PHP:函數可以知道它是否被賦值爲一個值嗎?
一個用例是echo
後一種情況下的返回值,而return
它是前者。
這樣做可以不傳遞參數給函數來聲明它被使用的方式?
換句話說,fn()
可以知道它被用作$var = fn();
而不是fn();
?PHP:函數可以知道它是否被賦值爲一個值嗎?
一個用例是echo
後一種情況下的返回值,而return
它是前者。
這樣做可以不傳遞參數給函數來聲明它被使用的方式?
許多PHP函數通過傳遞一個名爲$ return的布爾值來實現此目的,如果$ return爲true,則返回該值;如果$ return爲false,則會輸出該值。幾個例子是print_r()和highlight_file()。
所以,你的功能應該是這樣的:
function fn($return=false) {
if ($return) {
return 'blah';
} else {
echo 'blah';
}
}
任何其他方式不會是良好的編程風格。
不,沒有辦法找到它。你可以做的獨特的事情是抓住調用堆棧(http://it2.php.net/debug_backtrace)並檢查它。
得到了一個代碼示例? – eyelidlessness 2008-11-02 17:52:54
這是一個非常糟糕的事情要做,除非它是用於調試。 – troelskn 2008-11-02 18:28:46
不,它不能。
它不容易完成,但如果你只是傳遞一個額外的布爾變量給函數呢?這樣,該功能的結束將如下所示:
if (namespace) {
return $output;
} else {
echo $output;
}
似乎是一個非常簡單的解決方法。
不,它不應該。這是語言的一個非常基本的前提,即函數不知道使用它們的上下文。這使您可以分解您的應用程序,因爲每個部分(功能)都完全與周圍環境隔離。
也就是說,你可以對這個特定的用例做些什麼,就是關於輸出緩衝。默認情況下,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語句。
想想如何解釋執行該語句:
$var = fn();
的解釋評估操作數從右到左用賦值運算符,所以首先它會評估對右側的表達式(fn()
在這種情況下),然後將結果分配給$var
。每個表達式都會返回一個值,並且您可以選擇如何處理此值。
你知道你是否在矩陣中嗎? – adjenks 2017-11-10 20:44:59