Share
Embed
Transcript
16 slides
-
$whoami 氏名: 加藤 宗一郎 (32歳) ハンドルネーム: SAW X (旧 Twitter):
@azuki_eater 関西の IT エンジニア コミュニティの賑やかし 大阪在住・愛知出身 得意分野: Web アプリケーション開発 Laravel, Vue 所属: 有限会社アリウープ 本日の迷言のコーナーはお休みです。 2 / 16 -
Property Hooks とは オブジェクトのプロパティの読み書きの挙動を変更できる機能 Laravel Eloquent の Acceessors/Mutators のような機能 プロパティから自動的に計算した値を取得したい時に便利
例: 身長と体重から BMI を自動計算 PHP 8.4 で追加 class Person { public function __construct( public float $height, public float $weight, ) { } public float $bmi { get => $this->weight / pow($this->height / 100, 2); } } $person = new Person(170.5, 60.3); echo sprintf("%.2f", $person->bmi) . PHP_EOL; # 出力: 20.74 5 / 16 -
Property Hooks の文法 (getter) 基本文法: <アクセス修飾子> <型名> <プロパティ名> { get
{ 文 } } 短縮構文: <アクセス修飾子> <型名> <プロパティ名> { get => 式 ; } プロパティ名の後ろがブロック ( {} ) で終わる 通常のプロパティはセミコロン ( ; ) で終わる ブロック内に get ブロック ( get {} ) を入れる ブロック内には任意の文を入れられる 式を返すだけの場合は短縮構文が利用可能 アロー関数のような記法 アクセス時は通常のプロパティと同様に記述する $example->fullName のように記述 class Example { public function __construct( public string $firstName, public string $lastName, ) { } public string $fullName { get { $firstName = ucfirst($this->firstName); $lastName = ucfirst($this->lastName); return $firstName . ' ' . $lastName; } } } 6 / 16 -
Property Hooks の文法 (setter) 基本文法: <アクセス修飾子> <型名> <プロパティ名> { set
(型名 変数名) { 文 } } 短縮構文: <アクセス修飾子> <型名> <プロパティ名> { set => 式 ; } setter も getter と同様に記述 ブロック内に set ブロック ( set {} ) を入れる 通常のプロパティと同様に代入 $example->sound = 'bzz' のように記述 式を代入するだけの場合は短縮構文が利用可能 アロー関数のような記法 (getter と同様) 元の値は $value に暗黙的に格納されている class Example { public function __construct( ) { } public string $sound { set(string $value) { if ($value === 'tick-tock') { echo "Smee!" . PHP_EOL; } $this->sound = $value; } } } 7 / 16 -
前提知識: constructor property promotion コンストラクタの引数をプロパティに自動的に代入する機能 引数をプロパティに代入する以外の処理がない場合にコードを簡潔に記述できる コンストラクタの引数にアクセス修飾子を追加 コンストラクタの本体は空でも良い 本体に文が記述される場合はプロパティへの代入後に処理される PHP
8.0 で追加 class Coordinates { public function __construct( public float $x, public float $y, public float $z, ) { } } $p = new Coordinates(8.5, 13.0, -20.26); echo 'x: ' . $p->x . PHP_EOL; # x: 8.5 echo 'y: ' . $p->y . PHP_EOL; # y: 13 echo 'z: ' . $p->z . PHP_EOL; # z: -20.26 9 / 16 -
コンストラクタで property hooks の機能を利用 コンストラクタの引数に property hooks が定義可能 対応する引数が property
hooks の setter に渡される class Example { public function __construct( public private(set) string $firstName { set => ucfirst($value); }, public private(set) string $lastName { set => ucfirst($value); }, ) { } } $ex = new Example('charlie', 'brown'); echo $ex->firstName . PHP_EOL; # 出力例: Charlie echo $ex->lastName . PHP_EOL; # 出力例: Brown 10 / 16 -
Q. 以下のプログラム例を実行した時の値の対応関係で正しいものはどれでしょう? $qs1 $qs2 ❌ 1 page=1 page=1 ⭕️ 2
page=1 page=5 ❌ 3 page=5 page=1 ❌ 4 page=5 page=5 use Uri\WhatWg\Url; class Example { private static string $origin = 'https://example.com'; public function __construct( public int $page, ) { } public Url $url { get => new Url(self::$origin."?page={$this->page}"); } } $example = new Example(1); $url1 = $example->url; $example->page = 5; $url2 = $example->url; $qs1 = $url1->getQuery(); $qs2 = $url2->getQuery(); 12 / 16 -
クイズの解説 virtual property になっていて値を保持しない virtual property: getter, setter のどちらの hooks
でも自身のプロパティを参照しない 値が保持されず getter を参照するたびにインスタンスが new された $qs1 と $qs2 で別々のインスタンスが生成されていた virtual property は値の保持が不要な場合に有用 他の property から自動計算できる値 例: BMI (体重と身長) 13 / 16 -
まとめ property hooks の機能について説明 基本的な構文 (getter, setter) constructor property promotion
を応用した使い方の紹介 virtual property の特徴を説明 クイズ形式で挙動を解説 14 / 16 -
宣伝 Laravel Live Japan 2026 開催予定 日付: 2026/5/26 (火), 2026/5/27
(水) 場所: 立川ステージガーデン 一般参加チケット・懇親会チケット発売中 当日スタッフ募集中