Php 依赖注入和传递参数
我有一个关于PHP中依赖项注入的问题 我目前有3门课: Staff.phpPhp 依赖注入和传递参数,php,dependency-injection,Php,Dependency Injection,我有一个关于PHP中依赖项注入的问题 我目前有3门课: Staff.php <?php class Staff { public function name($id) { return 'returning staff with id ' . $id; } } 上述方法可行,但我想做的是: $staff = new Staff; $projects = new Projects; $app = new Pro
<?php
class Staff
{
public function name($id)
{
return 'returning staff with id ' . $id;
}
}
上述方法可行,但我想做的是:
$staff = new Staff;
$projects = new Projects;
$app = new ProjectsManager($staff, $projects);
echo $app->staff()->name(5);
$employee = $app->staff(5);
echo $employee->name();
echo $employee->position();
echo $employee->email();
我如何处理依赖关系来实现这一点
$employee = $app->staff()->name(5);
//$app is the ProjectsManager
//$app->staff() returns it's Staff object
//staff()->name(5) Invokes the Staff object's name function
//Returns 'Returning staff with id 5'
echo $employee->name();
echo $employee->position();
echo $employee->email();
为了避免混淆,我还建议在其中一些函数前面加上get
(例如$app->getStaff()->getFromId(#)
)
另外,请确保修改
staff()->name(#)
以实际返回一个对象而不是字符串。您只需在staff类中添加set函数并在ProjectsManager中调用它:
<?php
class Staff
{
private $id = null;
public function name()
{
return 'returning staff with id ' . $this->id;
}
public function setId($id)
{
$this->id = $id;
}
}
class Projects
{
//..... projects related functions
}
class ProjectsManager
{
private $staff = null;
private $projects = null;
public function __construct(Staff $staff, Projects $projects)
{
$this->staff = $staff;
$this->projects = $projects;
}
public function staff($id = null)
{
$this->staff->setId($id);
return $this->staff;
}
public function projects($val = null)
{
return $this->projects;
}
}
$staff = new Staff;
$projects = new Projects;
$app = new ProjectsManager($staff, $projects);
$employee = $app->staff(5);
echo $employee->name();
当我执行$app->getStaff()->getId($id)时,一切都进行得很顺利,但是如果我想执行$app->getStaff()->getId($id)->name(),它就不再工作了。选择记录的变量必须始终位于最后一个对象上,因为->name必须是传递给->getId($id)的类的方法,并且必须知道它正在选择记录$id。请发布getId($id)
中的实际方法以及它传递的对象类的定义(如果有)。谢谢您的建议,还有帮助。我最终使用了维达斯提供的以下解决方案。这是正确的。谢谢
$employee = $app->staff()->name(5);
//$app is the ProjectsManager
//$app->staff() returns it's Staff object
//staff()->name(5) Invokes the Staff object's name function
//Returns 'Returning staff with id 5'
echo $employee->name();
echo $employee->position();
echo $employee->email();
<?php
class Staff
{
private $id = null;
public function name()
{
return 'returning staff with id ' . $this->id;
}
public function setId($id)
{
$this->id = $id;
}
}
class Projects
{
//..... projects related functions
}
class ProjectsManager
{
private $staff = null;
private $projects = null;
public function __construct(Staff $staff, Projects $projects)
{
$this->staff = $staff;
$this->projects = $projects;
}
public function staff($id = null)
{
$this->staff->setId($id);
return $this->staff;
}
public function projects($val = null)
{
return $this->projects;
}
}
$staff = new Staff;
$projects = new Projects;
$app = new ProjectsManager($staff, $projects);
$employee = $app->staff(5);
echo $employee->name();