我在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文档没有帮助我。
谢谢!
答案 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.');
}
}
因此,根据喜好,可以禁用该规则,也可以对立面使用依赖项注入。