0

我将phpmd添加到我的 Laravel 项目中。

现在我对“日志”的静态用法有一点意见。

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”的静态访问。

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

我遵循了 Laravel 文档,但不知道如何更正它,由于我的知识有限,phpmd 文档对我没有帮助。

谢谢!

4

1 回答 1

2

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

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

然而,Laravel 外观可以被认为是静态类访问的有效案例,因为它们可以被模拟

就个人而言,我更喜欢依赖注入而不是使用静态类,如Log. 这样做会产生以下代码

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.');
    }
}

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

于 2019-11-29T13:25:02.190 回答