非互換性
1. foreach は内部配列ポインターを変更しなくなりました
PHP7 より前では、配列が foreach を介して反復されると、配列ポインターが移動していました。今後、これは当てはまらなくなります。以下のコードを参照してください。
<?php $array = [0, 1, 2]; foreach ($array as &$val) { var_dump(current($array)); }
PHP5 出力:
int(1)
int(2)
bool(false)
PHP7 出力:
int(0)
int(0)
int(0)
2、参照による foreach走査時の反復機能の向上
参照を使用して配列を走査する場合、foreach は反復中の変更をより適切に追跡できるようになりました。たとえば、反復中に反復値を配列に追加するには、次のコードを参照してください:
<?php $array = [0]; foreach ($array as &$val) { var_dump($val); $array[1] = 1; }
PHP5 出力:
int(0)
PHP7 出力:
int(0)
int(1)
3、16 進数の文字列は数値とみなされなくなりました
含まれる 16 進数の文字列は数値とみなされなくなりました
<?php var_dump("0x123" == "291"); var_dump(is_numeric("0x123")); var_dump("0xe" + "0x1"); var_dump(substr("foo", "0x1"));
PHP5 出力:
bool(true)
bool(true)
int(15)
string(2) "oo"
PHP7 出力:
bool(false)
bool(false)
int(0)
注意: /tmp/test.php の 5 行目で整形式でない数値が見つかりました
string (3) "foo"
4. PHP7 で削除された関数
削除された関数のリストは次のとおりです:
call_user_func() および call_user_func_array() は、PHP 4.1.0 から非推奨になりました。
非推奨の mcrypt_generic_end() 関数は削除されました。代わりに mcrypt_generic_deinit() を使用してください。
非推奨の mcrypt_ecb()、mcrypt_cbc()、mcrypt_cfb()、および mcrypt_ofb() 関数は削除されました。
set_magic_quotes_runtime() とそのエイリアス magic_quotes_runtime() は PHP 5.3.0 で非推奨となり、マジック クオートの非推奨により PHP 5.4.0 では機能も失いました。
廃止された set_socket_blocking() 関数は削除されました。代わりに stream_set_blocking() を使用してください。
dl() は PHP-FPM では使用できなくなりましたが、CLI および埋め込み SAPI では引き続き使用できます。
GD ライブラリ内の次の関数が削除されました: imagepsbbox()、imagepsencodefont()、imagepsextendfont()、imagepsfreefont()、imagepsloadfont()、imagepsslantfont()、imagepstext()
設定ファイル php.ini で、 always_populate_raw_post_data、asp_tags、xsl.security_prefs は削除されました。
5. new 演算子によって作成されたオブジェクトは、参照によって変数に代入できません。
<?php class C {} $c =& new C;
PHP5 の出力:
の代入。参照による new の戻り値は、/tmp/test.php の 3 行目で非推奨になりました
PHP7 出力:
解析エラー: 構文エラー、/tmp/test.php の 3 行目で予期しない 'new' (T_NEW) が発生しました
6. ASP の削除とスクリプト PHP タグ
ASP のようなタグを使用し、PHP コードを区別するためのスクリプト タグが削除されました。 影響を受けるタグは次のとおりです: <% %>、<%= %>、
7. 通話中不一致のコンテキストで静的に非静的メソッドは PHP 5.6 で非推奨になりましたが、PHP 7.0 では、呼び出されたメソッドで未定義の $this 変数が発生し、この動作が非推奨であるという警告が表示されます。
<?php class A { public function test() { var_dump($this); } } // 注意:并没有从类 A 继承 class B { public function callNonStaticMethodOfA() { A::test(); } } (new B)->callNonStaticMethodOfA();
PHP5 出力:
非推奨: /tmp/test.php の 8 行目で互換性のないコンテキストから $this を想定しているため、非静的メソッド A::test() を静的に呼び出すべきではありません
object(B)#1 (0) {
}
PHP7 出力:
非推奨: 非静的メソッド A::test() は /tmp/test.php の 8 行目で静的に呼び出すべきではありません
注意: 未定義の変数: / にありますtmp/test.phpの3行目NULL
8. 値がオーバーフローすると内部関数が失敗します
浮動小数点数を整数に変換する際、浮動小数点数が大きすぎると表現できません。この場合、以前のバージョンでは、内部関数はエラーを発生させずに整数を直接切り捨てていました。 PHP 7.0 では、これが発生すると、E_WARNING エラーが発生し、NULL が返されます。
9. JSON 拡張子が JSOND に置き換えられました
JSON 拡張子が JSOND 拡張子に置き換えられました。 数値の処理に関して注意すべき点は 2 つあります。まず、数値をピリオド (.) で終わらせることはできません (たとえば、値 34. は 34.0 または 34 と記述する必要があります)。 次に、科学表記法を使用して値を表現する場合、e の前にピリオド (.) を付けることはできません (たとえば、3.e3 は 3.0e3 または 3e3 と記述する必要があります)
10。INI ファイル内の # コメント形式。は削除されました
ファイル INI ファイルでは、# で始まるコメント行はサポートされなくなりました。コメントを示すには (セミコロン) を使用してください。 この変更は、php.ini と、parse_ini_file() および parse_ini_string() 関数で処理されるファイルに適用されます。
11. $HTTP_RAW_POST_DATA は削除されました
$HTTP_RAW_POST_DATA 変数は提供されなくなりました。 代わりに php://input を使用してください。
12. Yield が右結合演算子に変更されました
在使用 yield 关键字的时候,不再需要括号, 并且它变更为右联接操作符,其运算符优先级介于 print 和 => 之间。 这可能导致现有代码的行为发生改变。可以通过使用括号来消除歧义。
<?php echo yield -1; // 在之前版本中会被解释为: echo (yield) - 1; // 现在,它将被解释为: echo yield (-1); yield $foo or die; // 在之前版本中会被解释为: yield ($foo or die); // 现在,它将被解释为: (yield $foo) or die;
以上がphp7の非互換性について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。