Trong namespace App\Pay, định nghĩa hai trait CardPay và CashPay cùng có phương thức pay(int $amt): string trả về 'card:<amt>' và 'cash:<amt>'. Lớp Checkout (cùng namespace) dùng cả hai trait: CardPay::pay insteadof CashPay; và CashPay::pay as payCash;. Lớp Checkout còn có static method kind(): string trả về static::class. Lớp VipCheckout extends Checkout. Ở global scope, dùng use App\Pay\Checkout; use App\Pay\VipCheckout; rồi đọc 3 dòng: phương thức (pay/payCash), vip (1/0), amt (số). Tạo instance phù hợp, gọi phương thức, in kết quả; sau đó in kind() của class đó trên dòng 2.
Dòng 1: pay hoặc payCash. Dòng 2: 1 (Vip) hoặc 0. Dòng 3: amt.
1 <= amt <= 1e6.
Dòng 1: kết quả pay. Dòng 2: tên class đầy đủ (có namespace).
Ví dụ:
Đầu vào:
pay
0
100
Đầu ra:
card:100
App\Pay\Checkout
Giải thích:
Đầu vào:
payCash
1
250
Đầu ra:
cash:250
App\Pay\VipCheckout
Giải thích:
Đang tải editor...