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
класс, потому что в нем жестко закодированы зависимости.
либо внедрить экземпляры классов, либо внедрить фабрику.