削除された関数
PHP 4.1から既に推奨されなくなっていた関数のcall_user_method()とcall_user_method_array()が廃止されました。PHP 7ではこれらの代わりにcall_user_func()とcall_user_func_array()もしくは可変関数などのように代替の手段で置き換える必要があります。
class Hoge{ function foo(){ echo "Hoge.foo() \n"; } } $hoge = new Hoge(); call_user_method("foo",$hoge); // PHP 7では削除 call_user_func(array($hoge,"foo")); // call_user_funcを使った記述
16進数形式の数字文字列の扱い方
16進数形式の文字列を数値として処理をする場合には、PHP 5.xでは数値として扱うことができましたが、PHP 7では通常の文字列として扱うようになりました。このため、PHP 5.xと同様な振る舞いを望む場合にはリスト9でしめすようにfilter_var関数を通して行うことで回避することが可能です。
また、数字文字列の扱い方での変更ではありませんが、8進数の表記で誤りがあった場合にPHP 7ではエラーの扱いに変わりますのでこちらも関連して知っておくと良いでしょう。
$num = "0x123"; //(1)16進数形式の文字列 var_dump($num + 0); // PHP 5.xでは291 / PHP 7では0 var_dump(is_numeric($num)); // PHP 5.xではtrue / PHP 7ではfalse $num1 = filter_var($num, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX); var_dump($num1 + 0); // PHP 5.xでは291 / PHP 7では291 var_dump(is_numeric($num1)); // PHP 5.xではtrue / PHP 7でもtrue $num8_1 = "0709"; //(2)誤った8進数表記 var_dump($num8_1 + 0); // PHP 5.xでは709 / PHP 7でも709 var_dump(is_numeric($num8_1)); // PHP 5.xではtrue / PHP 7でもtrue $num8_2 = 0709; //(3)PHP 5.x では56(070) / PHP 7ではエラー var_dump($num8_2);
(1)のように"0x"で始まる文字列についてPHP 7ではあくまでも文字列としての扱われますが、(2)のように誤った8進数表記の場合には10進数の数字として扱われます。
ただし、文字列として記述した場合ではなく(3)のように数値として記述している場合にPHP 5.xでは070として8進数の数字としてあつかわれますが、PHP 7では無効な数値表記としてのエラーとして扱われます。
JSON拡張モジュールの内部実装の変更
JSONモジュールの内部実装が変わり、jsondというモジュールに置き換わりました。基本的には、関数名などが変わるわけでもないためPHPのコード自体で変更が必要ということはありませんが、リスト10のように数値関連で多少の問題が生じるケースがあります。
//(1)PHP 5.xでのみ記述可能な形式 $json5 = <<< JSON { "value1" : 32, "value2" : 20., "value3" : 2.e3 } JSON; //(2)PHP 5.x/PHP 7ともに問題ない記述 $json7 = <<< JSON { "value1" : 32, "value2" : 20.0, "value3" : 2e3 } JSON; var_dump(json_decode($json5)); var_dump(json_decode($json7));
(1)のJSON形式のvalue2において小数点で終了している形式、value3のように指数eを用いた場合でも少数点で終了している数値に続いて記述することはできなくなりますので、(2)のように20もしくは20.0、また2.e3は2e3もしくは2.0e3のように記述する必要があります。
$HTTP_RAW_POST_DATAの削除
$HTTP_RAW_POST_DATAを使ってPOSTデータを取得することができなくなりました。application/x-www-form-urlencoded あるいは multipart/form-data などのContent-Type以外のデータを取得する場合に使っていた場合などに使うケースがありますが、今後は、php://inputを使うようにします。
INIファイルのコメントアウトの変更
INIファイルでは#で始まる行はコメントとして扱われていましたが、この形式がサポートされなくなりました。代わりに;(セミコロン)を使う必要があります。また、この変更はparse_ini_file()やparse_ini_string()にも適用されるので注意が必要です。
ASPタグとScriptタグの廃止
PHPでは通常は「<?php」で始まり、「?>」で終了するタグを利用します。現在では、終了タグは省略することが推奨されているので、終了タグは使っていない方もいることとは思いますが、PHP 5.xまでは、「<%、%>」や「<%=」もしくは「<script language='php'>」のようなタグの利用も行えましたが、これらのタグはPHP 7では利用できなくなりました。
また、「<?=」はPHP 5.3まではshort_open_tagの設定に依存していましたが、PHP 5.4からは常に使えるようになっていますので、PHP 5.3からの移行の場合にはこれらも知っておくと便利です。