我在我的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’的静态访问。
在这里使用日志类的正确方法是什么?
我跟踪了Laravel文档,但是不知道如何纠正它,而phpmd文档由于我的知识有限而不帮助我。
谢谢!
发布于 2019-11-29 13:25:02
根据关于静态访问的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.');
}
}因此,根据偏好,可以禁用该规则,也可以在外观上使用依赖注入。
https://stackoverflow.com/questions/59104432
复制相似问题