deprecated (非推奨)エラーの解消方法

こんにちはー!むちょこです。

PHP をバージョンアップした際に、Function xxx() is deprecated というエラーが出てしまったことはありませんか?

ここでは、具体例として money_format() を使って、その解消方法をご紹介していきたいと思います!

deprecated エラーとは

PHP をバージョンアップすると、それまでは普通に使えていた関数が非推奨扱いになることがあります。

そのとき出力されるのが deprecated エラー(日本語で”非推奨”という意味)です。

例えば money_format() 関数は PHP 7.4.0 から非推奨となりましたので、使うと以下のような警告が出ます。

Function money_format() is deprecated

代替手段を確認する方法

deprecated エラーが出たら、その関数の公式マニュアルを見るのがオススメです。

https://www.php.net/manual/ja/function.money-format.php

公式マニュアルには、まず上部にわかりやすく非推奨であることが記されています。

そして、変更履歴のところまで進むと代わりに何を使えばいいかも書かれています。

基本的にはこれに従って非推奨部分を書き換えれば大丈夫です。

代替手段で置き換える

公式マニュアルの変更履歴に貼られていたリンクをクリックして、新しい書き方の内容を確認します。

https://www.php.net/manual/ja/numberformatter.formatcurrency.php

今回の例でもそうですが、最近はオブジェクト指向型と手続き型両方が選べるものが多いです。

PHP はどんどんオブジェクト指向型に寄っていっているので、特に理由がなければオブジェクト指向型を選ぶのがオススメです(もちろん手続き型を選んだ方が良い理由がある場合は手続き型を選んでいただいて何ら問題ありません)。

書き方は、公式マニュアルの例項目にも書いてありますのでそれを参考にしていただくと良いと思います。

例2 オブジェクト指向の例から引用
<?php
$fmt = new NumberFormatter( 'de_DE', NumberFormatter::CURRENCY );
echo $fmt->formatCurrency(1234567.891234567890000, "EUR")."\n";
echo $fmt->formatCurrency(1234567.891234567890000, "RUR")."\n";
$fmt = new NumberFormatter( 'ru_RU', NumberFormatter::CURRENCY );
echo $fmt->formatCurrency(1234567.891234567890000, "EUR")."\n";
echo $fmt->formatCurrency(1234567.891234567890000, "RUR")."\n";
?>

おまけ

NumberFormatter::formatCurrency() で日本円フォーマットを表示する方法

公式マニュアルには外貨の例しかありませんでしたが、日本円のフォーマットにするならこんな感じです。

日本円
$fmt = new NumberFormatter( 'ja_JA', NumberFormatter::CURRENCY );
echo $fmt->formatCurrency(1234567.891234567890000, "JPY");
// ¥1,234,568

クラス・関数が存在しないというエラーが出たとき

代替手段を使おうと思ったら「そんなクラスないよー」って言われちゃった、、、って時は、必要なモジュールが足りていない可能性があります。

インストールのページを見て、どんな拡張モジュールが必要か、それが自分の環境に入っているのかを確認して、なければインストールしてください。

NumberFormatter の場合は、intl 拡張モジュールが必要です。

https://www.php.net/manual/ja/intl.installation.php