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绑定。否则你不需要任何绑定
我正在使用 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绑定。否则你不需要任何绑定