9

私はまだPHPOOプログラミング手法に慣れていないので、非常に単純な幅広い質問があります。クラス内のクラスをインスタンス化してから、そのインスタンスを別のクラスに渡すのは一般的に悪い習慣ですか?

私が望んでいるのは、各ユーザーリクエストを通じて常に必要になることがわかっている特定のクラスのインスタンスを作成できるようにすることです。クラス2は何よりも単なるヘルパークラスであり、理想的には私のアプリケーションでは、ビューをロードする「ローダー」になります。

他の2つのクラスを呼び出す最初のクラス:

require 'classTwo.php';
require 'classThree.php';

class first {
     public $classTwo, $classThree;

     public function __construct() {
          $this -> classTwo = new classTwo;
          $this -> classThree = new classThree;

          $this -> classThree -> displayNum( $this -> classTwo );

     }
}

ヘルパークラスである2番目のクラス:

class classTwo {
     public function returnVal() {
          return 123;
     }
}

3番目のクラスは、実際の作業と最終的な表示が行われるアクションクラスです。

class classThree {
     public function displayNum( $instance ) {
          echo $instance -> returnVal();
     }
}

全体的に、これが悪い習慣であるかどうかを知りたいだけです。これまでにそれが行われたのを見たことがないからです。

前もって感謝します!

4

2 に答える 2

12

依存オブジェクトを注入することをお勧めします。これにより、単体テスト中に非常に簡単にモックを作成できます。

一般的に言って、もしあなたが持っていてClassA、それが機能するためのインスタンスに依存しているならClassB、あなたは次のようなことをすることができます。

$objectB = new ClassB();
$objectA = new ClassA($objectB);

http://net.tutsplus.com/tutorials/php/dependency-injection-in-php/をご覧ください

編集:コンストラクターインジェクションは、依存関係を新しいオブジェクトのコンストラクターに渡します(上記のように)。

セッターインジェクションは、依存関係を設定する方法を使用しており、通常、依存関係が重要でない場合に使用されます。

$objectB = new ClassB();
$objectA = new ClassA();
$objectA->setObjectB($objectB);
于 2013-03-16T00:41:28.807 に答える
4

はい。firstクラスには依存関係がハードコーディングされているため、クラスを単体テストするのは面倒です。

クラスのインスタンスを注入するか、ファクトリを注入します。

于 2013-03-16T00:38:23.557 に答える