ホームページ バックエンド開発 PHPチュートリアル php7の非互換性について詳しく解説

php7の非互換性について詳しく解説

Jun 27, 2017 am 10:10 AM
ie php php7 互換性がありません について コンテンツ

非互換性

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 サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

Docker環境にPECLを使用して拡張機能をインストールするときにエラーが発生するのはなぜですか?それを解決する方法は? Docker環境にPECLを使用して拡張機能をインストールするときにエラーが発生するのはなぜですか?それを解決する方法は? Apr 01, 2025 pm 03:06 PM

エラーの原因とソリューションPECLを使用してDocker環境に拡張機能をインストールする場合、Docker環境を使用するときに、いくつかの頭痛に遭遇します...

See all articles