Все зависит от того, чего вы хотите достичь, но в основном в
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
.
person
Marcin Nabiałek
schedule
20.09.2014
Myclass
? - person cmorrissey   schedule 20.09.2014