Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHP 8.0 の新記法を試してみよう!
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Shohei Okada
May 29, 2021
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHP 8.0 の新記法を試してみよう!
PHP カンファレンス沖縄 2021
Shohei Okada
May 29, 2021
More Decks by Shohei Okada
See All by Shohei Okada
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
320
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
960
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
2.3k
パスワードのハッシュ、ソルトってなに? - What is hash and salt for password?
okashoi
3
400
設計の考え方 - インターフェースと腐敗防止層編 #phpconfuk / Interface and Anti Corruption Layer
okashoi
11
6.2k
"config" ってなんだ? / What is "config"?
okashoi
0
1.9k
ファイル先頭の use の意味、説明できますか? 〜PHP の namespace と autoloading の関係を正しく理解しよう〜 / namespace and autoloading in php
okashoi
4
2.2k
MySQL のインデックスの種類をおさらいしよう! / overviewing indexes in MySQL
okashoi
0
1.4k
PHP における静的解析(あるいはそもそも静的解析とは) / #phpcondo_yasai static analysis for PHP
okashoi
1
1.5k
Other Decks in Programming
See All in Programming
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
1
540
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
190
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
600
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
640
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
370
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Webフレームワークの ベンチマークについて
yusukebe
0
180
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
600
Inside Stream API
skrb
1
800
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
180
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
230
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
280
Featured
See All Featured
Side Projects
sachag
455
43k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
180
A better future with KSS
kneath
240
18k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
580
My Coaching Mixtape
mlcsv
0
160
Design in an AI World
tapps
1
250
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
250
Chasing Engaging Ingredients in Design
codingconduct
0
230
Transcript
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 を使いたくなる • 聴いた人がこの発表で知った構文を実際に使う 本発表の趣旨(再掲)