## PHP 7.2.x で推奨されなくなる機能

### クオートしない文字列

クオートしない文字列は、その名前のグローバル定数が定義されていない場合は単なる文字列という扱いになります。 このとき、いままでは `E_NOTICE` が発生していました。 PHP 7.2.x 以降は、`E_WARNING` が発生するようになります。 次のメジャーバージョンアップ後は Error 例外が発生するようになります。

    <?php

    var_dump(NONEXISTENT);

    /* 出力:
    Warning: Use of undefined constant NONEXISTENT - assumed 'NONEXISTENT' (this will throw an Error in a future version of PHP) in %s on line %d
    string(11) "NONEXISTENT"
    */

### png2wbmp() および jpeg2wbmp()

GD 拡張モジュールの png2wbmp() および jpeg2wbmp() 関数は非推奨となり、次のPHPのメジャーバージョンアップで削除される予定です。

### `INTL_IDNA_VARIANT_2003` バリアント

Intl 拡張モジュール では、`INTL_IDNA_VARIANT_2003` バリアントは非推奨になりました。 これは idn_to_ascii() および idn_to_utf8() 関数の デフォルト値として現在使われています。PHP 7.4 ではこのデフォルト値が `INTL_IDNA_VARIANT_UTS46` に変更される予定ですし、 PHP の次のメジャーバージョンアップでは、 `INTL_IDNA_VARIANT_2003` が削除される予定です。

### __autoload() メソッド

__autoload()メソッドは非推奨になりました。なぜなら、この関数は (autoloader をチェインできない点で) spl_autoload_register() に劣っていますし、これら2つの autoload のやり方には互換性がないからです。

### php.ini の `track_errors` および `$php_errormsg` 変数

php.ini で `track_errors` の設定が有効になると、 致命的でないエラーが起きた場合に、`$php_errormsg` 変数がローカルスコープに生成されます。 このようなエラー情報を収集するのに望ましい方法は、error_get_last() 関数を使うことなので この機能は非推奨になりました。

### create_function() 関数

(eval() 関数のラッパーなので) この関数にはセキュリティ上の問題があるため、非推奨になりました。 好ましい代替は 無名関数 です。

### php.ini の `mbstring.func_overload`

この設定が有効になった環境で使われる、文字列ベースの関数の相互運用上の問題により、この設定は非推奨になりました。

### `(unset)` キャスト

あらゆる値を (unset) キャストすると `null` になりますが、この余分な機能は非推奨になりました。

### 第二引数を指定しないで parse_str() 関数を使う

2番目の引数を指定しないで parse_str() 関数を使うと、 これが使われた関数内部のシンボルテーブルを収集してしまいます。 これはセキュリティ上の問題があるため、2番目の引数を指定しないで parse_str() を使うのは非推奨になりました。この関数の2番目の引数は、クエリストリングを配列に設定してくれる ので、常に設定すべきです。

### gmp_random() 関数

この関数は、外部に公開されていない、プラットフォーム依存のlimbサイズの範囲に基づいて ランダムな数を生成しています。このため、この関数は非推奨になりました。GMP 拡張モジュールを使って ランダムな数値を生成する望ましいやり方は、 gmp_random_bits() および gmp_random_range() を使うことです。

### each()関数

この関数は、通常の `foreach`よりもループが遅く、PHPそのものの変更に伴って 実装上の問題を引き起こしたことから、非推奨になりました。

### assert()関数に文字列を渡す

assert() で eval() させるには、この関数に文字列を渡す必要がありました。 リモートからコードを実行される可能性があるので、この関数に文字列を渡すのは非推奨になりました。boolean 値を渡すのが お勧めです。

### エラーハンドラの `$errcontext` 引数

`$errcontext` 引数には、エラーが起きた場所の全てのローカル変数 が含まれています。これは使われることが少ないことと、PHP の内部的な最適化に問題を 引き起こすため、非推奨になりました。エラーが起きた場所のローカル変数の情報を取得 するには、デバッガを使うべきです。

### read_exif_data() 関数

read_exif_data() 関数は非推奨になりました。 代わりに exif_read_data() 関数を使ってください。

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open