2017/06/22にPHP7.2.0 α2が出ました。
アップグレードガイドにDeprecated Functionalityという項目がありました。
All the deprecated functionality listed in the following will be removed in PHP 8.0.
ここに書いてあるやつはPHP8.0で削除されるぜ、とか書いてあるので見てみましょう。
基本的にPHP7.2で非推奨になった機能はPHP8.0で削除される予定です。
PHP8.0で削除される機能
Core
The trace_errors ini directive has been deprecated.
そもそもtrace_errors
ってディレクティブが存在しないっぽいんだけどこれ本当に正しいのか?
track_errorsなんじゃないのという気がしてならない。
のっけからこんな間違いとか先が思いやられる。
The __autoload() mechanism has been deprecated
__autoloadはもう不要です。
今や完全上位互換のspl_autoload_registerがあるため、そちらを使いましょう。
The (unset) cast has been deprecated
(unset)キャストはunset()関数とは別物で、他の(int)
や(string)
等と同じ動作でnullにするだけのものです。
普通に(null)
ってしておけばよかったのに、どうしてこんな名前になってたのでしょうか。
$a = 1;
(unset)$a;
echo $a; // 1
unset($a);
echo $a; // Notice: Undefined variable: a
The create_function() function has been deprecated
create_functionは過去の遺物です。
クロージャを使いましょう。
というか、関数のcallable引数に渡すとき以外は普通に関数にすればいいと思うのだが。
The each() function has been deprecated
eachはforeachより10倍遅いうえ、他の機能に邪魔だったりといいことがないので削除されます。
foreachを使わずあえてeachを使わなければいけない場面って存在するだろうか。
GD
png2wbmp() and jpeg2wbmp() have been deprecated
謎のWBMP出力関数が削除されます。
GDは関数名識別とリソース引き回しが面倒なので、オブジェクト指向で書き直してくれないかな。
GMP
The gmp_random() function has been deprecated
gmp_randomはプラットフォームのビット数に依存して出力範囲が変わってしまうという大問題がありました。
かわりにプラットフォームに依存しないgmp_random_bitsか、そもそも範囲を数値で指定できるgmp_random_rangeを使いましょう。
Intl
INTL_IDNA_VARIANT_2003 has been deprecated
INTL_IDNA_VARIANT_2003はは非推奨になったので、かわりにINTL_IDNA_VARIANT_UTS46を使いましょう。
とか言われても、そもそもIDNA2003とかUST46とかが何なのかがさっぱりわからん。
Mbstring
The mbstring.func_overload ini directive has been deprecated
mbstringの関数オーバーロードが撤廃されます。
マルチバイト対応が必要なら、普通にmb_strposみたいに書きましょう。
経緯についてはこのあたりのMLみたいですが、よくわかりませんでした。
Standard
Calling parse_str() without the result argument has been deprecated
parse_strは第二引数を指定しないときは変数を現在のスコープに展開するというregister_globals機能があります。
今後は第二引数を指定しないと使えなくなります。
むしろ参照渡しをやめて普通に返り値にして欲しかった。
parse_str($query_string); // 'a=1'が$aに展開される
parse_str($query_string, $result); // 'a=1'が$result['a']に展開される
$result = parse_str($query_string); // こうしてほしかった
Calling assert() with a string argument has been deprecated
assertに文字列を渡すとeval
していましたが、今後は式を渡すことになります。
PHP5のassertは実はなんちゃってassertだったのですが、PHP7以降ノーコストで実行できるようになり実用的になりました。
PHP7.2で削除された機能
Mcrypt
PHP7.1でDeprecatedになったMcryptが、予告通り削除されました。
今後はPECL行きで、一応インストールすれば今後も使うことはできる模様。
まとめ
今からでもこれらの機能は使わないようにしておきましょう。
といっても、まともに運用してるところではほとんど残ってないような機能しかない気もするけど。