クラスの応用 / ch01 — 継承 (extends) / 演習 01

📝 ドリル 01 — User を継承した AdminUser

やること

User クラスを定義してください。

  • プロパティ email (string)
  • メソッド login()"{email} がログインしました" を 1 行出力する

次に User を継承した AdminUser クラスを定義してください。

  • メソッド deleteAll()"{email} が全データを削除しました" を 1 行出力する

最後に AdminUser のインスタンスを作って email"admin@example.com" を入れ、login()deleteAll() を順に呼んでください。

期待される出力

admin@example.com がログインしました
admin@example.com が全データを削除しました

補足: 実務ではパスワード照合・セッション発行・権限チェックが入りますが、ここでは「継承で機能を引き継ぐ」一点だけにフォーカスします。

ヒント

  • class AdminUser extends User { ... }
  • $a = new AdminUser();
  • $a->email = "admin@example.com";
  • 親の login()AdminUser に書かなくても呼べる

採点

php scripts/grade.php topics/class-advanced/ch01-inheritance/drill/01-extend/

テストケース

期待される出力

admin@example.com がログインしました
admin@example.com が全データを削除しました

📄 starter.php(雛形)

このコードから書き始めてください。

<?php

// TODO: User クラスを定義する
//   - public string $email;
//   - public function login() { echo "{$this->email} がログインしました\n"; }

// TODO: User を継承した AdminUser クラスを定義する
//   - public function deleteAll() { echo "{$this->email} が全データを削除しました\n"; }

// TODO: AdminUser のインスタンスを作って email = "admin@example.com" にし、login() と deleteAll() を呼ぶ
✅ 解答例を見る(自分で解いてから)
<?php

class User {
    public string $email;

    public function login(): void {
        echo "{$this->email} がログインしました\n";
    }
}

class AdminUser extends User {
    public function deleteAll(): void {
        echo "{$this->email} が全データを削除しました\n";
    }
}

$a = new AdminUser();
$a->email = "admin@example.com";
$a->login();
$a->deleteAll();