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() 関数を使ってください。
User Contributed Notes 2 notes
An empty <?php?> Codeblock in PHP 7.2.0 will put out an "Unquoted strings" warning. To prevent that, add at least one empty space into the codeblock.
Example:
<?php
<?php/*
echo "This was some useful code.\n";
*/?>
?>
Gives: PHP Warning: Use of undefined constant php - assumed 'php' (this will throw an Error in a future version of PHP)
Fix via:
<?php
<?php /*
echo "This was some useful code.\";
*/?>
?>
Don't know if that is an intentional behaviour or a side effect.
Instead of __autoload(), you can use spl_autoload_register() very easily, as per the documentation:
spl_autoload_register(function ($class) {
include 'classes/' . $class . '.class.php';
});
And this lets you have multiple autoloaders instead of one global one.