php-master-changes 2019-01-04

今日はドキュメントの更新、::class まわりの整理修正、親のないクラスでの parent:: 利用エラーのランタイムチェックからコンパイル時チェックへの移動、mysqlnd のコード整理、SOAP 利用時クラッシュするバグの修正があった！

# 2019-01-04
## nikic: Add NEWS entry for bug [#77357](https://bugs.php.net/bug.php?id=77357)
- https://github.com/php/php-src/commit/07873fab3c5b591a712f6db68d20f253c0b8aaa8
- [7.3~]
- [昨日の修正](https://qiita.com/sj-i/items/6708cc217a187f793bbf#nikic-possible-fix-for-bug-77357) を NEWS へ追記

## nikic: Fix self::class inside constant in global scope
- https://github.com/php/php-src/commit/41af1e6781386cf540926ba9d1ff59a3402f8e01
- [7.2~]
- `self::class` をグローバルスコープの const 定義で使うのを許容するよう修正
- 明らかに誤ったコードだが、[7.0.1 以降通ってしまっていた](https://3v4l.org/Mgkej)
- 7.2 系では今更直すのももう遅いかなという感じで、デバッグモードで ZEND_ASSERT に跳ねられるのを潰してしまい、テストケースも追加して許容ということにしているもよう

## nikic: Introduce separate ZEND_AST_CLASS_NAME AST node
- https://github.com/php/php-src/commit/290adc41321a6fb0dfe71f1a8058a87ae4c6cab1
- ZEND_AST_CLASS_NAME の AST ノードを追加
- クラス定数とクラス名をとるための `::class` はどちらも `クラス名::hogehoge` のような形で構文を共有するが、表しているものは全然違う
- 違うのにどっちも ZEND_AST_CLASS_CONST で表していた
- hogehoge が "class" なら ZEND_AST_CLASS_NAME、そうでなければ ZEND_AST_CLASS_CONST、と分岐するよう、AST ノードを分けてコードを整理した形

## nikic: Fix intl build
- https://github.com/php/php-src/commit/6aa55a28b54d6ec56b51d29fe8b65e5e7a444834
- 変数名に使ってた `class` は C++ のキーワードで intl のビルドがコケるので `class_name` に修正

## nikic: Don't replace self::class with \_\_CLASS\_\_ during const eval
- https://github.com/php/php-src/commit/9b3fda43424bb9044afcbf8490e38906c46851a3
- 定数式評価の際に `self::class` を `__CLASS__` で置き換えるのをやめた
- `self::class` と `[self::class]` が違う結果になってしまうようだ
- AST_MAGIC_CONST が `__CLASS__`　とか `__FILE__` とかを持つ用の AST ノードらしい

## Andrey Hristov: Revert visibility
- https://github.com/php/php-src/commit/71ffae9605a0b19f4c7a76d317276c934a767a65
- ext/mysqlnd で、[4 〜 5 年前になんか消してた](https://github.com/php/php-src/commit/5d57e17a15cf89bf8b20d718ce5070b42ee446e0) PHPAPI の指定を復帰

## nikic: Handle self::class separately from \_\_CLASS__ in const eval
- https://github.com/php/php-src/commit/f58846a15d0460d1f2dcee92540c5c639c937ee9
- 定数評価の際、`self::class` を `__CLASS__` と区別して扱うよう修正
- master ではグローバルスコープの const 定義で `self::class` を使うとエラーになるように

## nikic: Support parent::class inside constexpr contexts
- https://github.com/php/php-src/commit/447b3470de43bf2435ad5a138a964c2f2c4fc4a6
- 定数式を使える箇所で `parent::class` を使えるよう修正
- こらそこ、「[出来なかったのかよ](https://3v4l.org/UAAdl)」とか言わない、特に HHVM ユーザの君！

## nikic: Detect invalid uses of parent:: during compilation
- https://github.com/php/php-src/commit/a9e6667817c38f22f4645ec5b4e5c6b0e4b928fa
- 親のないクラスでの `parent::` をコンパイルエラーとするよう修正
- 以前はランタイムエラーだった
- 実行されないコードだとエラーにならなかったのがエラーになるようになるので、若干後方互換性の崩れる部分となる

## nikic: Resolve parent::class at compile-time if possible
- https://github.com/php/php-src/commit/9ca217f506afe86e1e638782474df6c11d0a6380
- `parent::class` を可能ならコンパイル時に解決するよう修正

## Andrey Hristov: Add type safety for mysqlnd plugin developers
- https://github.com/php/php-src/commit/4c4216bcab782eb5875c49d61ce591563e0a641b
- ext/mysqlnd で、プラグインで使う用に typedef を追加
- コミットコメントおおげさじゃないの！

## nikic: Fix bug [#77410](https://bugs.php.net/bug.php?id=77410)
- https://github.com/php/php-src/commit/361d3ede9394d03defba64237628e6b1a0a2a16b
- [7.3~]
- ext/soap で、メソッドを空配列のパラメータで起動しようとすると SEGV が出る問題の修正

## Andrey Hristov: const-ify some functions
- https://github.com/php/php-src/commit/f1ede80781e0555e83dec6b160a051c3fc8f6baf
- ext/mysqlnd で、幾つかの宣言に const を足した