関数のオーバーロード機能
警告この機能は PHP 7.2.0 で
非推奨 になり、PHP 8.0.0 で 削除
されました。この機能に頼らないことを強く推奨します。
PHP アプリケーションの多くは、英語等のシングルバイトの言語用に設計されており、
日本語を含むマルチバイト文字列を扱う場合には問題を生じる場合があります。
substr 等の PHP の文字列関数の多くは、
マルチバイト文字列に対応していません。
mbstring では、
対応するマルチバイト文字対応版の関数で既存の PHP 関数を
オーバーロードする機能をサポートします。関数のオーバーロードを行うと、例えば
substr を PHP スクリプトでコールした場合に、
mb_substr が代わりにコールされるようになります。
これにより、マルチバイト文字に対応しないアプリケーションの移植が容易となります。
関数オーバーロードを使用するには、php.ini の
mbstring.func_overload
ディレクティブに正の値を指定します。
これは、オーバーロードされる関数の種類を指定するビットマスクの組み合わせとなります。
mail 関数をオーバーロードするには 1 を指定します。
2 は文字列関数、4 は正規表現関数を表します。つまり、例えば
7 を指定すると、メール関数、文字列関数および正規表現関数が
オーバーロードされることになります。オーバーロードされる関数の一覧を以下に示します。
オーバーロードされる関数
mbstring.func_overload の値 |
元の関数 |
オーバーロードする関数 |
1 |
mail |
mb_send_mail |
2 |
strlen |
mb_strlen |
2 |
strpos |
mb_strpos |
2 |
strrpos |
mb_strrpos |
2 |
substr |
mb_substr |
2 |
strtolower |
mb_strtolower |
2 |
strtoupper |
mb_strtoupper |
2 |
stripos |
mb_stripos |
2 |
strripos |
mb_strripos |
2 |
strstr |
mb_strstr |
2 |
stristr |
mb_stristr |
2 |
strrchr |
mb_strrchr |
2 |
substr_count |
mb_substr_count |
注意:
ディレクトリ単位の設定でこのオプションを使用することは推奨されません。
これは、実際の運用環境ではまだ安定性が確認されておらず、
予期しない結果をもたらす可能性があるためです。