doushijiao0679 2013-10-15 07:05
浏览 153
已采纳

依赖注入 - 静态函数

I get the basic idea behind Dependency Incjection (e.g. for Databases), but i couldn't figure out how to use it with static functions:

class Foo{
    private $id; 
    private $class_variables,...;
    private $db;
    public function __construct($db,$id,$class_varibles,...)
    {
        $this->db=$db;
        //Assignments
    }

    public static function Get_By_ID($id)
    {
     //No DB-Connection here
     return new Foo(?);
    }
}

Is the only way to do this the following?

class Foo{
     ...
     public static function Get_By_ID($db,$id)
     {
        //Do work here!
        return new Foo($db,$id,$class_variables,...);
     }

It seems like a lot of additional work for several static functions. Also:

$f = new Foo($db);

will only be able to create new Objects with the "$db" it has saved in (private $db)

$b = $f->Create_Bar();

How can you solve this problem? Is the only way:

$b = $f->Create_Bar($db_for_bar);

Additional: How to do it with an static function?

$b = Foo::Create_Bar($db_for_foo,$db_for_bar);

What am I missing?

(Additional 2:

 $f = new Foo($db); //Dependency Injection ($db is saved in $f, and is the database-link for example)
 $f->Create_Bar($db_for_bar); //OK - No Problem

but what if "Create_Bar" is called inside "Foo"

 $this->Create_Bar(???) //Where does the $db_for_bar come from?

)

  • 写回答

1条回答 默认 最新

  • douhui8025 2013-10-15 07:49
    关注

    This is a good solution, I don't understand why you say it doesn't work:

    class Foo{
         ...
         public static function Get_By_ID($db,$id)
         {
            return new Foo($db,$id,$class_variables,...);
         }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛