no message
This commit is contained in:
11
Question14-AdvancedInheritance/Ex01.php
Normal file
11
Question14-AdvancedInheritance/Ex01.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
/* TODO:
|
||||
* common.Characterクラスを継承した、Slimeクラスを作成してください
|
||||
* ●HP, POWER, ENDURANCEはそれぞれ、(10, 5, 2)
|
||||
*
|
||||
* 設定する名前は"スライム"
|
||||
* 逃げる確率は5%
|
||||
*
|
||||
* 攻撃方法は通常攻撃のみ、powerの値をそのまま計算に当ててください
|
||||
* ダメージ計算は、【相手の耐久 - 力 = ダメージ量】です
|
||||
*/
|
||||
12
Question14-AdvancedInheritance/Ex02.php
Normal file
12
Question14-AdvancedInheritance/Ex02.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
/* TODO:
|
||||
* common.Characterクラスを継承した、Drakeeクラスを作成してください
|
||||
* ●HP, POWER, ENDURANCEはそれぞれ、(15, 7, 4)
|
||||
*
|
||||
* 設定する名前は"ドラキー"
|
||||
* 逃げる確率は10%
|
||||
*
|
||||
* 攻撃方法は通常攻撃、魔法攻撃の2種類
|
||||
* 通常攻撃(70%) :【相手の耐久 - 力 = ダメージ量】です
|
||||
* 魔法攻撃(30%) :【力の0.7~1.0倍 = ダメージ量】です
|
||||
*/
|
||||
16
Question14-AdvancedInheritance/Ex03.php
Normal file
16
Question14-AdvancedInheritance/Ex03.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
/*
|
||||
* Slimeクラス、Drakeeクラスを使用します
|
||||
*/
|
||||
|
||||
// TODO: Slimeクラス、Drakeeクラスのインスタンスを生成してください
|
||||
|
||||
/* TODO:
|
||||
* SlimeとDorakeeを、どちらかが体力0になるまで戦わせます。
|
||||
* 先に逃げた方、または体力が0になった方の負けになります
|
||||
*
|
||||
* ●Slimeの攻撃 -> ダメージ判定 -> Dorakeeの攻撃 -> ダメージ判定
|
||||
* 上記を繰り返し行います
|
||||
*/
|
||||
|
||||
// 勝利した方の出力を行ってください。「○○は■■との戦闘に勝利した」
|
||||
35
Question14-AdvancedInheritance/Ex04.php
Normal file
35
Question14-AdvancedInheritance/Ex04.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/*
|
||||
* インタフェースの基本: 通知システム
|
||||
*
|
||||
* NotificationInterface.php、EmailNotification.php、SmsNotification.php を実装してください
|
||||
*
|
||||
* 【課題】
|
||||
* 通知を送信するシステムを作成します。
|
||||
* メール通知とSMS通知の2種類があり、どちらも同じインタフェースを実装します。
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/common/NotificationInterface.php';
|
||||
require_once __DIR__ . '/common/EmailNotification.php';
|
||||
require_once __DIR__ . '/common/SmsNotification.php';
|
||||
|
||||
use Common\EmailNotification;
|
||||
use Common\SmsNotification;
|
||||
|
||||
// TODO: EmailNotificationのインスタンスを生成してください
|
||||
// コンストラクタには "user@example.com" を渡してください
|
||||
// 変数名は $email
|
||||
|
||||
// TODO: $email の send メソッドを呼び出してください
|
||||
// 第1引数: "システムアラート"
|
||||
// 第2引数: "サーバーの負荷が高まっています。"
|
||||
|
||||
echo "<br>";
|
||||
|
||||
// TODO: SmsNotificationのインスタンスを生成してください
|
||||
// コンストラクタには "090-1234-5678" を渡してください
|
||||
// 変数名は $sms
|
||||
|
||||
// TODO: $sms の send メソッドを呼び出してください
|
||||
// 第1引数: "緊急連絡"
|
||||
// 第2引数: "サーバーダウンが発生しました。"
|
||||
53
Question14-AdvancedInheritance/Ex05.php
Normal file
53
Question14-AdvancedInheritance/Ex05.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
/*
|
||||
* 多態性とインタフェース: メッセージ送信システム
|
||||
*
|
||||
* MessageSenderInterface.php、LineMessage.php、SlackMessage.php、MessageService.php を実装してください
|
||||
*
|
||||
* 【課題】
|
||||
* メッセージ送信サービスを作成します。
|
||||
* LineとSlackの2種類のメッセージ送信方法があります。
|
||||
* MessageServiceクラスは、インタフェース型を引数で受け取ることで、
|
||||
* どちらのメッセージ送信方法でも使えるようにします(多態性)。
|
||||
*
|
||||
* 【ポイント】
|
||||
* MessageServiceの sendMessage メソッドは、
|
||||
* MessageSenderInterface型の引数を受け取ります。
|
||||
* これにより、LineMessage でも SlackMessage でも、
|
||||
* 同じメソッドで送信できます(インタフェースの利点)。
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/common/MessageSenderInterface.php';
|
||||
require_once __DIR__ . '/common/LineMessage.php';
|
||||
require_once __DIR__ . '/common/SlackMessage.php';
|
||||
require_once __DIR__ . '/common/MessageService.php';
|
||||
|
||||
use Common\LineMessage;
|
||||
use Common\SlackMessage;
|
||||
use Common\MessageService;
|
||||
|
||||
// TODO: MessageServiceのインスタンスを生成してください
|
||||
// 変数名は $service
|
||||
|
||||
echo "=== メッセージ送信テスト ===<br><br>";
|
||||
|
||||
// TODO: LineMessageのインスタンスを生成してください
|
||||
// コンストラクタには "山田太郎" を渡してください
|
||||
// 変数名は $lineMessage
|
||||
|
||||
// TODO: $service の sendMessage メソッドを呼び出してください
|
||||
// 第1引数: $lineMessage
|
||||
// 第2引数: "会議は10時からです"
|
||||
// ※ここがポイント!引数の型は MessageSenderInterface なので、
|
||||
// LineMessage でも SlackMessage でも渡せます
|
||||
|
||||
echo "<br>";
|
||||
|
||||
// TODO: SlackMessageのインスタンスを生成してください
|
||||
// コンストラクタには "#general" を渡してください
|
||||
// 変数名は $slackMessage
|
||||
|
||||
// TODO: $service の sendMessage メソッドを呼び出してください
|
||||
// 第1引数: $slackMessage
|
||||
// 第2引数: "デプロイが完了しました"
|
||||
// ※同じ sendMessage メソッドで、SlackMessage も送信できます!
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
require_once __DIR__ . '/PaymentInterface.php';
|
||||
|
||||
/**
|
||||
* 銀行振込決済を行うクラス
|
||||
*/
|
||||
class BankTransferPayment implements PaymentInterface
|
||||
{
|
||||
/** @var string 銀行名 */
|
||||
private $bankName;
|
||||
|
||||
/** @var string 口座番号 */
|
||||
private $accountNumber;
|
||||
|
||||
/** @var string 口座名義 */
|
||||
private $accountHolder;
|
||||
|
||||
/**
|
||||
* コンストラクタ
|
||||
*
|
||||
* @param string $bankName 銀行名
|
||||
* @param string $accountNumber 口座番号
|
||||
* @param string $accountHolder 口座名義
|
||||
*/
|
||||
public function __construct($bankName, $accountNumber, $accountHolder)
|
||||
{
|
||||
// TODO: 銀行名、口座番号、口座名義をプロパティに設定してください
|
||||
}
|
||||
|
||||
/**
|
||||
* 銀行振込で決済を実行する
|
||||
*
|
||||
* @param int $amount 決済金額(円)
|
||||
* @return bool 決済が成功したかどうか
|
||||
*/
|
||||
public function pay($amount)
|
||||
{
|
||||
// TODO: 以下の情報を表示して、最後に true を返してください
|
||||
// - "🏦 銀行振込処理"
|
||||
// - "振込先銀行: " に続けて銀行名
|
||||
// - "口座番号: " に続けて口座番号
|
||||
// - "口座名義: " に続けて口座名義
|
||||
// - "振込金額: ¥" に続けて金額をカンマ区切りで表示
|
||||
// - "振込手数料: ¥330"
|
||||
// - "合計金額: ¥" に続けて (金額 + 330) をカンマ区切りで表示
|
||||
// - "振込が完了しました。"
|
||||
// ※各行の最後に <br> を付けること
|
||||
}
|
||||
|
||||
/**
|
||||
* 決済方法の名前を取得する
|
||||
*
|
||||
* @return string 決済方法名
|
||||
*/
|
||||
public function getPaymentMethodName()
|
||||
{
|
||||
// TODO: "銀行振込" という文字列を返してください
|
||||
}
|
||||
}
|
||||
125
Question14-AdvancedInheritance/common/Character.php
Normal file
125
Question14-AdvancedInheritance/common/Character.php
Normal file
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
abstract class Character
|
||||
{
|
||||
/** 名前 */
|
||||
private $name = 'モンスター';
|
||||
|
||||
/** 体力 */
|
||||
private $hp;
|
||||
|
||||
/** 力 */
|
||||
private $power;
|
||||
|
||||
/** 防御力 */
|
||||
private $endurance;
|
||||
|
||||
/**
|
||||
* 体力、攻撃力、防御力の初期値を設定しつつ、Characterインスタンスを生成します
|
||||
* @param hp
|
||||
* @param attack
|
||||
* @param defence
|
||||
*/
|
||||
function __construct($hp, $power, $endurance)
|
||||
{
|
||||
$this->name = $this->getCharacterName();
|
||||
$this->hp = $hp;
|
||||
$this->power = $power;
|
||||
$this->endurance = $endurance;
|
||||
}
|
||||
/**
|
||||
* 名前を取得します
|
||||
* @return string 名前
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* 力を取得します
|
||||
* @return int 力の値
|
||||
*/
|
||||
public function getPower()
|
||||
{
|
||||
return $this->power;
|
||||
}
|
||||
|
||||
/**
|
||||
* 耐久を取得します
|
||||
* @return int 耐久の値
|
||||
*/
|
||||
public function getEndurance()
|
||||
{
|
||||
return $this->endurance;
|
||||
}
|
||||
/**
|
||||
* キャラクター情報を表示します
|
||||
* @return string
|
||||
*/
|
||||
public function showParameter()
|
||||
{
|
||||
$str = nl2br('名 前' . $this->name
|
||||
. "\r\n" . '体 力' . $this->hp
|
||||
. "\r\n" . ' 力 ' . $this->power
|
||||
. "\r\n" . '耐 久' . $this->endurance);
|
||||
return $str;
|
||||
}
|
||||
/**
|
||||
* 戦闘を行います。負の数が返ってきた場合、逃げるを選択したことになります
|
||||
* @param int $defence 攻撃を受ける側の耐久
|
||||
* @return int 最終的に計算されたダメージ量
|
||||
*/
|
||||
public function battle($defence)
|
||||
{
|
||||
$random = rand(0, 100);
|
||||
|
||||
$rate = $this->getEscapeRate();
|
||||
|
||||
// 設定された確率で逃げる
|
||||
if ($random < $rate) {
|
||||
return -1;
|
||||
} else {
|
||||
|
||||
// ダメージの算出(0ダメージにはならないようにする)
|
||||
$dam = $this->damage($defence);
|
||||
if ($dam <= 0) {
|
||||
$dam = 1;
|
||||
}
|
||||
return $dam;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 受けたダメージ分、HPを減らす。
|
||||
* HPが0以下になった場合は、倒されたと判断し、falseを返す
|
||||
* @param int $damage 受けるダメージ
|
||||
* @return bool true -> 生き残っている場合、false -> 倒された場合
|
||||
*/
|
||||
public function dealsDamage($damage)
|
||||
{
|
||||
$this->hp -= $damage;
|
||||
if ($this->hp <= 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* このモンスターの名前を取得します
|
||||
* @return string 設定する名前
|
||||
*/
|
||||
protected abstract function getCharacterName();
|
||||
|
||||
/**
|
||||
* このモンスターが逃げる確率を設定します。
|
||||
* 例えば、10%で逃げる場合は、10を設定します
|
||||
* @return int 逃げる確率
|
||||
*/
|
||||
protected abstract function getEscapeRate();
|
||||
|
||||
/**
|
||||
* モンスター毎に攻撃判定を行います。
|
||||
* 例えば、通常攻撃・スキル・魔法などモンスターごとに行動割合を決定し、最終的に計算されたダメージ量を判定します
|
||||
* @param int $defence 攻撃を受ける側の耐久
|
||||
* @return int 最終的に計算されたダメージ量
|
||||
*/
|
||||
protected abstract function damage($defence);
|
||||
}
|
||||
19
Question14-AdvancedInheritance/common/Course.php
Normal file
19
Question14-AdvancedInheritance/common/Course.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
interface Course
|
||||
{
|
||||
const PREFIX = '【Eラーニング】';
|
||||
|
||||
/**
|
||||
* コースの名称を取得します。
|
||||
* 例)Java、DB基礎、IT基礎 など
|
||||
* @return string 単元の名称
|
||||
*/
|
||||
function getCourseName();
|
||||
|
||||
/**
|
||||
* コースの単元を取得します
|
||||
* 例)プログラミングの書き方、式と演算子 など
|
||||
* @return string
|
||||
*/
|
||||
function getCourseUnit();
|
||||
}
|
||||
71
Question14-AdvancedInheritance/common/CreditCardPayment.php
Normal file
71
Question14-AdvancedInheritance/common/CreditCardPayment.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
require_once __DIR__ . '/PaymentInterface.php';
|
||||
|
||||
/**
|
||||
* クレジットカード決済を行うクラス
|
||||
*/
|
||||
class CreditCardPayment implements PaymentInterface
|
||||
{
|
||||
/** @var string カード番号 */
|
||||
private $cardNumber;
|
||||
|
||||
/** @var string カード名義人 */
|
||||
private $cardHolder;
|
||||
|
||||
/**
|
||||
* コンストラクタ
|
||||
*
|
||||
* @param string $cardNumber カード番号
|
||||
* @param string $cardHolder カード名義人
|
||||
*/
|
||||
public function __construct($cardNumber, $cardHolder)
|
||||
{
|
||||
// TODO: カード番号とカード名義人をプロパティに設定してください
|
||||
}
|
||||
|
||||
/**
|
||||
* クレジットカードで決済を実行する
|
||||
*
|
||||
* @param int $amount 決済金額(円)
|
||||
* @return bool 決済が成功したかどうか
|
||||
*/
|
||||
public function pay($amount)
|
||||
{
|
||||
// TODO: 以下の情報を表示して、最後に true を返してください
|
||||
// - "💳 クレジットカード決済処理"
|
||||
// - "カード番号: " に続けてマスキングされたカード番号(maskCardNumber メソッドを使用)
|
||||
// - "名義人: " に続けてカード名義人
|
||||
// - "決済金額: ¥" に続けて金額をカンマ区切りで表示(number_format 関数を使用)
|
||||
// - "決済が完了しました。"
|
||||
// ※各行の最後に <br> を付けること
|
||||
}
|
||||
|
||||
/**
|
||||
* 決済方法の名前を取得する
|
||||
*
|
||||
* @return string 決済方法名
|
||||
*/
|
||||
public function getPaymentMethodName()
|
||||
{
|
||||
// TODO: "クレジットカード" という文字列を返してください
|
||||
}
|
||||
|
||||
/**
|
||||
* カード番号をマスキングする(セキュリティのため)
|
||||
*
|
||||
* @param string $cardNumber カード番号
|
||||
* @return string マスキングされたカード番号
|
||||
*/
|
||||
private function maskCardNumber($cardNumber)
|
||||
{
|
||||
// TODO: カード番号を「****-****-****-最後の4桁」の形式でマスキングしてください
|
||||
// ヒント:
|
||||
// 1. explode('-', $cardNumber) でカード番号を '-' で分割して配列にする
|
||||
// 2. 配列の要素数が4つの場合、最後の要素($parts[3])以外を「****」に置き換える
|
||||
// 3. "****-****-****-" と最後の4桁を結合して返す
|
||||
// 4. 配列の要素数が4つでない場合は "****-****-****-****" を返す
|
||||
}
|
||||
}
|
||||
44
Question14-AdvancedInheritance/common/EmailNotification.php
Normal file
44
Question14-AdvancedInheritance/common/EmailNotification.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
require_once __DIR__ . '/NotificationInterface.php';
|
||||
|
||||
/**
|
||||
* メール通知を行うクラス
|
||||
*/
|
||||
// TODO: EmailNotification クラスを作成し、NotificationInterface を実装してください
|
||||
// ヒント: class EmailNotification implements NotificationInterface
|
||||
|
||||
// TODO: private プロパティ $emailAddress を定義してください
|
||||
|
||||
/**
|
||||
* コンストラクタ
|
||||
*
|
||||
* @param string $emailAddress 送信先のメールアドレス
|
||||
*/
|
||||
// TODO: コンストラクタを実装してください
|
||||
// 引数で受け取った $emailAddress を $this->emailAddress に設定
|
||||
|
||||
/**
|
||||
* メールで通知を送信する
|
||||
*
|
||||
* @param string $title 通知のタイトル
|
||||
* @param string $message 通知の本文
|
||||
* @return void
|
||||
*/
|
||||
// TODO: send メソッドを実装してください
|
||||
// 以下の内容を表示(各行の最後に <br> を付ける):
|
||||
// - "📧 メール送信"
|
||||
// - "宛先: " . $this->emailAddress
|
||||
// - "件名: " . $title
|
||||
// - "本文: " . $message
|
||||
// - "メールを送信しました。"
|
||||
|
||||
/**
|
||||
* 送信先のメールアドレスを取得する
|
||||
*
|
||||
* @return string メールアドレス
|
||||
*/
|
||||
// TODO: getDestination メソッドを実装してください
|
||||
// $this->emailAddress を返す
|
||||
40
Question14-AdvancedInheritance/common/LineMessage.php
Normal file
40
Question14-AdvancedInheritance/common/LineMessage.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
require_once __DIR__ . '/MessageSenderInterface.php';
|
||||
|
||||
/**
|
||||
* LINE でメッセージを送信するクラス
|
||||
*/
|
||||
// TODO: LineMessage クラスを作成し、MessageSenderInterface を実装してください
|
||||
|
||||
// TODO: private プロパティ $userName を定義してください
|
||||
|
||||
/**
|
||||
* コンストラクタ
|
||||
*
|
||||
* @param string $userName 送信先のユーザー名
|
||||
*/
|
||||
// TODO: コンストラクタを実装してください
|
||||
// 引数で受け取った $userName を $this->userName に設定
|
||||
|
||||
/**
|
||||
* LINE でメッセージを送信する
|
||||
*
|
||||
* @param string $message メッセージ内容
|
||||
* @return void
|
||||
*/
|
||||
// TODO: send メソッドを実装してください
|
||||
// 以下の内容を表示(各行の最後に <br> を付ける):
|
||||
// - "📱 LINE送信"
|
||||
// - "送信先: " . $this->userName
|
||||
// - "メッセージ: " . $message
|
||||
|
||||
/**
|
||||
* 送信先の名前を取得する
|
||||
*
|
||||
* @return string ユーザー名
|
||||
*/
|
||||
// TODO: getDestinationName メソッドを実装してください
|
||||
// $this->userName を返す
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
/**
|
||||
* メッセージ送信のためのインタフェース
|
||||
*/
|
||||
// TODO: MessageSenderInterface という名前のインタフェースを定義してください
|
||||
|
||||
/**
|
||||
* メッセージを送信する
|
||||
*
|
||||
* @param string $message メッセージ内容
|
||||
* @return void
|
||||
*/
|
||||
// TODO: send メソッドを定義してください(実装は不要)
|
||||
// public function send($message);
|
||||
|
||||
/**
|
||||
* 送信先の名前を取得する
|
||||
*
|
||||
* @return string 送信先の名前
|
||||
*/
|
||||
// TODO: getDestinationName メソッドを定義してください(実装は不要)
|
||||
// public function getDestinationName();
|
||||
28
Question14-AdvancedInheritance/common/MessageService.php
Normal file
28
Question14-AdvancedInheritance/common/MessageService.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
require_once __DIR__ . '/MessageSenderInterface.php';
|
||||
|
||||
/**
|
||||
* メッセージ送信サービスクラス
|
||||
* インタフェース型を引数で受け取ることで、様々な送信方法に対応できる
|
||||
*/
|
||||
// TODO: MessageService クラスを作成してください
|
||||
|
||||
/**
|
||||
* メッセージを送信する
|
||||
*
|
||||
* @param MessageSenderInterface $sender 送信方法(インタフェース型)
|
||||
* @param string $message メッセージ内容
|
||||
* @return void
|
||||
*/
|
||||
// TODO: sendMessage メソッドを実装してください
|
||||
// ★ポイント: 引数の型を MessageSenderInterface にすることで、
|
||||
// LineMessage でも SlackMessage でも受け取れます!
|
||||
//
|
||||
// 以下の内容を表示(各行の最後に <br> を付ける):
|
||||
// - "【送信開始】"
|
||||
// - "送信方法: " . $sender->getDestinationName()
|
||||
// - $sender->send($message) を呼び出す
|
||||
// - "【送信完了】"
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
/**
|
||||
* 通知を送信するためのインタフェース
|
||||
*/
|
||||
// TODO: NotificationInterface という名前のインタフェースを定義してください
|
||||
|
||||
// TODO: 以下のメソッドを定義してください(実装は不要)
|
||||
|
||||
/**
|
||||
* 通知を送信する
|
||||
*
|
||||
* @param string $title 通知のタイトル
|
||||
* @param string $message 通知の本文
|
||||
* @return void
|
||||
*/
|
||||
// public function send($title, $message);
|
||||
|
||||
/**
|
||||
* 送信先の情報を取得する
|
||||
*
|
||||
* @return string 送信先(メールアドレスや電話番号など)
|
||||
*/
|
||||
// public function getDestination();
|
||||
65
Question14-AdvancedInheritance/common/OrderProcessor.php
Normal file
65
Question14-AdvancedInheritance/common/OrderProcessor.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
require_once __DIR__ . '/PaymentInterface.php';
|
||||
|
||||
/**
|
||||
* 注文処理を行うクラス
|
||||
* 決済方法をDI(依存性注入)で受け取る
|
||||
*/
|
||||
class OrderProcessor
|
||||
{
|
||||
/** @var PaymentInterface 決済方法 */
|
||||
private $paymentMethod;
|
||||
|
||||
/**
|
||||
* コンストラクタ
|
||||
*
|
||||
* @param PaymentInterface $paymentMethod 決済方法(インタフェース型)
|
||||
*/
|
||||
public function __construct(PaymentInterface $paymentMethod)
|
||||
{
|
||||
// TODO: 決済方法をプロパティに設定してください
|
||||
// ポイント: この引数の型は PaymentInterface なので、
|
||||
// CreditCardPayment や BankTransferPayment など、
|
||||
// PaymentInterface を実装したどのクラスのインスタンスでも受け取れます。
|
||||
// これが「依存性注入(DI)」と「多態性」の組み合わせです。
|
||||
}
|
||||
|
||||
/**
|
||||
* 注文を処理する
|
||||
*
|
||||
* @param int $amount 注文金額(円)
|
||||
* @return void
|
||||
*/
|
||||
public function processOrder($amount)
|
||||
{
|
||||
// TODO: 以下の処理を実装してください
|
||||
// 1. "注文処理を開始します" を表示
|
||||
// 2. "決済方法: " に続けて、$this->paymentMethod->getPaymentMethodName() の結果を表示
|
||||
// 3. "---" を表示(区切り線)
|
||||
// 4. $this->paymentMethod->pay($amount) を呼び出して、戻り値を $result に格納
|
||||
// 5. $result が true の場合:
|
||||
// - "---" を表示
|
||||
// - "✅ 注文が完了しました!" を表示
|
||||
// 6. $result が false の場合:
|
||||
// - "---" を表示
|
||||
// - "❌ 決済に失敗しました。" を表示
|
||||
// ※各行の最後に <br> を付けること
|
||||
}
|
||||
|
||||
/**
|
||||
* 決済方法を変更する
|
||||
*
|
||||
* @param PaymentInterface $paymentMethod 新しい決済方法
|
||||
* @return void
|
||||
*/
|
||||
public function changePaymentMethod(PaymentInterface $paymentMethod)
|
||||
{
|
||||
// TODO: 以下の処理を実装してください
|
||||
// 1. $paymentMethod をプロパティに設定
|
||||
// 2. "決済方法を「" + 決済方法名 + "」に変更しました" を表示
|
||||
// ※最後に <br> を付けること
|
||||
}
|
||||
}
|
||||
24
Question14-AdvancedInheritance/common/PaymentInterface.php
Normal file
24
Question14-AdvancedInheritance/common/PaymentInterface.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
/**
|
||||
* 決済処理を行うためのインタフェース
|
||||
*/
|
||||
interface PaymentInterface
|
||||
{
|
||||
/**
|
||||
* 決済を実行する
|
||||
*
|
||||
* @param int $amount 決済金額(円)
|
||||
* @return bool 決済が成功したかどうか
|
||||
*/
|
||||
public function pay($amount);
|
||||
|
||||
/**
|
||||
* 決済方法の名前を取得する
|
||||
*
|
||||
* @return string 決済方法名(例: "クレジットカード", "銀行振込")
|
||||
*/
|
||||
public function getPaymentMethodName();
|
||||
}
|
||||
40
Question14-AdvancedInheritance/common/SlackMessage.php
Normal file
40
Question14-AdvancedInheritance/common/SlackMessage.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
require_once __DIR__ . '/MessageSenderInterface.php';
|
||||
|
||||
/**
|
||||
* Slack でメッセージを送信するクラス
|
||||
*/
|
||||
// TODO: SlackMessage クラスを作成し、MessageSenderInterface を実装してください
|
||||
|
||||
// TODO: private プロパティ $channelName を定義してください
|
||||
|
||||
/**
|
||||
* コンストラクタ
|
||||
*
|
||||
* @param string $channelName 送信先のチャンネル名
|
||||
*/
|
||||
// TODO: コンストラクタを実装してください
|
||||
// 引数で受け取った $channelName を $this->channelName に設定
|
||||
|
||||
/**
|
||||
* Slack でメッセージを送信する
|
||||
*
|
||||
* @param string $message メッセージ内容
|
||||
* @return void
|
||||
*/
|
||||
// TODO: send メソッドを実装してください
|
||||
// 以下の内容を表示(各行の最後に <br> を付ける):
|
||||
// - "💬 Slack送信"
|
||||
// - "チャンネル: " . $this->channelName
|
||||
// - "メッセージ: " . $message
|
||||
|
||||
/**
|
||||
* 送信先の名前を取得する
|
||||
*
|
||||
* @return string チャンネル名
|
||||
*/
|
||||
// TODO: getDestinationName メソッドを実装してください
|
||||
// $this->channelName を返す
|
||||
42
Question14-AdvancedInheritance/common/SmsNotification.php
Normal file
42
Question14-AdvancedInheritance/common/SmsNotification.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
require_once __DIR__ . '/NotificationInterface.php';
|
||||
|
||||
/**
|
||||
* SMS通知を行うクラス
|
||||
*/
|
||||
// TODO: SmsNotification クラスを作成し、NotificationInterface を実装してください
|
||||
|
||||
// TODO: private プロパティ $phoneNumber を定義してください
|
||||
|
||||
/**
|
||||
* コンストラクタ
|
||||
*
|
||||
* @param string $phoneNumber 送信先の電話番号
|
||||
*/
|
||||
// TODO: コンストラクタを実装してください
|
||||
// 引数で受け取った $phoneNumber を $this->phoneNumber に設定
|
||||
|
||||
/**
|
||||
* SMSで通知を送信する
|
||||
*
|
||||
* @param string $title 通知のタイトル
|
||||
* @param string $message 通知の本文
|
||||
* @return void
|
||||
*/
|
||||
// TODO: send メソッドを実装してください
|
||||
// 以下の内容を表示(各行の最後に <br> を付ける):
|
||||
// - "📱 SMS送信"
|
||||
// - "宛先: " . $this->phoneNumber
|
||||
// - "内容: [" . $title . "] " . $message
|
||||
// - "SMSを送信しました。"
|
||||
|
||||
/**
|
||||
* 送信先の電話番号を取得する
|
||||
*
|
||||
* @return string 電話番号
|
||||
*/
|
||||
// TODO: getDestination メソッドを実装してください
|
||||
// $this->phoneNumber を返す
|
||||
84
Question14-AdvancedInheritance/index.html
Normal file
84
Question14-AdvancedInheritance/index.html
Normal file
@@ -0,0 +1,84 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>PTra14スタートページ</title>
|
||||
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link href="../common/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
独習PHP第10章練習問題 <small>インタフェース・抽象メソッド</small>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="panel-group" id="accordion">
|
||||
<!-- Ex01 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex01.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex01: Slimeクラスの作成(抽象クラス・メソッド利用)
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ex02 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex02.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex02: Drakeeクラスの作成(抽象クラス・メソッド利用)中級
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ex03 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex03.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex03: スライムとドラキーの戦闘判定 上級
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ex04 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex04.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex04: 通知システム(インタフェースの基本)
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ex05 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex05.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex05: 注文処理システム(多態性とDI入門)上級
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="../common/js/jquery-3.2.1.min.js"></script>
|
||||
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="../common/js/bootstrap.min"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user