Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [PHP] Mediator: trait conflict + LSB + namespace

    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.

    • Định dạng đầu vào:

      Dòng 1: pay hoặc payCash. Dòng 2: 1 (Vip) hoặc 0. Dòng 3: amt.

    • Ràng buộc đầu vào:

      1 <= amt <= 1e6.

    • Định dạng đầu ra:

      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:

    Checkout::pay → card:100; kind → App\Pay\Checkout.

    Đầu vào:

    payCash
    1
    250

    Đầu ra:

    cash:250
    App\Pay\VipCheckout

    Giải thích:

    VipCheckout::payCash → cash:250; LSB kind → App\Pay\VipCheckout.

    Đang tải editor...