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

PHPv8.4で追加されたこと+アルファ.pdf

 PHPv8.4で追加されたこと+アルファ.pdf

Avatar for 福島勇人

福島勇人

March 27, 2026

Other Decks in Technology

Transcript

  1. PHP 8.3 & 8.4 最近の PHP はこんなに変わった WEB Creative Department

    後半は PHP 情報の追いかけ方も紹介します 1
  2. なぜ今 PHP の話? Laravel 13(2025年3月)が PHP 8.3 以上を必須化 ben54jp も将来的にバージョンアップ予定

    バージョン リリース 取り上げる機能 PHP 8.3 2023年11月 json_validate / 型付き定数 PHP 8.4 2024年11月 Property Hooks / 非対称 Visibility PHP 8.5 2025年11月 パイプ演算子 PHP 8.6 2026年11月予定 部分適用(予告) 2
  3. json_validate() PHP 8.3 JSON チェック専用関数。デコードせず検証だけ行う。 php.net // Before — デコードして確認(メモリを無駄に使う)

    function isValidJson(string $json): bool { json_decode($json); return json_last_error() === JSON_ERROR_NONE; } // After PHP 8.3 json_validate('{"name": "はやと"}'); // true json_validate('{invalid}'); // false 参考(3v4l.org) 4
  4. 型付き定数 PHP 8.3 定数に型を指定できる。違う型で再定義するとエラー。 php.net // Before — 別の型に再定義してもエラーにならない interface

    HasVersion { const VERSION = '1.0'; } class Foo implements HasVersion { const VERSION = []; // 配列で再定義!エラーなし } var_dump(Foo::VERSION); // array(0) {}(意図しない値) // After PHP 8.3 — 型を明示 interface HasVersion { const string VERSION = '1.0'; } class Bar implements HasVersion { // const string VERSION = []; // Fatal error! const string VERSION = '2.0'; } var_dump(Bar::VERSION); // string(3) "2.0" 参考(3v4l.org) 5
  5. Property Hooks PHP 8.4 getter/setter メソッドをプロパティに直接書けるようになった。 php.net // Before —

    書き込み時に変換したいだけなのに getter/setter が必要 class Locale { private string $countryCode; public function getCountryCode(): string { return $this->countryCode; } public function setCountryCode(string $v): void { $this->countryCode = strtoupper($v); // 大文字変換 } } $locale = new Locale(); $locale->setCountryCode('br'); echo $locale->getCountryCode(); // BR 6
  6. Property Hooks PHP 8.4(続き) PHP 8.4 では setter をプロパティ定義に直接書ける。 //

    After PHP 8.4 — プロパティに直接書ける class Locale { public string $countryCode { set(string $v) { $this->countryCode = strtoupper($v); // 大文字変換 } } } $locale = new Locale(); $locale->countryCode = 'br'; echo $locale->countryCode; // BR 7
  7. 非対称アクセス修飾子 PHP 8.4 「外から読めるけど、書き換えはクラス内だけ」を1行で表現。 php.net // Before — 外から読みたいだけなのに getter

    が必要 class PhpVersion { private string $version = '8.3'; public function getVersion(): string { return $this->version; } } 8
  8. 非対称アクセス修飾子 PHP 8.4(続き) public private(set) で「読み取りは public、代入は private」のみ。 // After

    PHP 8.4 class PhpVersion { public private(set) string $version = '8.4'; } echo $v->version; // 外から読める $v->version = '9.0'; // Error! 9
  9. パイプ演算子 |> PHP 8.5 データ変換、どう書いてる? php.net $input = ' Hello

    World '; // Before ① — ネストで書くと右から左に読む必要がある $result = implode('-', array_map( 'strtolower', explode(' ', trim($input)) )); // → 'hello-world' // Before ② — 変数を使うと今度は中間変数だらけ $trimmed = trim($input); // → 'Hello World' $words = explode(' ', $trimmed); // → ['Hello', 'World'] $lowered = array_map('strtolower', $words); // → ['hello', 'world'] $result = implode('-', $lowered); // → 'hello-world' 10
  10. パイプ演算子 |> PHP 8.5(続き) 上から下に、素直に読める。 // After PHP 8.5 $result

    = ' Hello World ' |> trim(...) // ' Hello World ' → 'Hello World' |> (fn($s) => explode(' ', $s)) // 'Hello World' → ['Hello', 'World'] |> (fn($a) => array_map(strtolower(...), $a)) // ['Hello', 'World'] → ['hello', 'world'] |> (fn($a) => implode('-', $a)); // ['hello', 'world'] → 'hello-world' // ... = 関数への参照(第一級 callable) // $a = パイプ |> から渡ってきた値 11
  11. パイプ演算子 |> — 注意点 PHP 8.5 アロー関数は 括弧で囲わないと Fatal error(公式より)

    // 括弧なし → Fatal error! $result = $input |> fn($a) => strtolower($a); // 括弧あり → OK $result = $input |> (fn($a) => strtolower($a)); 値は次の関数の 第1引数 に渡される // implode はそのままでは TypeError $arr |> implode('-', ...) // クロージャで包む $arr |> (fn($a) => implode('-', $a)) 参考(3v4l.org) 12
  12. 部分適用(予告) PHP 8.6 / 2026年11月予定 ? をプレースホルダにして、クロージャなしで書ける。 // 現状(PHP 8.5)—

    クロージャが必要でもったり $result = $input |> (fn($x) => str_replace(' ', '-', $x)) |> strtolower(...); // PHP 8.6 — ? でスッキリ! $result = $input |> str_replace(' ', '-', ?) |> strtolower(...); パイプ演算子と部分適用は 2016年に同じ提案から生まれた双子 → パイプ(8.5)+ 部分適用(8.6)でついに完成形に 13
  13. 今まではこうやってキャッチアップしていた php.net — 公式リリースノート(英語・重い) stitcher.io / php.watch — 英語の解説記事 Qiita

    / Zenn — 日本語記事が出るまでタイムラグあり X のタイムライン — 流れてきたら読む(見逃しも多い) → 結局「気が向いたとき」にしか追えていなかった 15
  14. Claude Code スキルで自動収集 ~/.claude/commands/ に .md ファイルを置くだけ 「今日のトレンド」と話しかけると自動で実行 # Daily

    Trend — 2026-03-25 ## ★★★ 高(今すぐ読む) - [PHP 8.6 PFA がマージ](URL) `[Hacker News]` > 部分適用が PHP 8.6 に正式採用。パイプとの組み合わせで... ## ★★☆ 中(時間があれば) - [Laravel 13.x リリース](URL) `[Zenn]` > PHP 8.3 必須化、Attributes 対応など... 16
  15. 実際の SKILL.md --- name: neta_trend_daily description: 毎朝のトレンド収集。Hacker News・はてブ・Zenn・Reddit からトレンドを取得し、興味度スコアを付与して保存する。 allowed-tools:

    Bash, Write --- ## Step 1: データ取得(curl のみ) Hacker News Top 20 / はてブ IT / Zenn / Reddit r/programming ## Step 2: スコアリング claude.md の Interests に照らして ★★★ / ★★☆ / ★☆☆ を付与 ## Step 3: Ideas/daily/YYYY-MM-DD.md に保存 17
  16. PHP 特化スキルにするなら IT 全般 → PHP に特化したスキルも作れる --- name: php_trend

    description: PHP の新情報を収集。php.watch・stitcher.io・ Zenn の PHP タグを取得してまとめる。 --- 取得先を変えるだけで: php.watch の RFC ステータス変更を検知 stitcher.io の新着記事を要約 Zenn の PHP タグ のトレンドを収集 18
  17. まとめ バージョン 機能 8.3 json_validate() / 型付き定数 8.4 Property Hooks

    / 非対称 Visibility 8.5 パイプ演算子 ` 8.6予定 部分適用 PHP は死んでいない。むしろ本気を出してきた Claude Code スキルで PHP の動向を毎朝自動把握できる 19