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. 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 と同じ