日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php yield mysql_PHP 5.5 新特性关键字 yield

發布時間:2023/12/19 数据库 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。