検索
ホームページバックエンド開発PHPチュートリアルPHP 7.3 アップデートを理解するのに役立つ記事

PHP 7.3 アップデートを理解するのに役立つ記事

PHP は、主にコア メンテナンス チームの更新が迅速であるため、依然として他のスクリプト言語に対する強力な競争相手です。

PHP 7.0 のリリース以来、コミュニティは、開発者がプロ​​ジェクトに PHP を適用する方法を大幅に改善する多くの新機能の誕生を目の当たりにしてきました。これらの改善の主な目的は、PHP アプリケーションのパフォーマンスとセキュリティを向上させることです。

PHP は最近、別のマイルストーンを達成しました - PHP 7.3 をリリースしました。新しいバージョンには、待望のアップデートがいくつか含まれています。

この記事では、PHP 7.3 の新機能と更新について説明します。良いニュースは、新しいバージョンを自分でテスト サーバーにインストールして、新機能をチェックできることです。ただし、古いことわざにあるように、運用サーバーでは RC バージョンの更新を決して使用しないでください。既に稼働中のアプリケーションが破損する可能性があります。

以下は、バージョン 7.3 で導入された更新の一部であり、以前のバージョンと比較して PHP 7.3 のパフォーマンスを大幅に向上させます。

  • 柔軟な Heredoc および Nowdoc 構文
  • 関数呼び出しで末尾のカンマを許可する
  • JSON_THROW_ON_ERROR
  • PCRE2 migration
  • list( )割り当て参照
  • is_countable 関数
  • array_key_first()、array_key_last()
  • Argon2 パスワード ハッシュの拡張機能
  • 非推奨および削除された image2wbmp()
  • 大文字と小文字を区別しない定数の非推奨と削除
  • 同じサイトの Cookie
  • FPM の更新
  • Windows でのファイル削除の改善

それぞれについて説明します。上記は順次更新されます。

柔軟な Heredoc および Nowdoc 構文

Heredoc および Nowdoc 構文は、複数行にわたる長い文字列を操作する場合に非常に役立ちます。終了識別子が新しい行に現れる最初の文字列である必要があります。

// 除了这样:

$query = <p> 全体として、この更新では次の 2 つの改善が提案されています。 </p><ol>
<li> 識別子を閉じる前のインデントがサポートされる </li>
<li> 識別子を閉じた後はインデントがサポートされない 強制改行</li>
</ol>#上記の例では、これらの変更を簡単に確認できます。 <p></p>関数呼び出しでは末尾のカンマを使用できます<h2></h2>パラメータ、要素、変数リストの末尾に末尾のカンマを追加します。配列や関数呼び出し (特に可変パラメーター関数) で多数の要素を渡す必要がある場合があります。カンマが欠落していると、エラーが報告されます。この場合、末尾のカンマは非常に便利です。この機能はすでに配列内で許可されており、PHP 7.2 以降では、グループ化された名前空間 (<p>Grouped Namespaces<code>) 構文でも末尾のカンマがサポートされています。 </code></p><pre class="brush:php;toolbar:false">use Foo\Bar\{
   Foo,
   Bar,
};

$foo = [
   'foo',
   'bar',
];
ここに新しい値を追加する必要がある場合、末尾のカンマは非常に便利です。これは、

unset() などの可変個引数関数内で特に当てはまります。

unset(
   $foo,
   $bar,
   $baz,
);
同時に、

compact() 関数を使用して変数のバッチをテンプレート エンジンに渡すときにも使用できる例です。

echo $twig->render(
   'index.html',
   compact(
       'title',
       'body',
       'comments',
   )
);
連続データまたはグループ化されたデータを構築する必要がある場合、配列をマージするために

array_merge() 関数がよく使用されます。末尾にコンマを使用することもできます:

$newArray = array_merge(
   $arrayOne,
   $arrayTwo,
   ['foo', 'bar'],
);
同様に、メソッド、関数、またはクロージャを呼び出すときにこの機能を使用できます。

class Foo
{
 public function __construct(...$args) {
   //
 }

 public function bar(...$args) {
   //
 }

 public function __invoke(...$args) {
   //
 }
}

$foo = new Foo(
 'constructor',
 'bar',
);

$foo->bar(
 'method',
 'bar',
);

$foo(
 'invoke',
 'bar',
);
JSON_THROW_ON_ERROR

JSON 応答データを解析するには、

json_encode()json_decode() という 2 つの関数を使用できます。残念ながら、それらのどれも適切なエラースロー動作を持っていません。 json_encode は失敗した場合のみ false を返します。json_decode は失敗した場合に null を返します。有効な JSON 値として使用されます。エラーを取得する唯一の方法は、json_last_error() または json_last_error_msg() を呼び出すことです。これにより、それぞれ機械可読および人間可読のグローバル エラー ステータスが返されます。 この RFC で提案されている解決策は、新しい JSON_THROW_ON_ERROR

定数を JSON 関数に追加して、グローバル エラー ステータスを無視することです。エラーが発生すると、JSON 関数は

JsonException 例外をスローします。例外メッセージ (message) は json_last_error() の戻り値であり、例外はcode (code) は json_last_error_msg() の戻り値です。以下は呼び出し例です。

json_encode($data, JSON_THROW_ON_ERROR);

json_decode("invalid json", null, 512, JSON_THROW_ON_ERROR);

// 抛出 JsonException 异常
Upgrade PCRE2PHP は正規表現エンジンとして PCRE を使用します。しかし、PHP 7.3 以降、PCRE2 は新しい通常のエンジンとしてその才能を発揮します。したがって、PCRE2 ルールに準拠するには、既存の正規表現を移行する必要があります。これらのルールは以前よりも煩わしいものになっています。次の例を参照してください。

preg_match('/[\w-.]+/', '');

この式は、PHP の新しいバージョンでは一致しないため、警告はトリガーされません。 PCRE2 は厳密になったため、ハイフン (

-

) を範囲を表すのではなく一致させる場合は、末尾に移動するかエスケープする必要があります。

PCRE2 10.x に更新すると、次の機能およびその他の機能がサポートされます:

  • 相对后向引用 \g{+2}(等效于已存在的 \g{-2}
  • PCRE2 版本检查 (?(VERSION>=x)...)
  • (*NOTEMPTY)(*NOTEMPTY_ATSTART) 告知引擎勿返回空匹配
  • (*NO_JIT) 禁用 JIT 优化
  • (*LIMIT_HEAP=d) 限制堆大小为 d KB
  • (*LIMIT_DEPTH=d) 设置回溯深度限制为 d
  • (*LIMIT_MATCH=d) 设置匹配数量限制为 d

译者注:国内正则术语参差不一,「后向引用」—— Back References,又称「反向引用」、「回溯引用」等,此处参考 PHP 官方手册的中文译本。

list() 赋值引用

PHP 中的 list() 现在可以赋值给引用,在当前版本中 list() 中赋值不能使用引用,在 PHP 7.3 中将允许使用引用,新改进的语法如下:

$array = [1, 2];
list($a, &$b) = $array;

相当于

$array = [1, 2];
$a = $array[0];
$b =& $array[1];

在 PHP 7.3 的变更中,我们还可以与 foreach() 方法一起嵌套使用

$array = [[1, 2], [3, 4]];
foreach ($array as list(&$a, $b)) {
   $a = 7;
}
var_dump($array);

is_countable 函数

在 PHP 7.2 中,用 count() 获取对象和数组的数量。如果对象不可数,PHP 会抛出警告⚠️ 。所以需要检查对象或者数组是否可数。 PHP 7.3 提供新的函数 is_countable() 来解决这个问题。

该 RFC 提供新的函数 is_countable(),对数组类型或者实现了 Countable 接口的实例的变量返回 true 。

之前:

if (is_array($foo) || $foo instanceof Countable) {
   // $foo 是可数的
}

之后:

if (is_countable($foo)) {
   // $foo 是可数的
}

array_key_first(), array_key_last()

当前版本的 PHP 允许使用 reset()end()key() 等方法,通过改变数组的内部指针来获取数组首尾的键和值。现在,为了避免这种内部干扰,PHP 7.3 推出了新的函数来解决这个问题:

  • $key = array_key_first($array); 获取数组第一个元素的键名
  • $key = array_key_last($array); 获取数组最后一个元素的键名

让我们看一个例子:

// 关联数组的用法
$array = ['a' => 1, 'b' => 2, 'c' => 3];

$firstKey = array_key_first($array);
$lastKey = array_key_last($array);

assert($firstKey === 'a');
assert($lastKey === 'c');

// 索引数组的用法
$array = [1 => 'a', 2 => 'b', 3 => 'c'];

$firstKey = array_key_first($array);
$lastKey = array_key_last($array);

assert($firstKey === 1);
assert($lastKey === 3);

译者注:array_value_first()array_value_last() 并没有通过 RFC 表决;因此 PHP 7.3 内仅提供了 array_key_first() 以及 array_key_last() 函数。
参考链接:https://wiki.php.net/rfc/array_key_first_l...

Argon2 和 Hash 密码加密性能增强

在PHP的早期版本中,我们增加了Argon2和哈希密码加密算法,这是一种使用哈希加密算法来保护密码的现代算法。它有三种不同的类型,Argon2i,Argon2d和Argon 2id。 我们针对Argon2i密码散列和基于密码的密钥生成进行了优化。 Argon2d性能更快,并使用依赖于内存的数据访问。 Argon2i使用与内存无关的数据访问。 Argon2id是Argon2i和Argon2d的混合体,使用依赖于数据和与数据独立的存储器访问的组合。

password_hash():

Argon2id现在是在paswword_ *函数中使用的推荐的Argon2变量。

具有自定义成员方法的名称的Argon2id与PASSWORD_ARGON2I的使用方法相同
password_hash('password',PASSWORD_ARGON2ID,['memory_cost'=> 1  4,'threads'=> 2]);

password_verify();

除了Argon2i之外,password_verify()函数也适用于Argon2id。

password_needs_rehash();

此函数也将接受Argon2id哈希值,如果任何变量成员发生变化,则返回true。

$hash = password_hash('password', PASSWORD_ARGON2ID);
password_needs_rehash($hash, PASSWORD_ARGON2ID); // 返回假
password_needs_rehash($hash, PASSWORD_ARGON2ID, ['memory_cost' => 1<h2 id="废弃并移除-image-wbmp">废弃并移除 image2wbmp()</h2><p>该函数能够将图像输出为 WBMP 格式。另一个名为 <code>imagewbmp()</code> 的函数也同样具备单色转换的作用。因此,出于重复原因,<a href="https://wiki.php.net/rfc/image2wbmp">image2wbmp()</a> 现已被废弃,你可使用 <code>imagewbmp()</code> 代替它。此函数被弃用后,再次调用它将会触发已弃用警告。待后续此函数被移除后,再次调用它将会触发致命错误。</p><h2 id="废弃并移除大小写不敏感的常量">废弃并移除大小写不敏感的常量</h2><p>使用先前版本的 PHP,你可以同时使用大小写敏感和大小写不敏感的常量。但大小写不敏感的常量会在使用中造成一点麻烦。所以,为了解决这个问题,PHP 7.3 废弃了大小写不敏感的常量。</p><p>原先的情况是:</p>
  • 类常量始终为「大小写敏感」。
  • 使用 const 关键字定义的全局常量始终为「大小写敏感」。注意此处仅仅是常量自身的名称,不包含命名空间名的部分,PHP 的命名空间始终为「大小写不敏感」。
  • 使用 define() 函数定义的常量默认为「大小写敏感」。
  • 使用 define() 函数并将第三个参数设为 true 定义的常量为「大小写不敏感」。

如今 PHP 7.3 提议废弃并移除以下用法:

  • In PHP 7.3: 废弃使用 true 作为 define() 的第三个参数。
  • In PHP 7.3: 废弃使用与定义时的大小写不一致的名称,访问大小写不敏感的常量。truefalse 以及 null 除外。

PHP 7.3 在建议在使用 cookies 时,增加同站点标志。这个 RFC 会影响4个系统函数。

  1. setcookie
  2. setrawcookie
  3. session_set_cookie_params
  4. session_get_cookie_params

这个影响会在两种情况下起作用。其中一种方式会添加函数的新参数
,另一种方式允许以数组形式的选项代替其他单独选项。

bool setcookie(

   string $name

   [, string $value = ""

   [, int $expire = 0

   [, string $path = ""

   [, string $domain = ""

   [, bool $secure = false

   [, bool $httponly = false ]]]]]]

)

bool setcookie (

   string $name

   [, string $value = ""

   [, int $expire = 0

   [, array $options ]]]

)

// 两种方式均可.

FPM 更新

FastCGI 进程管理器也进行了更新,现在提供了新的方式来记录 FPM 日志。

log_limit: 设置允许的日志长度,可以超过 1024 字符。

log_buffering: 允许不需要额外缓冲去操作日志。

decorate _workers_output: 当启用了 catch_workers_output 时,系统会去禁用渲染输出。

改进 Windows 下的文件删除

官方文档所述:

默认情况下,文件描述符以共享读、写、删除的方式去操作。 这很有效的去映射 POSIX 并允许去删除正在使用中的文件。但这并不是100%都是一样的,不同的平台可能仍存在一些差异。删除操作之后,文件目录仍存在直到所有的文件操作被关闭。

结束语

之前我们已经讲解了最新版本的 PHP7.3 的特点,包含了许多新增跟弃用的功能。这些功能都可以在 php.net 网站上找到,并且已经合并到主分支上了。你现在就可以使用这些新功能部署在自己的服务器上,你也可以打开官方RFC页面查阅每一个详细版本。如果你对着新版 PHP7.3 有任何问题,你可以在评论下写下自己的想法。

相关PHP视频教程推荐:《PHP视频教程》

以上がPHP 7.3 アップデートを理解するのに役立つ記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

さまざまなHTTPキャッシングヘッダー(例:キャッシュコントロール、ETAG、ラスト変更)を説明してください。さまざまなHTTPキャッシングヘッダー(例:キャッシュコントロール、ETAG、ラスト変更)を説明してください。Apr 17, 2025 am 12:22 AM

HTTPキャッシュヘッダーの主要なプレーヤーには、キャッシュコントロール、ETAG、およびラスト修飾が含まれます。 1.Cache-Controlは、キャッシュポリシーを制御するために使用されます。例:キャッシュコントロール:Max-Age = 3600、public。 2。ETAGは、一意の識別子を介してリソースの変更を検証します。例:ETAG: "686897696A7C876B7E"。 3. Last-Modifiedは、リソースの最後の変更時間を示しています。

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか?PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか?Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHP:サーバー側のスクリプト言語の紹介PHP:サーバー側のスクリプト言語の紹介Apr 16, 2025 am 12:18 AM

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPとWeb:その長期的な影響を調査しますPHPとWeb:その長期的な影響を調査しますApr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

なぜPHPを使用するのですか?利点と利点が説明されましたなぜPHPを使用するのですか?利点と利点が説明されましたApr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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