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

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

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

PHP カンファレンス沖縄 2021

Avatar for Shohei Okada

Shohei Okada

May 29, 2021
Tweet

More Decks by Shohei Okada

Other Decks in Programming

Transcript

  1. str_starts_with(), str_ends_with() 関数
 <?php 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) */
  2. PHP 7 系以前では......
 <?php // 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); }
  3. null 安全演算子 ?->
 <?php // $user が null の場合もエラーにならない $user?->changeName('okashoi');

    // PHP 7 系以前では例えばこうしていた is_null($user) ?: $user->changeName('okashoi');
  4. メソッドをチェインさせたいときに便利
 <?php 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(); } <?php function example2(?Foo $foo): ?FooBar { return $foo?->bar() ?->buz() ?->foobar(); }
  5. match 式
 <?php $english = match (1) { 1 =>

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

  6. 1. 文(statement)ではなく式(expression)であること
 2. break を書き忘れる心配がない
 3. 厳密比較(===)が用いられる
 4. 何にもマッチしないと UnhandledMatchError

    を送出
 5. 右辺には単一の式しか指定できない(※)
 
 ※ Future scope として「ブロック」を指定できるようにする旨の議論あり
 switch 文との違い

  7. 名前付き引数
 <?php function setFullName(string $givenName, string $familyName): void { //

    省略 } // familyNameを先に指定できる setFullName(familyName: '岡田', givenName: '正平');
  8. mixed 型
 <?php function foo(mixed $value): mixed { return $value;

    } array|bool|callable|int|float|null|object|resource|string と同じ