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 容器使用配置的方式加载类的主要内容,如果未能解决你的问题,请参考以下文章