代码之家  ›  专栏  ›  技术社区  ›  Hans

了解如何注入对象依赖项

  •  0
  • Hans  · 技术社区  · 15 年前

    $survey   = new survey;
    
    $question = new question($survey);
    
    $question->load($question_id);
    
    class question  {
    
    public function __construct(&$survey)
    {   
        $this->survey = $survey;
    }   
    
    public function load ($id)
    {   
        // now a question is loaded
        // want to load the survey that this question is in
        $this->survey->load($this->get('survey_id')); // ** survey_id is a field in the questions table
        // now $this->survey object has all the info about the survey this question is in
    }   
    
    private function get($name)
    {   
        // returns $name, if isset() from array that load() sets
    }    }
    

    乱扔

    1 回复  |  直到 15 年前
        1
  •  1
  •   Charles    15 年前

    编辑:我刚刚注意到您提到在现有代码中遇到这种情况。我下面所说的可能仍然适用于解决您的问题,但实际上可能没有立即的建设性用途不幸的是,我们需要看到更多的代码来帮助您解决问题,因为到目前为止您向我们展示的代码非常奇怪。


    调查通常被定义为一系列问题。

    你可以将他们的关系存储在一个链接表中,这将允许调查人员查找他们的问题,同时也允许调查人员查找他们正在进行的调查。在每个类中创建访问器方法来查找链接表中的依赖项,并返回对象的id或对象本身。这种方法使对象之间的联系不那么紧密。

    (将此扩展到回答问题的用户,事情会变得更有趣。如果这样做,我会为每个用户的响应创建一个类(每个用户得到一个响应),其中包含答案。回答引用了调查,每个答案引用了一个问题。)

    这可能不是依赖注入适用的情况。DI最常用于被传递对象的实际类可能发生变化时,或者当外力可以控制可以传递的对象时。你有没有想过调查会包含一些不是问题的东西?或者问题会永远存在于不是调查的东西里面?或者一个与调查或问题相关的外部力量会操纵一个问题?如果你对这些回答“不”,那么DI可能不是你想要的。