PHPMD 抱怨 "Log" 的静态使用

PHPMD complains about static usage of "Log"

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

现在我对 "Log".

的静态用法有一个评论
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'.

中使用对 class '\Log' 的静态访问

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

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

谢谢!

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

Static access causes unexchangeable dependencies to other classes and leads to hard to test code. Avoid using static access at all costs and instead inject dependencies through the constructor. The only case when static access is acceptable is when used for factory methods.

但是 Laravel 门面可以被认为是静态 class 访问的有效案例,因为 they can be mocked.

我个人更喜欢依赖注入,而不是像 Log 这样的静态 classes。这样做会产生以下代码

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

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