PHP基礎(chǔ)之生成器3——生成器對(duì)象
當(dāng)一個(gè)生成器函數(shù)被第一次調(diào)用,會(huì)返回一個(gè)內(nèi)部Generator類的對(duì)象. 這個(gè)對(duì)象以和前臺(tái)迭代器對(duì)象幾乎同樣的方式實(shí)現(xiàn)了Iterator?接口。
Generator?類中的大部分方法和Iterator?接口中的方法有著同樣的語(yǔ)義, 但是生成器對(duì)象還有一個(gè)額外的方法:?send().
CautionGenerator?對(duì)象不能通過(guò)new實(shí)例化
Example #1 The?Generator?class
<?php class Generator implements Iterator {public function rewind(); //Rewinds the iterator. 如果迭代已經(jīng)開始,會(huì)拋出一個(gè)異常。public function valid(); // 如果迭代關(guān)閉返回false,否則返回true.public function current(); // Returns the yielded value.public function key(); // Returns the yielded key.public function next(); // Resumes execution of the generator.public function send($value); // 發(fā)送給定值到生成器,作為yield表達(dá)式的結(jié)果并繼續(xù)執(zhí)行生成器. }?>Generator::send()
當(dāng)進(jìn)行迭代的時(shí)候Generator::send()?允許值注入到生成器方法中. 注入的值會(huì)從yield語(yǔ)句中返回,然后在任何使用生成器方法的變量中使用.
Example #2 Using?Generator::send()?to inject values
<?php function printer() {while (true) { $string = yield; echo $string;} } $printer = printer(); $printer->send(’Hello world!’);?>
以上例程會(huì)輸出:
Hello world!
相關(guān)文章:
