ホームページ バックエンド開発 PHP7 PHP 7.x の各バージョンの新機能の紹介

PHP 7.x の各バージョンの新機能の紹介

Jan 26, 2021 am 09:35 AM

PHP 7.x の各バージョンの新機能の紹介

推奨 (無料): PHP7

PHP 7.x それぞれバージョンの新機能

まえがき

先月、私の同僚が私が

$a = $a ?? '';
ログイン後にコピー

を書いているのを見て、その書き方について尋ねました。そしてこれも好きです どうやって書くのですか?これはPHP7以降でのみ使える書き方だと言いましたが、わかりませんか?彼は知らないと言った。

心の中でそうつぶやいて、このブログを書き始めようと思った。

PHP7 は、基本に加えて最新の PHP である必要があります。 PHP7 では、強力な型定義と、結合された比較演算子などの一部の文法的な記述方法により、define() で配列やその他の機能を定義できるためです。以下、PHP7.0から正式導入となりますが、今後も新しいバージョンが追加され、順次追加されていく予定です。
OK、始めましょう

PHP 7.0

スカラー型宣言

スカラー型とは何ですか?

4 つのスカラー型:
boolean (ブール型)
integer (整数型)
float (浮動小数点型、double とも呼ばれます)
string (文字列)
2 つの複合タイプ:
array (配列)
object (オブジェクト)
Resource は、外部リソースへの参照を保持する特別な変数です。リソースは、特殊な機能を通じて作成および使用されます。リソース タイプ変数は、ファイル、データベース接続、グラフィック キャンバス領域などを開くための特別なハンドルです。
より簡単に言うと、スカラー型は変数を定義するデータ型です。

php5 には、クラス名、インターフェイス、配列、コールバック関数があります。 PHP では、文字列、整数、浮動小数点数、およびブール値が追加されました。以下の例を見てみましょう。すべての例を参照してください

function typeInt(int $a){
    echo $a;}typeInt('sad');// 运行,他讲会报错 Fatal error: Uncaught TypeError: Argument 1 passed to type() must be of the type integer, string given
ログイン後にコピー

ここでは、$a が int 型である必要があると定義しています。type 関数に文字列が渡されると、エラーが報告されます。上記のコードを修正してみましょう。

function typeString(string $a){
    echo $a;}typeString('sad'); //sad
ログイン後にコピー

戻り値の型宣言

関数のメソッドの戻り値を定義できます。たとえば、私の特定の関数は次の値を返す必要があります。 int型の場合は必ずintを返しますが、stringを返す場合はエラーとなります。次のように

<?phpfunction returnArray(): array{

    return [1, 2, 3, 4];}print_r(returnArray());/*Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
*/
ログイン後にコピー

配列を定義して文字列または他の型を返すとどうなるでしょうか?

その後、彼は エラーを報告します

function returnErrorArray(): array
{

    return '1456546';
}

print_r(returnErrorArray());
/*
Array
Fatal error: Uncaught TypeError: Return value of returnArray() must be of the type array, string returned in 
*/
ログイン後にコピー

null マージ演算子

日常使用では 3 つの同時使用が多数発生します。 メタ式と isset() の場合、null 合体演算子 (??) の構文糖を追加します。変数が存在し、NULL でない場合はそれ自体の値を返し、それ以外の場合は 2 番目のオペランドを返します。

<?php

$username = $_GET[&#39;user&#39;] ?? &#39;nobody&#39;;
//这两个是等效的  当不存在user 则返回?? 后面的参数

$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;

?>
ログイン後にコピー

宇宙船オペレーター

// 整数echo 1 <=> 1; // 0 当左边等于右边的时候,返回0echo 1 <=> 2; // -1  当左边小于右边,返回-1echo 2 <=> 1; // 1  当左边大于右边,返回1// 浮点数echo 1.5 <=> 1.5; // 0echo 1.5 <=> 2.5; // -1echo 2.5 <=> 1.5; // 1
 // 字符串echo "a" <=> "a"; // 0echo "a" <=> "b"; // -1echo "b" <=> "a"; // 1
ログイン後にコピー

define 配列の定義

PHP7 より前のバージョンでは、define は配列を定義できません。たとえば、

define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

echo ANIMALS[1]; // 输出 "cat"
ログイン後にコピー

メソッドのバッチインポートを使用します

// PHP 7 之前的代码use some\namespace\ClassA;use some\namespace\ClassB;use some\namespace\ClassC as C;use function some\namespace\fn_a;use function some\namespace\fn_b;use function some\namespace\fn_c;use const some\namespace\ConstA;use const some\namespace\ConstB;use const some\namespace\ConstC;// PHP 7+ 及更高版本的代码use some\namespace\{ClassA, ClassB, ClassC as C};use function some\namespace\{fn_a, fn_b, fn_c};use const some\namespace\{ConstA, ConstB, ConstC};
ログイン後にコピー

Unicode コードポイント変換構文

echo "\u{aa}"; //ªecho "\u{0000aa}";  //ª  echo "\u{9999}"; //香
ログイン後にコピー
匿名クラス

<?phpinterface Logger {
    public function log(string $msg);}class Application {
    private $logger;

    public function getLogger(): Logger {
         return $this->logger;
    }

    public function setLogger(Logger $logger) {
         $this->logger = $logger;
    }}$app = new Application;$app->setLogger(new class implements Logger {  //这里就是匿名类
    public function log(string $msg) {
        echo $msg;
    }});
ログイン後にコピー
PHP 7.1

Nullable 型

パラメータと戻り値の型を渡すことができるようになりましたタイプ 空にするために、その前に疑問符を追加します。この機能が有効な場合、渡されるパラメーターまたは関数によって返される結果は、指定された型または null のいずれかになります。

<?phpfunction testReturn(): ?string{
    return &#39;elePHPant&#39;;}var_dump(testReturn()); //string(10) "elePHPant"function testReturn(): ?string{
    return null;}var_dump(testReturn()); //NULLfunction test(?string $name){
    var_dump($name);}test(&#39;elePHPant&#39;); //string(10) "elePHPant"test(null); //NULLtest(); //Uncaught Error: Too few arguments to function test(), 0 passed in...
ログイン後にコピー
void

<?phpfunction swap(&$left, &$right) : void{
    if ($left === $right) {
        return;
    }

    $tmp = $left;
    $left = $right;
    $right = $tmp;}$a = 1;$b = 2;var_dump(swap($a, $b), $a, $b);
ログイン後にコピー
多重例外キャプチャ処理

#などvoidを返す型を追加しました。 ##この関数は日常の開発でよく使用されます

<?php
try {
    // some code
} catch (FirstException | SecondException $e) {  //用 | 来捕获FirstException异常,或者SecondException 异常
  
}
ログイン後にコピー

#PHP 7.2

PHP7.2 は PHP7 シリーズの中で最も新しい機能ではありません

#グループ化された名前空間で末尾のカンマを許可する

たとえば、

<?phpuse Foo\Bar\{
    Foo,
    Bar,
    Baz,};
ログイン後にコピー

抽象メソッドのオーバーライドを許可する

<?phpabstract class A{
    abstract function test(string $s);}abstract class B extends A{
    // overridden - still maintaining contravariance for parameters and covariance for return
    abstract function test($s) : int;}
ログイン後にコピー

新しいオブジェクト タイプ

<?phpfunction test(object $obj) : object  //这里 可以输入对象{
    return new SplQueue();}test(new StdClass());
ログイン後にコピー

PHP 7.3

PHP7.3 構文レベルでの大きな変更はありません。

PHP 7.4

クラス属性の型宣言のサポート

PHP が強力な型付けに向けて新たな一歩を踏み出したことをおめでとうございます

<?phpclass User {
    public int $id;
    public string $name;}?>
ログイン後にコピー

アロー関数

アロー関数は、暗黙的な値によるスコープ バインディングを使用して関数を定義するための短縮構文を提供します。これは JS の arrow 関数に似ていますが、fn が付いています。クレームの波

<?php$factor = 10;$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);// $nums = array(10, 20, 30, 40);?>
ログイン後にコピー

Nullマージオペレータサポートメソッド

<?php$array[&#39;key&#39;] ??= computeDefault();// 类似与这个if (!isset($array[&#39;key&#39;])) {
    $array[&#39;key&#39;] = computeDefault();}?>
ログイン後にコピー

以上がPHP 7.x の各バージョンの新機能の紹介の詳細内容です。詳細については、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)

PHP 7でセッションを効果的に使用する方法は? PHP 7でセッションを効果的に使用する方法は? Mar 10, 2025 pm 06:20 PM

この記事では、session_start()、$ _session、session_destroy()、セキュアクッキー処理などのコア機能をカバーする効果的なPHP 7セッション管理について詳しく説明します。 HTTPS、セッションID再生、sなどのセキュリティベストプラクティスを強調しています

New RelicなどのツールでPHP 7のパフォーマンスを監視する方法は? New RelicなどのツールでPHP 7のパフォーマンスを監視する方法は? Mar 10, 2025 pm 06:28 PM

この記事では、New Relicを使用してPHP 7アプリケーションのパフォーマンスを監視する方法について説明します。 New Relicのセットアップ、APDEXスコアや応答時間などのキーパフォーマンスインジケーター(KPI)、トランザクショントレースを介したボトルネックの識別、エラートラックの詳細

PHP 5.6からPHP 7にアップグレードする方法は? PHP 5.6からPHP 7にアップグレードする方法は? Mar 10, 2025 pm 06:29 PM

この記事では、PHP 5.6をPHP 7にアップグレードし、バックアップ、サーバーの互換性のチェック、アップグレードメソッドの選択などの重要な手順(パッケージマネージャー、コンパイル、コントロールパネル、またはWebサーバーの構成)を強調しています。 ポテンティアに対処します

PHP 7でクラスを自動装備する方法は? PHP 7でクラスを自動装備する方法は? Mar 10, 2025 pm 06:20 PM

この記事では、SPL_AUTOLOAD_REGISTER()を使用してクラスをオンデマンドでロードするPHP 7のオートローディングについて説明します。 それは、名前空間ベースのオートローディングやパフォーマンスの最適化のためのキャッシュなどのベストプラクティスを詳述し、一般的な問題に対処します(例:クラスは見つかりません

PHP 7プロジェクトでバージョンコントロールにGitを使用する方法は? PHP 7プロジェクトでバージョンコントロールにGitを使用する方法は? Mar 10, 2025 pm 06:27 PM

この記事は、バージョンコントロールにGitを使用することについてPHP 7開発者をガイドします。 初期化、ステージング、コミット、ファイルの無視、リモートリポジトリ、分岐、マージ、競合解決、および重要なGITコマンドをカバーします。 効率のためのベストプラクティス

PHP 7アプリケーションをWebサーバーに展開する方法は? PHP 7アプリケーションをWebサーバーに展開する方法は? Mar 10, 2025 pm 06:28 PM

この記事では、PHP 7アプリケーションの展開、メソッド(FTP、SSH、展開ツール)、サーバー構成(APACHE/NGINX、PHP-FPM)、データベースのセットアップ、および重要なセキュリティに関する考慮事項をカバーする詳細を詳述しています。 Server Compatibなどの一般的な課題を強調しています

PHP 7コードのデバッグにXdebugを使用する方法は? PHP 7コードのデバッグにXdebugを使用する方法は? Mar 10, 2025 pm 06:26 PM

この記事では、PHP 7コードのデバッグにXdebugを使用する方法について説明します。 Xdebug構成(インストール、PHP.ini設定、IDEセットアップ)、ブレークポイント使用(条件、関数、リモート)、およびトラブルシューティング接続の問題をカバーします。 効果的なデビッジ

PHP 7のオブジェクト指向プログラミング(OOP)とは何ですか? PHP 7のオブジェクト指向プログラミング(OOP)とは何ですか? Mar 10, 2025 pm 02:53 PM

この記事では、PHP 7のオブジェクト指向プログラミング(OOP)について説明し、モジュール性、再利用可能性、保守性、およびコード組織の改善を強調しています。 クラス、オブジェクト、継承、多型を詳述し、それらの使用を示しています

See all articles