59
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHP8で削除される機能

Last updated at Posted at 2017-06-23

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行きで、一応インストールすれば今後も使うことはできる模様。

まとめ

今からでもこれらの機能は使わないようにしておきましょう。
といっても、まともに運用してるところではほとんど残ってないような機能しかない気もするけど。

59
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?