30844


**[リンク先](http://blog.sarabande.jp/post/30716058960)に掲載されている下記コードについて**

> ジェネレータは Iterator インターフェイスを実装するクラスで次のメソッドが定義されています
[code]

    final class Generator implements Iterator {
        void  rewind();
    
[/code]

* * *

**[公式ドキュメント](http://php.net/manual/ja/class.generator.php)に書いている内容と同じですか？**  
・公式ドキュメントにclassと記載がないのはなぜ？  
・クラス概要だから、ソースコードそのものを掲載しているわけではない？？

* * *

**実際にソースコード上で確認するには？**  
・[GitHUB](https://github.com/php/php-
src/search?utf8=%E2%9C%93&q=Generator%20implements%20Iterator)上にあるのかと思い、検索したのですが、見つかりません  
・ここではない？？  
・あるいは、コンパイル前のC言語を検索しても見つからない？？

* * *


CC BY-SA 3.0
2016-12-02T12:57:46.770
30841
2016-12-03T10:25:35.707
2016-12-03T10:25:35.707
7886
7886
question
php
Generatorクラスを定義しているコードを、確認したいのですが


> 公式ドキュメントにclassと記載がないのはなぜ？

タイトル等からクラスであることはわかりますし、単に省略しているだけでしょう。

そもそもPHPのメソッド定義に戻り値の型は書けませんから、マニュアルの表記はもちろん、ご指摘のサイトに書かれているのも疑似コードにすぎません。

> 実際にソースコード上で確認するには？

当該クラスがPHPコードで実装されているわけではないのはご想像の通りです。

ソースコード中で Generator クラスの定義を行っている個所は・・・多分ここですね。

<https://github.com/php/php-
src/blob/php-7.1.0/Zend/zend_generators.c#L1216-L1254>

`ZEND_ME` マクロで定義された各メソッドの実体は、同じファイルに `ZEND_METHOD(Generator, ...)` で書かれています。

<https://github.com/php/php-src/blob/php-7.1.0/Zend/zend_generators.c#L876>

ちなみに今回はキーワード「Generator」言語「C」で検索してこれを見つけましたが、ここでも使われている `INIT_CLASS_ENTRY`
とクラス名で探すといいかもしれません。  
といっても [SPL](http://php.net/manual/ja/book.spl.php) のクラスは
`REGISTER_SPL_STD_CLASS_EX` なる独自のマクロが使われていましたが。。


CC BY-SA 3.0
2016-12-02T13:44:57.980
30844
2016-12-02T14:03:51.963
2016-12-02T14:03:51.963
8000
8000
30841
answer