首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHPMD抱怨“日志”的静态用法

PHPMD抱怨“日志”的静态用法
EN

Stack Overflow用户
提问于 2019-11-29 12:03:39
回答 1查看 159关注 0票数 0

我在我的Laravel项目中添加了phpmd

现在我对“日志”的静态用法有一个评论。

代码语言:javascript
复制
namespace App\Http\Controllers;

use Log;

class MyController extends Controller
{
/**
 * Does something
 */
public function doSomething($var)
{
Log::info('Just began to to something.');
}

phpmd说:

避免在方法'doSomething‘中使用对类'\Log’的静态访问。

在这里使用日志类的正确方法是什么?

我跟踪了Laravel文档,但是不知道如何纠正它,而phpmd文档由于我的知识有限而不帮助我。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-29 13:25:02

根据关于静态访问的PHPMD文档

静态访问会导致与其他类不可交换的依赖关系,并导致难以测试代码。避免不惜一切代价使用静态访问,而是通过构造函数注入依赖项。静态访问可接受的唯一情况是用于工厂方法。

然而,Laravel外观可以被认为是静态类访问的一个有效案例,因为他们可以被嘲笑

就我个人而言,比起使用像Log这样的静态类,我更喜欢依赖注入。这样做将导致以下代码

代码语言:javascript
复制
namespace App\Http\Controllers;

use Log;
use Psr\Log\LoggerInterface;

class MyController extends Controller
{
    /**
     * @var LoggerInterface
     */
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    /**
     * Does something
     */
    public function doSomething($var)
    {
        $this->logger->info('Just began to to something.');
    }
}

因此,根据偏好,可以禁用该规则,也可以在外观上使用依赖注入。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59104432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档