ホームページ >バックエンド開発 >PHPチュートリアル >PHP の非推奨のエラーから始めましょう

PHP の非推奨のエラーから始めましょう

WBOY
WBOYオリジナル
2016-06-20 12:55:041404ブラウズ

非推奨の問題を発見しました

最近、基本的な機能が正常になったプロジェクトを完了し、オンラインでリリースしました。その結果、以下に示すように、オンラインになった直後に多数のエラーが発見されました。

一見すると、それらはすべて PHP の非推奨エラーであり、最も低いレベルです。
PHP 公式マニュアルでは、エラー レベルについて次のように説明されています。

参照: PHP 公式説明書

非推奨の問題を検索

最初の項目を表示 詳細


上の図からわかるように、エラーの原因は common.ini.php での eregi 関数の使用であり、これが Deprecated エラーを引き起こします。
問題のコードは common.ini.php の 52 行目にあります。
コードを表示します:

phperegi('.([^.]*$)', $fileName, $ extension);

生成されたエラー。これはファイルのサフィックス名を取得するための正規表現です。

非推奨の問題の分析

エラーの理由は、PHP が正規表現の処理に eregi 関数の使用を推奨していないためです。
公式の PHP 5.3 互換性ドキュメントを引用すると、声明は次のとおりです。

参照: PHP 公式の説明

PHP 公式は、eregi 関数が機能しないことを指摘しました。 PHP5.3 では推奨されていますが、代わりに preg_match 関数を使用することをお勧めします。

非推奨の問題の解決

次に、eregi を perg_match に置き換えて、正規表現を変更します。
perg_match を使用するコードは次のとおりです。

phppreg_match('/.([^.]*$)/', $fileName, $ extension);

このようにして、Deprecated エラーは表示されなくなります。

非推奨の問題を調べる

通常の状況では、非推奨のエラーは修復されなくても動作に影響を与えませんが、パフォーマンスに影響はありますか?
まずエラー出力の比較テストを行い、display_error 出力をオフにします。
コードは次のとおりです:

php<?php$loop=10000;$date='2015-06-04';$startTime = microtime(true);for($i=0;$i<$loop;$i++){    if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {        echo "$regs[3].$regs[2].$regs[1]";    } else {        echo "Invalid date format: $date";    }}echo 'processing time: ', (microtime(true) - $startTime), "\r\n";

結果は次のとおりです:
[非推奨あり] 処理時間: 0.51678085327148
[非推奨なし] 処理時間: 0.31887912750244

その証拠に、オンにしてください。非推奨です。error_reporting をオフにすると、パフォーマンスがオフのときの 2 倍低下します。具体的な理由は下記通知と同様です。
別の実験を行って、それぞれ 2 つの PHP プログラムを作成してみましょう。1 つは非推奨のエラーを含むコードで、もう 1 つは非推奨のエラーを修正するコードです。

実行して結果を確認します。 :
トリガーは非推奨です: 0.33528900146484
トリガーは非推奨です: 0.019602060317993

2 つのパフォーマンスの差は 17.63 倍です。 ereg を preg_match に置き換えると、Deprecated エラーが消えるだけでなく、パフォーマンスも大幅に向上します。
パフォーマンスが向上した理由は、Perl が POSIX よりも正規表現を高速に処理するためです。

非推奨のエラーには潜在的な互換性の問題があるため、注意が必要です。
Deprecated を示すすべての関数は公式には使用が推奨されておらず、将来的には新しいバージョンの PHP と互換性がなくなる可能性があります。
最も典型的なケースは、PHP5.5.0 以降が mysql_query および mysql_connect と互換性がなくなったことです。
PHP バージョンのアップグレード後にプログラムが正常に動作することを確認するには、mysqli と PDO を使用してデータベースにアクセスする必要があります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。