PHP将一个类的实例传递给另一个类
我对PHP OO编程技术还很陌生,我有一个非常简单的广泛问题,是在类中实例化一个类,然后传递该实例到另一个班级?PHP将一个类的实例传递给另一个类
我想要的是能够创建一个特定类的实例,我知道我将永远需要通过每个用户请求。第二类不仅仅是一个辅助类,理想情况下,在我的应用程序中它将是一个加载视图的“加载器”。
第一类调用其他两个类:
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();
}
}
总的来说我只是想知道这是否是不好的做法,因为我从未见过它之前完成。
在此先感谢!
注入任何依赖对象是一种很好的做法,因为这样可以在单元测试过程中轻松地进行模拟。
一般来说,如果你有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);
非常感谢@Jaitsu,你能告诉我为什么从实例化而不是从方法传递实例更好。 – 2013-03-16 00:53:04
@TomBird有两种类型的注入,setter注入和构造函数注入。通常如果依赖是可选的,那么你使用setter注入,但是如果你的对象*必须*接收另一个对象的实例才能工作,那么使用构造函数注入 – JamesHalsall 2013-03-16 09:09:01
是的。这会让单元测试你的类变得很痛苦,因为它里面有依赖关系。
要么注入类的实例要么注入工厂。
Upvoted我第一次开始OOP。一旦您熟悉Jaitsu的答案中的链接所依赖的依赖注入,我建议您查看[Pimple](http://pimple.sensiolabs.org/),它是所有类和参数的DI容器。 – 2013-03-16 00:51:32
Thanks @ Adam-E我绝对同意,并且我已经工作并阅读了足够的PHP OO技术,并且从未见过我之前使用的方法,并且我认为谁比Stack Overflow用户更好,我总是发现它非常有帮助。我一定会考虑Pimple谢谢! – 2013-03-16 01:14:12