PHP передает экземпляр класса другому классу

Я все еще новичок в методах программирования PHP OO, и у меня есть очень простой широкий вопрос, как правило, плохая практика создания экземпляра класса в классе, а затем передать этот экземпляр другому классу?

Я хочу иметь возможность создавать экземпляр определенного класса, который, как я знаю, мне всегда будет нужен через каждый запрос пользователя. Второй класс-это не просто вспомогательный класс, В идеале, в моем приложении это будет "загрузчик", который загружает вид.

первый класс, который вызывает два других класса:

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 );

     }
}

второй класс, который является вспомогательным классом:

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

третий класс-это класс действий, в котором произойдет фактическая работа и окончательное отображение:

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

В общем, я просто хочу знать, если это плохая практика, потому что я никогда не видел это раньше.

спасибо заранее!

2 ответов


это хорошая практика, чтобы ввести любые зависимые объекты, так как это позволяет издеваться довольно легко во время модульного тестирования.

вообще говоря, если у вас есть ClassA и он полагается на экземпляр ClassB чтобы функционировать, вы можете сделать что-то вроде..

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

посмотри http://net.tutsplus.com/tutorials/php/dependency-injection-in-php/

EDIT: инъекция конструктора передает зависимость в новый объект конструктор (как показано выше).

инъекция сеттера использует метод для установки зависимости и обычно используется, когда зависимость не критична:

$objectB = new ClassB();
$objectA = new ClassA();
$objectA->setObjectB($objectB);

да. Это сделает его боль, чтобы модульный тест ваш first класс, потому что в нем жестко закодированы зависимости.

либо внедрить экземпляры классов, либо внедрить фабрику.