接收2种可能参数的功能

时间:2019-01-17 07:41:37

标签: php laravel laravel-5

我有一个用于创建用户的功能,但是我定义了两个模型“用户”和“演示用户”,所以我有两个不同的模型。

这些模型具有相似和不同的属性,但是例如,它们具有诸如“电子邮件”之类的常见属性。

该函数具有这种结构,我接收对象“ User”作为参数,但是我希望您接收对象“ User”或对象“ DemoUser”

public function createLogin(User $user)
{
...
}

我不知道这是否会成为注入依赖项的主题...

谢谢你,我在等待你的评论

4 个答案:

答案 0 :(得分:2)

仅在允许该方法同时接受User和DemoUser类型的问题上,您可以设置User和DemoUser都可以实现的Interface类。

希望有帮助。

答案 1 :(得分:0)

您可以尝试使用接口或抽象类来实现。创建一个接口并在两个模型中实现它,或者创建一个抽象类并从您的两个用户类扩展它。然后在传递参数时,使用接口或抽象类作为类型提示,例如

public function createLogin(UserInterface $user) {

}

答案 2 :(得分:-1)

您可以这样做,

public function createLogin($user)
{
    if (is_a($user, 'App\User')) 
    {
       // Create your user here     
    } 
    elseif(is_a($user, 'App\DemoUser'))
    {
     // create demo user here   
    }
}

答案 3 :(得分:-1)

一种方法是扩展具有createLogin方法的类,并使用以下方法重写该方法:

public function createLogin($user)
{
    if ($user instanceOf User) {
        parent::createLogin($user)
    }
    if ($user instanceOf DemoUser) {
        // Login logic for DemoUser
    }
}

*如果您有任何疑问,请告诉我