1
Sunyanzi 2015-01-16 01:27:30 +08:00 1
没错 ... 这就是多此一举 ... 为什么你会认为这样会比直接循环好的 ..?
这样的性能损耗远比直接 foreach 一个大数组来的要大 ... 当然如果你的目的是拖慢程序及增大脚本的内存占用才用的这种写法 ... 那么恭喜你达到了目的 ... |
2
mikej OP @Sunyanzi 感谢回复!
确实是这样, 我查阅了一些资料, 正确的使用方法应该是在迭代器函数内, 也就是generator() 函数里生成数据, 才可以降低内存消耗 再求问下大神, 你们会经常用到yield吗, 一般会用到哪些使用场景 ? |
3
xwsoul 2015-01-16 16:53:00 +08:00
从数据源获取数据的时候需要的吧...
不过yield 还没用过... |
4
Sunyanzi 2015-01-17 01:57:56 +08:00
不会经常用到 ... 只是偶尔会用 ... 用法不外乎两种 ...
其一是用来生成一个规律的结构 ... 比如下面这样 ... function gen() { for ( $i = 0; $i < 5; ++ $i ) { yield 1; yield 2; yield 3; } } foreach( gen() as $gen ) echo $gen; 五个 123 只是示例 ... 生成的内容也可能是等差数列等比数列斐波那契数列一类的 ... 同理还能用来步进式的读文件 ... 避免直接把整个文件都读到内存里 ... 其二是用来挂起函数执行 ... 比如下面这样 ... function logger( $file ) { $f = fopen( $file, 'a' ); for ( ;;; ) { $line = yield; fwrite( $f, $line ); } } $log = logger( '/tmp/logger.log' ); $log->send("First"); $log->send("Second"); $log->send("Third"); 这样可以避免每次都建立句柄或把句柄传递来传递去 ... |