时间:2023-05-05 00:27:02 | 来源:网站运营
时间:2023-05-05 00:27:02 来源:网站运营
PHP新特性之命名空间、性状和生成器:虽然专栏叫做前端读书笔记,但是我相信你们一定也不会拒绝全世界最好的语言的~<?phpuse func Namespace/functionName;functionName();
也可以导入常量,use constant Namespace/CONS_NAME;echo CONS_NAME;
函数和常量的别名与类名的创建方式一样。<?phpfunction myGenerator() { yield 'value1'; yield 'value2';}
调用生成器函数的时候,PHP会返回一个属于Generator类的对象,这个对象可以使用foreach()函数迭代,每次迭代,PHP会要求这个对象的实例计算并提供下一个要迭代的值,生成器的优雅之处就是在每产出一个值之后,生成器内部状态会一直停顿和恢复之间切换,直到抵达定义体的末尾或者遇到空的return;语句为止,例如:<?phpforeach (myGenerator() as $yieldedValue) { echo $yieldedValue, PHP_EOL;}
以上例子会输出value1value2
2).生成器是如何节约内存的?生成一个范围内的数值(错误方式)<?phpfunction makeRange($length) { $dataset = []; for ($i=0; $i < $length; $i++) { $dataset[] = $i; } return $dataset;}$customRange = makeRange(1000000);foreach ($customeRange as $i) { echo $i, PHP_EOL;}
预先创建了一个包含很大整数组成的数组,再看使用生成器的例子。<?phpfunction makeRange($length) { for ($i = 0; $i < $length; $i++) { yield $i; }}foreach(makeRange(1000000) as $i) { echo $i, PHP_EOL;}
在实际的例如迭代一个4GB大小的文件中功能中,迭代器大展身手。<?phpfunction getRows($file) { $handle = fopen($file, 'rb'); if ($handle === false) { throw new Exception(); } //feof()函数检测是否到达文件末尾 while (feof($handle) === false) { //fgetcsv()一次读取csv文件的一行 yeild fgetcsv($handle); } fclose($handle)}foreach (getRows('data.csv') as $row) { print_r($row);}
关键词:成器,空间,命名,特性