狠狠撸

狠狠撸Share a Scribd company logo
PHP 8.0 の新記法を?
試してみよう!?
2021/05/29 PHP カンファレンス沖縄 2021?
@okashoi?
岡田 正平/おかしょい?
Twitter: @okashoi?
GitHub: @okashoi?
所属:株式会社ウィルゲート?
?
登壇:?
?
?
?
?
寄稿:?
岡田 正平/おかしょい?
Twitter: @okashoi?
GitHub: @okashoi?
所属:株式会社ウィルゲート?
?
登壇:?
?
?
?
?
寄稿:?
(バーチャルの姿)
2020/11/26?
PHP 8.0 で追加された新しい構文や関数の中から?
すぐに使えそうなものをピックアップ、勢いにまかせて紹介?
?
?
この発表のゴール?
● 聴いた人が PHP 8.0 を使いたくなる?
● 聴いた人がこの発表で知った構文を実際に使う?
本発表の趣旨?
本発表は『WEB+DB PRESS vol. 120』に寄稿した?
「5 年ぶりの新版!PHP 8 登場」の内容をベースに?
5 分間にぎゅっと詰め込んだものです?
おことわり?
※また、日本語訳は ?
 私の独断によるものです ?
str_〇〇 関数?
str_contains() 関数?
<?php
var_dump(str_contains('Hello, PHP8!', 'PHP'));
var_dump(str_contains('Hello, PHP8!', 'PHP7'));
/* 実行結果
bool(true)
bool(false)
*/
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)
*/
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);
}
null 安全演算子?
null 安全演算子 ?->?
<?php
// $user が null の場合もエラーにならない
$user?->changeName('okashoi');
// PHP 7 系以前では例えばこうしていた
is_null($user) ?: $user->changeName('okashoi');
メソッドをチェインさせたいときに便利?
<?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();
}
match 式?
match 式?
<?php
$english = match (1) {
1 => 'one',
2 => 'two',
3 => 'three',
default => 'more than three',
};
var_dump($english);
/* 実行結果
string(3) "one"
*/
※ “match” は予約語に ?
1. 文(statement)ではなく式(expression)であること?
2. break を書き忘れる心配がない?
3. 厳密比較(===)が用いられる?
4. 何にもマッチしないと UnhandledMatchError を送出?
5. 右辺には単一の式しか指定できない(※)?
?
※ Future scope として「ブロック」を指定できるようにする旨の議論あり?
switch 文との違い?
名前付き引数?
名前付き引数?
<?php
function setFullName(string $givenName, string $familyName): void
{
// 省略
}
// familyNameを先に指定できる
setFullName(familyName: '岡田', givenName: '正平');
union 型?
union 型?
<?php
// 引数にint型の値もfloat型の値も渡せる
// 戻り値はint型またはfloat型のどちらか
function square(int|float $x): int|float
{
return $x * $x;
}
mixed 型?
mixed 型?
<?php
function foo(mixed $value): mixed
{
return $value;
}
array|bool|callable|int|float|null|object|resource|string と同じ
もっと知りたい方は公式ドキュメントをチェック!?
https://www.php.net/releases/8.0/?
?
?
?
WEB+DB PRESS の記事(バックナンバー)もヨロシク ?
まだまだたくさん新機能!?
PHP 8.0 で追加された新しい構文や関数の中から?
すぐに使えそうなものをピックアップ、勢いにまかせて紹介?
?
?
この発表のゴール?
● 聴いた人が PHP 8.0 を使いたくなる?
● 聴いた人がこの発表で知った構文を実際に使う?
本発表の趣旨(再掲)?

More Related Content

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