我仍然是PHP OO编程技术的新手,我有一个非常简单的广泛问题,在类中实例化一个类然后将该实例传递给另一个类通常是不好的做法吗?
我想要的是能够创建一个特定类的实例,我知道我将始终需要通过每个用户请求。第二类不仅仅是一个帮助类,理想情况下,在我的应用程序中,它将是一个" loader"加载视图。
调用另外两个类的第一个类:
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();
}
}
总的来说,我只是想知道这是不好的做法,因为我以前从未见过它。
提前致谢!
答案 0 :(得分:9)
最好注入任何依赖对象,因为这样可以在单元测试期间轻松模拟。
一般来说,如果你有ClassA
且它依赖于ClassB
的实例来运行那么你可以做类似的事情。
$objectB = new ClassB();
$objectA = new ClassA($objectB);
查看http://net.tutsplus.com/tutorials/php/dependency-injection-in-php/
编辑:构造函数注入将依赖项传递给新对象的构造函数(如上所示)。
Setter注入使用一种方法来设置依赖关系,通常在依赖关系不重要时使用:
$objectB = new ClassB();
$objectA = new ClassA();
$objectA->setObjectB($objectB);
答案 1 :(得分:3)
是。这会使您对first
类进行单元测试变得很麻烦,因为它中存在硬编码的依赖项。
注入类的实例或注入工厂。