《PHP8上級試験対策》インターフェイスにプロパティを書けない理由とエラーメッセージ解説

  • URLをコピーしました!

はじめに

PHP8 上級試験では「インターフェイスに定義できるもの/できないもの」を問われる問題がよく出題されます。特に「プロパティをインターフェイスに書けるか?」という誤答パターンに注意が必要です。本記事では、誤答例と実際のエラー挙動、そして正しい書き方を整理します。

キーワード: インターフェイス / プロパティ / 定数 / エラーメッセージ

目次

誤答例(よくある間違い)

<?php
declare(strict_types=1);
error_reporting(-1);

interface HogeInterface {
    private int $num;  // ❌ インターフェイスにプロパティはNG
    public function setNum(int $i);
}

このコードを実行すると、問題集の解説のように「オブジェクトの中に num が表示される」と思いがちですが、実際には Fatal error で実行が止まります

Fatal error: Interfaces may not include properties in ...

正しい定義方法

インターフェイスには 定数とメソッドのシグネチャ(必ず public) しか定義できません。
プロパティを持たせたい場合は、実装するクラス側 で宣言します。

<?php
declare(strict_types=1);
error_reporting(-1);

interface HogeInterface {
    public function setNum(int $i);
}

class Hoge implements HogeInterface {
    private int $num;

    public function setNum(int $i) {
        $this->num = $i;
    }
}

$obj = new Hoge();
$obj->setNum(123);
var_dump($obj);

出力結果:

object(Hoge)#1 (1) {
  ["num":"Hoge":private]=>
  int(123)
}

試験対策まとめ

インターフェイスに書けるもの

  • 定数
  • publicメソッドのシグネチャ

インターフェイスに書けないもの

  • プロパティ
  • protected / private メソッド

エラーメッセージを覚えておくと即答できる:

Fatal error: Interfaces may not include properties

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次