Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 依赖注入和传递参数_Php_Dependency Injection - Fatal编程技术网

Php 依赖注入和传递参数

Php 依赖注入和传递参数,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中依赖项注入的问题

我目前有3门课:

Staff.php

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