第10章 オブジェクト指向構文 / 第2回 模擬試験

PHPのトレイト(Trait)に関する次の記述のうち、正しいものはどれか。

トレイトは`use`キーワードでクラス内に取り込むことができる。 正解
トレイトはインスタンス化して直接使用することができる。
トレイトは複数のクラスから同時に継承する手段として使われ、継承と同じ制約を持つ。
1つのクラスに複数のトレイトを取り込むことはできない。
解説
トレイトは、クラス定義の内部で`use TraitName;`と書くことで、そのトレイトが持つメソッドやプロパティをクラスに取り込める、コード再利用のための仕組みです。 他の選択肢が誤りである理由は次の通りです。 ・トレイトは単体でインスタンス化することはできません。必ずいずれかのクラスに取り込んで、そのクラス経由で使います。 ・トレイトは「継承」とは異なる仕組みです。PHPのクラス継承は単一継承のみですが、トレイトは1つのクラスに複数取り込むことができ、継承関係のような制約を持ちません。 ・1つのクラスに`use TraitA, TraitB;`のように、カンマ区切りで複数のトレイトを同時に取り込むことができます。 例: ``` trait Loggable { public function log(string $msg): void { echo "[LOG] {$msg}"; } } trait Cacheable { public function cacheKey(): string { return static::class; } } class Service { use Loggable, Cacheable; } ``` (参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.5節 トレイト p.523〜531)

あわせて読みたい解説記事