User::class 和新用户之间的区别

Difference between User::class and new User

我正在使用 Laravel 8。我想知道 new User()User::class 之间的区别,因为我在使用 new User().

时遇到问题

这是场景,

我有 UserServices class 我正在注射 UserRepository class

class UserServices
{
    private $userRepository;
    public function __construct(UserRepository $userRepository)
    {
        $this->userRepository = $userRepository;
    }

    public function findUserByEmail($email){
        return $this->userRepository->findUserByEmail($email);
    }

}

现在在服务提供商中,当我使用以下方式绑定 UserServices class 时,出现以下错误

ArgumentCountError: Too few arguments to function

$this->app->bind(UserServices::class, function($app){
    return new UserServices();
});

但是当我使用 UserServices::class 时它工作正常

$this->app->bind(UserServices::class);

为什么?

我知道 UserServices class 构造函数需要参数,那么为什么要使用 UserServices::class

//工作中 $this->app->bind(UserServices::class);

//不工作

$this->app->bind(UserServices::class, function($app){
    return new UserServices();
});

在第一种情况下,您提供了一个显式构造函数,该构造函数试图 return class 的一个实例,但没有正确执行。

在第二种情况下,您将其留给服务容器来确定依赖关系,inject them automatically 会正确执行。

如果您使用的是接口,则需要将接口与服务提供商中的相关class绑定。否则你不需要任何绑定