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

总的来说我只是想知道这是否是不好的做法,因为我从未见过它之前完成。

在此先感谢!

+1

Upvoted我第一次开始OOP。一旦您熟悉Jaitsu的答案中的链接所依赖的依赖注入,我建议您查看[Pimple](http://pimple.sensiolabs.org/),它是所有类和参数的DI容器。 – 2013-03-16 00:51:32

+0

Thanks @ Adam-E我绝对同意,并且我已经工作并阅读了足够的PHP OO技术,并且从未见过我之前使用的方法,并且我认为谁比Stack Overflow用户更好,我总是发现它非常有帮助。我一定会考虑Pimple谢谢! – 2013-03-16 01:14: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); 
+0

非常感谢@Jaitsu,你能告诉我为什么从实例化而不是从方法传递实例更好。 – 2013-03-16 00:53:04

+0

@TomBird有两种类型的注入,setter注入和构造函数注入。通常如果依赖是可选的,那么你使用setter注入,但是如果你的对象*必须*接收另一个对象的实例才能工作,那么使用构造函数注入 – JamesHalsall 2013-03-16 09:09:01

是的。这会让单元测试你的类变得很痛苦,因为它里面有依赖关系。

要么注入类的实例要么注入工厂。