HttpServer 4 框架 IoC 容器使用配置的方式加载类

Posted 知其黑、受其白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpServer 4 框架 IoC 容器使用配置的方式加载类相关的知识,希望对你有一定的参考价值。

阅读目录

IoC 容器使用配置的方式加载类

官方文档:https://php-di.org/doc/getting-started.html

我们已经看到自动装配,这是 PHP-DI 自动计算出类所需的依赖项的时候。但是我们有 3 种方法来定义在类中注入的内容:

  • 使用自动装配
  • 使用注释
  • 使用PHP 定义

我们采用:使用注释

简单使用 DI 容器

目录结构,不存在的文件夹及文件需要创建。

D:\\dnmp\\www\\ttt\\test.php

<?php
require_once __DIR__."/vendor/autoload.php";

$builder = new DI\\ContainerBuilder();
$builder->addDefinitions(__DIR__."/app/test/beans.php");
$container = $builder->build();

$myuser = $container->get("myuser");
var_dump($myuser->getAllUsers());

D:\\dnmp\\www\\ttt\\app\\test\\beans.php

<?php
//var_dump(111);exit();
return [
    "mydb"=>function()
        return new \\App\\test\\MyDB("asfd");
    ,
    "myuser"=>function(\\DI\\Container $c)
        return new \\App\\test\\MyUser($c->get("mydb"));
    
];

D:\\dnmp\\www\\ttt\\app\\test\\MyUser.php

<?php
namespace App\\test;

class MyUser
    private  $myDB;
    public function __construct(MyDB $DB)
    
        $this->myDB = $DB;
//        $this->myDB = new MyDB(); // 主动实例化
    
    public function getAllUsers():array
        return $this->myDB->queryForRows("select * from users");
    

D:\\dnmp\\www\\ttt\\app\\test\\MyDB.php

<?php
namespace App\\test;

class MyDB
    private $db;
    public function __construct($conninfo)
    
        // todo
    
    public function queryForRows($sql)
        return ["user_id"=>1,"user_name"=>"zhangsan"];
    

第二种写法

beans.php

<?php
namespace App\\test;
//var_dump(111);exit();
//var_dump(MyDB::class);exit();//string(13) "App\\test\\MyDB"
return [
    // MyDB 在 test 目录下所以不用写 \\App\\test\\MyDB 方式。
    MyDB::class=>function()
        return new MyDB("asdf");
    ,
    MyUser::class=>function(\\DI\\Container $c)
        return new \\App\\test\\MyUser($c->get(MyDB::class));
    
];

test.php

<?php
require_once __DIR__."/vendor/autoload.php";

$builder = new \\DI\\ContainerBuilder();
$builder->addDefinitions(__DIR__."/app/test/beans.php");
$container = $builder->build();

$myuser = $container->get(\\App\\test\\MyUser::class);
var_dump($myuser->getAllUsers());
echo App\\test\\MyDB::class.PHP_EOL;

以上是关于HttpServer 4 框架 IoC 容器使用配置的方式加载类的主要内容,如果未能解决你的问题,请参考以下文章

spring在IoC容器中装配Bean详解

spring IOC容器中装配Bean(XML)

Spring框架学习[IoC容器高级特性]

HttpServer 1 框架Swoole混合秒杀

HttpServer 1 框架搭建 Swoole 环境和开发环境

String框架搭建的基本步骤,及从IOC容器中获取Bean