一切都取决于你想要达到的目标,但基本上在
public function myfunction()
{
return $this->injectedclass($this->var1, $this->var2, $this->var3)->someMethod();
}
您不需要传递这些参数,因为$this->injectedclass 已经是已经初始化其属性的对象。所以代码应该是这样的:
class Myclass {
private $var1;
private $var2;
private $var3;
private $injectedclass;
public function __construct($var1, $var2, $var3, InjectedClass $injectedclass)
{
$this->var1 = $var1;
$this->var2 = $var2;
$this->var3 = $var3;
$this->injectedclass = $injectedclass;
}
public function myfunction()
{
return $this->injectedclass->someMethod();
}
}
class InjectedClass {
private $var1;
private $var2;
private $var3;
public function __construct($var1, $var2, $var3)
{
$this->var1 = $var1;
$this->var2 = $var2;
$this->var3 = $var3;
}
public function someMethod()
{
// do stuff
echo $this->var1.' '.$this->var2.' '.$this->var3."<br />";
}
}
$m = new Myclass(1,2,3, new InjectedClass(1,2,3));
$m->myFunction();
但是,当您创建 Myclass 实例时,您需要将参数 1,2,3 传递给 Myclass 和 InjectedClass,如果这些值相同,这可能不太方便。
因此您可以将代码更改为:
class Myclass {
private $var1;
private $var2;
private $var3;
private $injectedclass;
public function __construct($var1, $var2, $var3, InjectedClass $injectedclass)
{
$this->var1 = $var1;
$this->var2 = $var2;
$this->var3 = $var3;
$this->injectedclass = $injectedclass;
$this->injectedclass->setParams($var1, $var2, $var3);
}
public function myfunction()
{
return $this->injectedclass->someMethod();
}
}
class InjectedClass {
private $var1;
private $var2;
private $var3;
public function setParams($var1, $var2, $var3)
{
$this->var1 = $var1;
$this->var2 = $var2;
$this->var3 = $var3;
}
public function someMethod()
{
// do stuff
echo $this->var1.' '.$this->var2.' '.$this->var3."<br />";
}
}
$m = new Myclass(1,2,3, new InjectedClass());
$m->myFunction();
因此您只将参数传递给Myclass,并将参数设置为InjectedClass。但是这种方法会导致即使您创建InjectedClass 类的对象,您也需要运行setParams 方法来设置参数,因此它不是最佳解决方案。
更好的是:
class Myclass {
private $var1;
private $var2;
private $var3;
private $injectedclass;
public function __construct(InjectedClass $injectedclass)
{
$this->injectedclass = $injectedclass;
list ($this->var1, $this->var2, $this->var3) = $this->injectedclass->getParams();
}
public function myfunction()
{
return $this->injectedclass->someMethod();
}
}
class InjectedClass {
private $var1;
private $var2;
private $var3;
public function __construct($var1, $var2, $var3)
{
$this->var1 = $var1;
$this->var2 = $var2;
$this->var3 = $var3;
}
public function getParams() {
return array ($this->var1, $this->var2, $this->var3);
}
public function someMethod()
{
// do stuff
echo $this->var1.' '.$this->var2.' '.$this->var3."<br />";
}
}
$m = new Myclass(new InjectedClass(1,2,3));
$m->myFunction();
InjectedClass 的对象可能会将这些参数返回给Myclass 的对象。