2016-09-03 6 views
0

私はaddonsを持つことができるボットを作っています。どのように構造化し、どのようにメインオブジェクトにアドオンからのコマンドを含めることができるかについて助けが必要です。複数のクラスからクラス関数を継承する

メインボットは非常に裸であるので、いくつかのコマンドで$ botオブジェクトを持っています。たとえば:

namespace Bot; 

... the bot class .. 

Usage: 
$bot = new Bot(); 
$bot->say('hello'); 

私は、コマンド/ Bot.php

でこのファイルを持っている今、私はアドオンのコマンド/ Help.php

を作るここで私は、ヘルプコマンドを持つクラスを作ります。これを$ botに挿入するにはどうすればいいですか?

$bot->help->showHelp(); 

ここで、ヘルプクラスは$ botの子です。

私は何とか「登録」する必要があります。ヘルプコマンドは、設定ファイルにあります。それから、ループを使ってメインのBot.phpクラスに組み込みます。

しかし、それでは?私はそれを子供にして$ botの中に追加するにはどうすればいいですか?

第二のアプローチ:たぶんそれが、メモリ消費量にすべてcommmandsすべての時間をロードするために悪いです

?だから、

使用するコマンドを何ボット宣言した場合:

$bot->say(); 
$bot->help->showHelp(); 

ありがとう:

use Bot\Commands\Talk; 
use Bot\Commands\Help; 

私はまだにこれら二つをマージしたいです。

+0

工場やデコレータなどの基本的なプログラミングパターンを調べる必要があります。 – ArtisticPhoenix

+0

オートローダと依存性注入があなたのためにトリックを行います。いくつかのヒントがあります:http://stackoverflow.com/documentation/php/779/dependency-injection#t=201609031956103774342 – jaro1989

答えて

0

これは、依存性注入を使用して実現できます。 HelpオブジェクトをBotのコンストラクタに渡し、次にそのBotのpublic $ helpプロパティに割り当てられます。次に、$ bot-> help-> helpMethod();を使用してヘルプオブジェクトのメソッドを呼び出すことができます。さらにいくつかの例を確認してくださいhere

class Bot{ 

    public $help; 

    public function __construct(Help $help){ 

     $this->help = $help; 
    } 

    public function say(){ 
     echo "Talking..."; 
    } 
} 


class Help{ 

    public function showHelp(){ 

     echo "Help is shown"; 
    } 
} 

// instantiate the help object and pass it into the bot constructor 
$bot = new Bot(new Help()); 
$bot->say(); 
$bot->help->showHelp(); 
関連する問題