php-master-changes 2018-10-30

今日は ext/mbstring のバグ修正 / リファクタリング、不要コードの削除、処理系起動時の初期化処理の修正、mod_php で PHP 処理系起動に失敗した場合の処理の修正、コメントの修正、ドキュメントの修正、ext/opcache のリファクタリング、ext/date のタイムゾーン DB の更新、trait のメソッド追加処理の参照カウント操作周りの修正があった！
# 2018-10-30
## nikic: Fix mb_strrpos() with encoding passed as 3rd param
- https://github.com/php/php-src/commit/09c7108f743612e77826eac90e6f4d371d4209f9
- [7.3~]
- ext/mbstring で、7.3 開発版だと [mb_strrpos()](http://php.net/manual/ja/function.mb-strrpos.php) の[第三引数へエンコーディングを渡した場合](http://php.net/manual/ja/function.mb-strrpos.php#refsect1-function.mb-strrpos-notes)の挙動が[壊れていた](https://3v4l.org/LsC9u)問題を修正

## dstogov: Removed dead code
- https://github.com/php/php-src/commit/2491b7b65aba22836fa0cb95e58b137b96f428a9
- ext/opcache の不要コードの削除

## dstogov: Execute zend_post_startup() with module_initialized flag set.
- https://github.com/php/php-src/commit/7a5416b1c54798e630b5453242c345b22dd4967b
- 処理系起動時（[php_module_startup()](http://tech.respect-pal.jp/php-helloworld/#PHP-3)）の初期化処理において、拡張から使えるフックポイント zend_post_startup_cb の呼び出し時に module_initialized フラグを設定するよう修正

## dstogov: Stop Apache if PHP wasn't started successful.
- https://github.com/php/php-src/commit/ea2e67876a55ffce2d38bff920ce7afdc7aff847
- sapi/apache2handler で、PHP 処理系の起動に失敗したら DONE を返して httpd を終了するように（？）
- フックが OK か DECLINE 以外を返してきたら続くフックを処理しない[実装](https://github.com/apache/apr/blob/87c696f9d9da07ac3610d75296aa755bb59ce4c3/include/apr_hooks.h#L222)になってるのは確かだが……
- これ対応として合ってるのかなあ……？
- pre_config では前から [DONE 返してる](https://github.com/php/php-src/blob/ea2e67876a55ffce2d38bff920ce7afdc7aff847/sapi/apache2handler/sapi_apache2.c#L444)のがあるが

## nikic: Use zend_string for mbstring last encoding cache
- https://github.com/php/php-src/commit/a7d6b2c1fb57bb77554d15d753cb44c69872e3cf
- ext/mbstring で、最後に使ったエンコーディング名のキャッシュに zend_string を使うよう修正

## nikic: Remove redundant mbfl_string_init calls
- https://github.com/php/php-src/commit/837843ff4a9e5e72ab4c7eb131c0da848e10b7e7
- ext/mbstring で、mbfl_string_init() の不要な呼び出しを除去

## nikic: Add missing null initialization
- https://github.com/php/php-src/commit/6da3eac56a2a0750fcc5900525447a8d218af87f
- ↑の [zend_string 化](#nikic-use-zend_string-for-mbstring-last-encoding-cache)で null 初期化の抜けていた箇所を修正

## ylixir: fix bug [#77079](https://bugs.php.net/bug.php?id=77079)
- https://github.com/php/php-src/commit/8775bead3acf436e2f5da6049ef21d64c77d9f82
- ext/odbc で、[odbc_fetch_object()](http://php.net/manual/en/function.odbc-fetch-object.php) と [odbc_fetch_array()](http://php.net/manual/en/function.odbc-fetch-array.php) のコメント内のシグネチャが間違っていた問題の修正
- [genfuncsummary](https://github.com/salathe/phpdoc-base/blob/master/scripts/genfuncsummary.php) などでソースコードからドキュメントを生成できるよう CODING_STANDARDS で [proto の使い方](https://github.com/php/php-src/blob/0e60b812c05ed5e3704ab6f31f29040040c3edd7/CODING_STANDARDS#L278) が決まってる
- バグチケットには [psalm](https://github.com/vimeo/psalm) などの静的解析機が誤検知する原因と書いてあるが、実際には psalm は [phan](https://github.com/phan/phan) から[シグネチャのデータ](https://github.com/phan/phan/blob/0d0cd57fdbb79e8aee7fce6ec0af02a43d5830c4/src/Phan/Language/Internal/FunctionSignatureMap.php)を[とっていて](https://github.com/vimeo/psalm/blob/a27ab52be7b2d535e4a2280c8b6388c5844fba7b/src/Psalm/CallMap.php)、どちらも[手動](https://github.com/vimeo/psalm/commits/a27ab52be7b2d535e4a2280c8b6388c5844fba7b/src/Psalm/CallMap.php)で[別々にメンテ](https://github.com/phan/phan/commits/0d0cd57fdbb79e8aee7fce6ec0af02a43d5830c4/src/Phan/Language/Internal/FunctionSignatureMap.php)されているくさい
- 昔に proto やその生成物から phan のコードが生成されていた可能性はあるが、いま現在は特別同期してないんじゃないかな
- [両](https://github.com/vimeo/psalm/pull/1043)[方](https://github.com/phan/phan/pull/2094)に PR 投げといた（今見たらマージもされてたらしい）

## petk: [ci skip] Update NEWS
- https://github.com/php/php-src/commit/91a11111606e4b5c0e8ecf7f7a7f69f5f8e23ef1
- [7.1~]
- ↑ の NEWS への追記

## dstogov: Reslove inherited op_array references once afrer all optimizations.
- https://github.com/php/php-src/commit/ebf44fbbda0d21f18817e1ef54c2318eb0efd41a
- ext/opcache で、親から継承されるメソッドの op_array の参照解決を複数箇所でやっていたのを、全ての最適化が済んでから一回だけやるよう修正

## derickr: Updated to version 2018.7 (2018g)
- https://github.com/php/php-src/commit/e58388ea6d0b0246f61a9267930c1eba9c0f7f6b
- [7.1~]
- ext/date で タイムゾーン DB のデータを更新

## dstogov: Call function_add_ref() in proper place
- https://github.com/php/php-src/commit/2fefa8c61e0bd44a326c5d93e1d1f8410f79233e
- trait のメソッド追加処理において、[function_add_ref()](https://github.com/php/php-src/blob/2fefa8c61e0bd44a326c5d93e1d1f8410f79233e/Zend/zend_compile.c#L1011) の位置を移動
- [こう](https://github.com/php/php-src/commit/709e4e4f17ddbeb99b366c293c3e2eaa16480a7a)だったのが[こう](https://github.com/php/php-src/commit/7fde2243a712bb1cdc0b07cef2ba5ce13ec5259b)なってのこうなので、わりとテキトーやってる感が否めない

## dstogov: Keep original value of "prototype"
- https://github.com/php/php-src/commit/bf38e6c10a3161f684951baba7086a35f66ee867
- ext/opcache で、親から継承されるメソッドの op_array の参照解決処理において、interface / abstract メソッドの互換性チェックで使う prototype の値を維持するよう修正