Slide 1

Slide 1 text

世界最速? で PHP 8 Native Framework 作った ~ PHP 8 の勘所を押さえていく~ 2020/11/06 やまゆ Infinite loop

Slide 2

Slide 2 text

やまゆ a.k.a ILの赤魔道士 - ㈱インフィニットループの赤魔道士 - #babylonjs #nuxtjs #laravel #カピバラさん #佐久間まゆ #一ノ瀬志希 #ヒプマイ名古屋 #FF14 - 最近の流行はヒプノシスマイク(アニメやってるよ! - 今年はライブ行けなくて死んでいた - larasap 常連

Slide 3

Slide 3 text

PHP 8 ? 2020/11/26 リリース予定の最新版

Slide 4

Slide 4 text

PHP 8 ? Docker を使えばビルド不要でお手軽体験が可能!

Slide 5

Slide 5 text

PHP 8 + Laravel ? Dusk/Nexmo/Passport/Scout 以外の ファーストパーティリポジトリは 既に PHP 8 に対応済み! https://twitter.com/driesvints/status/1323716163617083397

Slide 6

Slide 6 text

“ Bleeding Framework

Slide 7

Slide 7 text

Bleeding - PHP 8 Native Framework? https://github.com/il-m-yamagishi/bleeding/ - PHP 8 Ready! - Thin framework - No nikic/fast-route - No route parameters, such as `/users/:userId` - GET & POST HTTP method only(RESTful is too complex) - Functional controller(No Instance or state needed) - Controller attributes(Method, Path, Middlewares) - Functional command with attributes - Accepts `application/json` first, `multipart/form-data` second - returns only `application/json`

Slide 8

Slide 8 text

Bleeding - PHP 8 Native Framework? - PHP Standard Recommendation(PSR) first - PSR-3 Log ready, powered by monolog - PSR-4 Autoload ready, powered by composer v2 - PSR-7, PSR-17 HTTP ready, powered by laminas-diactoros - PSR-11 DI ready, powered by PHP-DI 7(beta) - PSR-12 ready, powered by PHP CodeSniffer - PSR-15 RequestHandler, Middleware ready, powered by Relay

Slide 9

Slide 9 text

Bleeding - PHP 8 Native Framework?

Slide 10

Slide 10 text

Bleeding - PHP 8 Native Framework?

Slide 11

Slide 11 text

Attributes `#[Attribute]` - メタプログラミング用の属性付与 - `@annotation` のような doctrine/annotation を代替する - 既存のアノテーションはただの文字列なのでパースが遅い - テスト・静的解析・ドキュメントなど様々に利用可能 - Bleeding ではルーティング、ミドルウェア、コマンド定義に使用

Slide 12

Slide 12 text

match 文 switch 文によるミスを減らせる便利構文

Slide 13

Slide 13 text

match 文

Slide 14

Slide 14 text

コンストラクタプロパティ昇格(constructor promotion)

Slide 15

Slide 15 text

Union Types 型宣言時、複数の型を宣言出来るようになった (ついでに、 `mixed` と宣言出来るようにもなった)

Slide 16

Slide 16 text

JIT opcache 内に実装されている デフォルトで良い感じのパラメータが ini で指定されている 正直フレームワーク実装レベルだと差異がない

Slide 17

Slide 17 text

RFC https://wiki.php.net/rfc 新機能は基本的に RFC を経由して導入 RFC を見ておけば、次のバージョンでどんなものが実装されそうか分かる

Slide 18

Slide 18 text

https://github.com/il-m-yamagishi/bleeding/ PHP 8 はいいぞ。