クラスの応用 / ch04 — 抽象クラス (abstract) / 演習 01

📝 ドリル 01 — abstract PaymentMethod を継承した Card

題材

EC サイトの決済処理。複数の支払い手段を共通の枠で扱うため、親で charge() の存在だけ強制し、具体の処理は子に書かせる。

本番では Stripe / PAY.JP の SDK を呼ぶが、ここでは練習のため文字列で返す。

やること

abstract class PaymentMethod を定義してください。

  • abstract public function charge(int $amount): string; を宣言する (中身は書かない)

PaymentMethod を継承した Card クラスを定義してください。

  • charge(int $amount): string を実装して "カードで {amount} 円を決済しました" を返す

Card をインスタンス化し、charge(1500) の結果を 1 行出力してください。

期待される出力

カードで 1500 円を決済しました

ヒント

  • abstract class PaymentMethod { abstract public function charge(int $amount): string; }
  • class Card extends PaymentMethod { ... }
  • echo $c->charge(1500) . "\n";
  • 文字列連結は "カードで {$amount} 円を決済しました" でも . ' '. でも OK

採点

php scripts/grade.php topics/class-advanced/ch04-abstract/drill/01-abstract-payment/

テストケース

期待される出力

カードで 1500 円を決済しました

📄 starter.php(雛形)

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

<?php

// TODO: abstract class PaymentMethod を定義し、abstract public function charge(int $amount): string; を宣言する

// TODO: PaymentMethod を継承した Card クラスを定義する
//   - public string $brand;
//   - public function charge(int $amount): string {
//         return "{$this->brand} で {$amount} 円を決済しました";
//     }

// TODO: brand = "VISA" の Card を作って charge(1500) の結果を出力する
✅ 解答例を見る(自分で解いてから)
<?php

abstract class PaymentMethod {
    abstract public function charge(int $amount): string;
}

class Card extends PaymentMethod {
    public function charge(int $amount): string {
        return "カードで {$amount} 円を決済しました";
    }
}

$c = new Card();
echo $c->charge(1500) . "\n";