クラスの応用 / 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";