php yield mysql_PHP 5.5 新特性关键字 yield
PHP 5.5 增加了個新的關鍵字 yield,這個也是本人今天在看開源應用 tencent-php tsf 的源碼的時候發現的,其中大量的使用到了 yield。
通俗一點的講,yield 是 generator 發生器,配合迭代 iterator 使用。在函數迭代的某一步遇到 yield 語句時返回一個值,下次生成時從 yield 語句的地方繼續運行,直到再次遇到 yield 再次返回值,這樣就可以達到更好的迭代 iterate 的效果。
看官方文檔上有個例子講到了將 range() 實現為生成器,當數據量很大的時候不會消耗太多內存,代碼示例如下:<?php
function xrange($start, $limit, $step = 1) {
if ($start < $limit) {
if ($step <= 0) {
throw new LogicException('Step must be +ve');
}
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
} else {
if ($step >= 0) {
throw new LogicException('Step must be -ve');
}
for ($i = $start; $i >= $limit; $i += $step) {
yield $i;
}
}
}
?>
yield 關鍵字語法返回生成器對象。當一個生成器函數第一次被調用的時候,會返回一個內部 Generator 類的對象。這個對象和一個只能向前的迭代器對象一樣實現了 Iterator 接口。大部分 Generator 類中的方法擁有和 Iterator 接口一樣的語義,但是生成器對象有一個特殊的方法: send()。<?php
class Generator implements Iterator {
public function rewind(); // 返回到迭代器的第一個元素。
public function valid(); // 返回false如果迭代器已經關閉,否則返回true
public function current(); // 返回當前yield值.
public function key(); // 返回當前yield鍵名.
public function next(); // 恢復生成器的執行。
public function send($value); // 將傳入的值作為yield表達式的結果并且恢復發生器的執行。
}
?>
yield 的應用場景,一般多用于循環體,比如數據庫的 fetch 操作,這樣可以減少內存的消耗,ZanPHP 框架就大量的這樣使用。切莫濫用 yield 操作,濫用的結果性能會降低。
總結
以上是生活随笔為你收集整理的php yield mysql_PHP 5.5 新特性关键字 yield的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超完整的 Chrome 浏览器客户端调试
- 下一篇: Postico —— OS X 上的免费