PHPMD抱怨静态使用“ Log”

时间:2019-11-29 12:03:39

标签: php laravel phpmd

我在Laravel项目中添加了 phpmd

现在我要谈谈静态使用“日志”的问题。

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文档没有帮助我。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

  

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

但是,由于they can be mocked,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.');
    }
}

因此,根据喜好,可以禁用该规则,也可以对立面使用依赖项注入。