我开始使用Auraphp进行依赖注入,并编写了一个示例应用程序。它正如期而至,但是,我不确定我是否正确地使用它。有人能让我知道我做得对吗,或者有没有更好的方法使用灵气?
这是我的public/index.php:
use Aura\Di\ContainerBuilder;
use MyPackage\Base\Service;
use MyPackage\Base\Flow;
require_once dirname(__DIR__) . '/vendor/autoload.php';
$builder = new ContainerBuilder();
$di = $builder->newInstance();
$di->set('baseService', new Service);
$di->set('baseFlow', new Flow);
$service = $di->get('baseService');
$flow = $di->get('baseFlow');
$service->showMessage();
$flow->showMessage();这是src/Service.php (src/Flow.php类似):
<?php
namespace MyPackage\Base;
class Service
{
public function showMessage()
{
echo "Inside service";
}
}我主要想知道我是否受益于依赖注入的优势。此外,使用Aura这种方式不是内存/CPU/时间重载吗?
任何想法都将不胜感激。
发布于 2019-12-07 17:44:20
$di->set('baseService', new Service);
$di->set('baseFlow', new Flow);在本例中,您已经在实例化类。但在大多数情况下,您可以使用延迟加载。在这种方法中,插入所需的必要依赖关系也会使您受益。所以你的代码会变成
$di->set('baseService', $di->lazyNew('Service'));
$di->set('baseFlow', $di->lazyNew('Flow'));示例摘自:http://auraphp.com/packages/3.x/Di/services.html。
假设您的Flow类有一些依赖项,您可以通过构造器注入或整定器注入来完成。
class Flow
{
public function __construct(Service $service)
{
$this->service = $service;
}
public function setSomething(Something $something)
{
// other dependency
}
public function showMessage()
{
echo "Inside service";
}
}现在你可以定义
$di->params['Flow']['service'] = $di->lazyNew('Service');
$di->setters['Flow']['setSomething'] = $di->lazyNew('Something');您可以看到更多的文档中的示例。DI有时会觉得神奇,但如果你正确理解它,它将帮助您快速调试。
我注意到有人不喜欢答案。你可以自由地去做,但是提供一个更好的答案或者编辑答案,或者写一些可以改进的注释。
https://stackoverflow.com/questions/59187471
复制相似问题