質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

894閲覧

PHP CommandManagerクラスで管理しているメソッドを実行する

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/08/06 05:33

編集2019/08/06 05:58

前提・実現したいこと

下記の実行したいのですが、
CommandManagerクラスの定義の仕方がわかりません。
コマンドを追加する・コマンドを削除するメソッドとはどのように定義したらよいのでしょうか?
また、それを呼び出すにはどのように記述すればよいのでしょうか?

実行内容

アイテムコマンド、ゲームコマンドクラスを作る。
各コマンドクラスは、コマンドクラスを継承する。
各コマンドの管理を行うコマンドマネージャークラスを作る。

コマンドクラスは、executeメソッドを「抽象メソッド」として定義。
各コマンドクラスでexecuteメソッドを実装し、何かしらのメッセージを表示。

コマンドマネージャークラスでは、コマンドを管理したいので以下のメソッドを作る。
・コマンドを追加が出来るメソッド
・コマンドを削除が出来るメソッド

abstract class Command { abstract public function execute(); } class ItemCommand extends Command { function __construct(){ $this->execute(); } public function execute() { echo "hello"; } } class GameCommand extends Command { function __construct(){ $this->execute(); } public function execute() { echo "happy"; } } class CommandManager { public $commands; function add() { } function remove() { } } $command = new ItemCommand(); $command = new GameCommand();

ここに問題に対して試したことを記載してください。

「コマンドを管理する」というのがどのようにしたらよいかわかりません。

PHPについてかなりの初心者のため、
よくわからないまま書いていることが多いため、教えていただけますと助かります

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/06 05:37

質問はタイトルにある >ポリモーフィズムの考え方・書き方 ですよね。 で質問内容は 「CommandManagerクラスの定義の仕方」 とされています。 ポリモーフィズムに言及されたいのでしたらもう少し質問内容を工夫されたほうが良いかと思いますし、違うのでしたらタイトルを調整されたほうが良いです。 また、コードを提示するのであればマークダウン利用してください。 回答依頼は良いのですが、 丸投げに近く、課題っぽい質問には応えかねます。
退会済みユーザー

退会済みユーザー

2019/08/06 05:57

質問内容についてわかりづらく申し訳ございません。
m.ts10806

2019/08/06 05:58

「コマンドを管理する」はどこから出てきた要件なのでしょうか。
m.ts10806

2019/08/06 05:58

そもそもここで使っている「コマンド」はどういう概念なのでしょうか。
退会済みユーザー

退会済みユーザー

2019/08/06 06:07

CommandManagerで定義したメソッドを GameCommandやItemComanndでも使用できるようにするために、 CommandManagerでそれらのメソッドを管理し、実行したいと思っています。 その場合にポリモーフィズムの考え方が使用できるのではないかと思いました。 ただ、自分自身で、ポリモーフィズムの理解ができていないため、 質問の意図が伝わらずすみません。。
退会済みユーザー

退会済みユーザー

2019/08/06 06:20

参考になる情報をいただきありがとうございます。 まずいただいたものを理解してから、上記再度試して見たいと思います ありがとうございました
mikkame

2019/08/06 06:28 編集

やりたいのはDIなんじゃないか説
guest

回答2

0

ぱっと見、ドラクエの戦闘コマンド入力画面の処理をするためのクラスですかねえ。
コマンドマネージャーが選択ウィンドウを表示するためのデータを持っていて、それで選ばれたコマンドの実際の処理がコマンドクラスで行われる、と。

コマンドマネージャーは(どう表示するかは別にして)、コマンド(のインスタンスとなるオブジェクト)のリストを管理していて、そこにコマンドオブジェクトを追加・削除するような作りになるはずです。
であれば、コマンドは各種コマンドがポリモーフィズムしているものですから(コマンド「たたかう」とコマンド「じゅもん」とでは execute したときの挙動は違いますが、どちらも execute することで実施することができるようになってますよね)、それも加味してリストの定義をしましょうか。

……と、ここまで書いたことがちんぷんかんぷんであるならば、画面を思い浮かべて見て、その中でどれがどのオブジェクトになるのか、考えてみることです。

投稿2019/08/06 06:01

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/06 06:10

ご回答ありがとうございます。
退会済みユーザー

退会済みユーザー

2019/08/06 06:14

ゲームのようなものを作りたいのですが、まだまだ理解ができてないようです。。 参考になる情報を教えていただきありがとうございます。
guest

0

ベストアンサー

投稿2019/08/06 06:22

編集2019/08/06 12:27
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/06 06:25

回答付いてるし、質問の修正ポイントも提示されているので、掘り下げればよいのに。。。
退会済みユーザー

退会済みユーザー

2019/08/06 06:33

自身の理解がだいぶ足りていないことに気づきました。 もう少し自身で理解を深め、きちんと質問ができるようにして行きたいと思います。 ご指摘ありがとうございます。
m.ts10806

2019/08/06 09:22

とはいえこのクローズの仕方はマズいです。 後から見た人はたいてい「ベストアンサー」を確認します。 そのときに「取り下げます」とだけ書いた回答がベストアンサーだとどう思われますか? 他に回答がついていたとして、その回答を確認してみようと思うでしょうか? そのあたりは考えたうえで質問をし、解決まできちんと対応されたほうが良いです。(でないと回答依頼を出しても回答を待っても誰も回答しなくなります。)
m.ts10806

2019/08/06 09:24

ベストアンサーを取り下げたあと、 ついた回答で理解するまで突っ込み続けるか、 はたまたいったんついた回答で解決済みとするか、 質問を更新し回答を待つか、 自身でなんとかするか、 いずれかだと思います(ベストアンサー取り下げは必須と思います)
退会済みユーザー

退会済みユーザー

2019/08/06 12:09

そういったことも理解しておらずすみませんでした。 ご指摘いただいた点、修正します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問