Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP 8.0 の新記法を試してみよう!

PHP 8.0 の新記法を試してみよう!

PHP カンファレンス沖縄 2021

Shohei Okada

May 29, 2021
Tweet

More Decks by Shohei Okada

Other Decks in Programming

Transcript

  1. PHP 8.0 の新記法を

    試してみよう!

    2021/05/29 PHP カンファレンス沖縄 2021

    @okashoi


    View Slide

  2. 岡田 正平/おかしょい

    Twitter: @okashoi

    GitHub: @okashoi

    所属:株式会社ウィルゲート


    登壇:





    寄稿:


    View Slide

  3. 岡田 正平/おかしょい

    Twitter: @okashoi

    GitHub: @okashoi

    所属:株式会社ウィルゲート


    登壇:





    寄稿:

    (バーチャルの姿)

    View Slide

  4. 2020/11/26


    View Slide

  5. PHP 8.0 で追加された新しい構文や関数の中から

    すぐに使えそうなものをピックアップ、勢いにまかせて紹介



    この発表のゴール

    ● 聴いた人が PHP 8.0 を使いたくなる

    ● 聴いた人がこの発表で知った構文を実際に使う

    本発表の趣旨


    View Slide

  6. 本発表は『WEB+DB PRESS vol. 120』に寄稿した

    「5 年ぶりの新版!PHP 8 登場」の内容をベースに

    5 分間にぎゅっと詰め込んだものです

    おことわり

    ※また、日本語訳は 

     私の独断によるものです 


    View Slide

  7. str_〇〇 関数


    View Slide

  8. str_contains() 関数

    var_dump(str_contains('Hello, PHP8!', 'PHP'));
    var_dump(str_contains('Hello, PHP8!', 'PHP7'));
    /* 実行結果
    bool(true)
    bool(false)
    */

    View Slide

  9. str_starts_with(), str_ends_with() 関数

    var_dump(str_starts_with('Hello, PHP8!', 'Hello'));
    var_dump(str_starts_with('Hello, PHP8!', 'PHP8!'));
    var_dump(str_ends_with('Hello, PHP8!', 'Hello'));
    var_dump(str_ends_with('Hello, PHP8!', 'PHP8!'));
    /* 実行結果
    bool(true)
    bool(false)
    bool(false)
    bool(true)
    */

    View Slide

  10. PHP 7 系以前では......

    // str_contains()相当
    function my_str_contains(string $a, string $b): bool
    {
    return strpos($a, $b) !== false;
    }
    // str_starts_with()相当
    function my_str_starts_with(string $a, string $b): bool
    {
    return strpos($a, $b) === 0;
    }
    // str_ends_with()相当
    function my_str_ends_with(string $a, string $b): bool
    {
    return strrpos($a, $b) === strlen($a) - strlen($b);
    }

    View Slide

  11. null 安全演算子


    View Slide

  12. null 安全演算子 ?->

    // $user が null の場合もエラーにならない
    $user?->changeName('okashoi');
    // PHP 7 系以前では例えばこうしていた
    is_null($user) ?: $user->changeName('okashoi');

    View Slide

  13. メソッドをチェインさせたいときに便利

    function example1(?Foo $foo): ?FooBar
    {
    if(is_null($foo)) {
    return null;
    }
    $bar = $foo->bar();
    if(is_null($bar)) {
    return null;
    }
    $buz = $bar->buz();
    if(is_null($buz)) {
    return null;
    }
    return $buz->foobar();
    }
    function example2(?Foo $foo): ?FooBar
    {
    return $foo?->bar()
    ?->buz()
    ?->foobar();
    }

    View Slide

  14. match 式


    View Slide

  15. match 式

    $english = match (1) {
    1 => 'one',
    2 => 'two',
    3 => 'three',
    default => 'more than three',
    };
    var_dump($english);
    /* 実行結果
    string(3) "one"
    */
    ※ “match” は予約語に 


    View Slide

  16. 1. 文(statement)ではなく式(expression)であること

    2. break を書き忘れる心配がない

    3. 厳密比較(===)が用いられる

    4. 何にもマッチしないと UnhandledMatchError を送出

    5. 右辺には単一の式しか指定できない(※)


    ※ Future scope として「ブロック」を指定できるようにする旨の議論あり

    switch 文との違い


    View Slide

  17. 名前付き引数


    View Slide

  18. 名前付き引数

    function setFullName(string $givenName, string $familyName): void
    {
    // 省略
    }
    // familyNameを先に指定できる
    setFullName(familyName: '岡田', givenName: '正平');

    View Slide

  19. union 型


    View Slide

  20. union 型

    // 引数にint型の値もfloat型の値も渡せる
    // 戻り値はint型またはfloat型のどちらか
    function square(int|float $x): int|float
    {
    return $x * $x;
    }

    View Slide

  21. mixed 型


    View Slide

  22. mixed 型

    function foo(mixed $value): mixed
    {
    return $value;
    }
    array|bool|callable|int|float|null|object|resource|string と同じ

    View Slide

  23. もっと知りたい方は公式ドキュメントをチェック!

    https://www.php.net/releases/8.0/




    WEB+DB PRESS の記事(バックナンバー)もヨロシク 

    まだまだたくさん新機能!


    View Slide

  24. PHP 8.0 で追加された新しい構文や関数の中から

    すぐに使えそうなものをピックアップ、勢いにまかせて紹介



    この発表のゴール

    ● 聴いた人が PHP 8.0 を使いたくなる

    ● 聴いた人がこの発表で知った構文を実際に使う

    本発表の趣旨(再掲)


    View Slide