PHPのお勉強!

PHP TOP

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() 関数を使ってください。

add a note

User Contributed Notes 2 notes

up
2
Anonymous
6 years ago
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.
up
2
webmaster at thedigitalorchard dot ca
6 years ago
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.
To Top