no message
This commit is contained in:
@@ -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 を返す
|
||||
Reference in New Issue
Block a user