回答
在PHP中,賦值是一個表達式,即它返回一個值。 $buffer = fgets($handle, 4096)
將首先將值分配給$buffer
,然後返回分配的值。
所以,基本上,你可以寫:
$buffer = fgets($handle, 4096);
while ($buffer !== false) {
echo $buffer;
$buffer = fgets($handle, 4096);
}
在這裏,您將有一個單獨的行分配。因爲在這種情況下,您需要複製作業,因此在循環條件下的作業是首選。
PS:用於在while循環的分配最常見的例子可能是從MySQL讀取行:(例如while
或if
)
while ($row = mysql_fetch_assoc($result)) {
echo $row['firstname'] . ' ' . $row['lastname'];
}
在病症的上下文中,(x = y)
既是分配和一個表達。它返回正在分配的值。
你不需要對你的函數做任何特殊的操作就可以像這樣使用它 - 這是該語言的一個特性。
它會在fgets
未返回的情況下執行false
。括號中的分配返回已分配的值。所以($buffer = fgets($handle, 4096))
正在返回fgets
的值。
如果在文件指針中沒有更多數據要讀取,則返回FALSE。
簡單的例子:
$a = 'a';
$b = 'b';
echo ($a = $b);
返回
b
由於返回FALSE的不是 「沒有更多的數據」 或 「錯誤」 的while
循環只會執行,直到它必須停止。
採用書面形式的更清晰的方式,這將是:
$buffer = fgets($handle, 4096);
while($buffer !== false)
{
echo $buffer;
$buffer = fgets($handle, 4096);
}
但這遠不及清潔。
當您在PHP中進行賦值時,賦值將返回分配的值。這允許您評估條件或循環或其他表達式中的賦值。
var_dump ($var = 'test');
結果將會顯示「測試」。
上面的代碼示例在同一個操作中做了一個賦值和一個測試,這種程序員的速記很常見。 fgets()從打開的文件返回一行,如果沒有行返回,則返回false。你可以做
while ($buffer !== false) {
echo $buffer;
$buffer = fgets($handle, 4096);
}
但當然,你必須進入循環(由循環之前做一個與fgets,或分配,將無法顯示,但ISN值之前設置緩衝到非假值假如空字符串)。
的===
運營商不僅如果一個函數返回的東西,可能會被視爲假(如0,NULL等)檢查這真的會針對布爾false
,你可以在這裏閱讀:http://de.php.net/manual/en/language.operators.comparison.php
每文檔以及其他人已經說過的內容,它不會返回布爾值。它只在完成或返回錯誤時才返回布爾值。
從PHP手冊:
返回的最大長度的字符串 - 從文件中讀取1個 字節由 把手指向。
如果發生錯誤,則返回FALSE。
所以,無論如何,沒有什麼特別的地方像這樣的方法是如何工作的,你可以寫你自己的方法是這樣的:
function increment($num) {
if($num < 10) { return ++$num; }
return false;
}
$i=-1;
while(($i = increment($i)) !== false) {
echo($i."<br />");
}
- 1. 評估變量賦值
- 2. 評估賦值語句的返回值
- 3. MySQL UNION中語句評估和變量賦值的順序
- 4. 賦值運算符中的C++函數評估順序
- 5. 評估truthy值
- 6. Netbeans PHP斷點變量值「評估...」
- 7. PHP Eval,評估HTML和PHP
- 8. 評估「值」屬性
- 9. PHP + HTML代碼的PHP評估問題
- 10. PHP懶布爾評估
- 11. Php日期:評估-1天
- 12. 在matlab中評估函數的值
- 13. 評估步驟中的無窮大值
- 14. 評估jmeter中的字符串值
- 15. 評估PL/SQL中的布爾值
- 16. 評估列中的每個值
- 17. 評估jQuery中
- 18. 評估Clojure中
- 19. VBA - 評估返回值#VALUE
- 20. 反向布爾值評估
- 21. 評估列值到行
- 22. 如果條件在圓括號內的賦值情況下評估真或假,
- 23. 是否用C預測逗號運算符和賦值的評估順序?
- 24. 這個賦值然後評估每個參數的「模式」有沒有名字?
- 25. 的Python - 評估
- 26. php重新評估包含的文件
- 27. 評估php內部的函數,如果
- 28. PHP評估數組的內容
- 29. 模型OCL評估與對象評估
- 30. Tensorflow評估:評估所有圖像
打我給它;所以在示例代碼片段) – rockerest 2011-05-09 18:01:56
,它工作的原因是因爲'fgets'可能會返回'false',這會將'false'賦值爲'$ buffer'的值,而這又會是評估賦值的結果? – user151841 2011-05-09 18:04:27
@ user151841:是的,正是這個原因;) – NikiC 2011-05-09 18:05:25