接受两个不同的模型实例作为函数参数php

时间:2019-06-07 14:55:43

标签: php laravel laravel-5 laravel-5.8

我正在编写一个辅助函数,通过检查任何相关字段是否不等于null来检查数据库中是否存在任何地址信息。

因此,我有两个模型需要在函数中作为参数接受。

  • App \ Customer
  • App \ Supplier

传递的变量可以是一个。

对于只接受一种模型的函数,我可以这样做:

function check_for_address_info(App\Customer $customer) {
    // other unrelated stuff
}

是否可以接受两个模型,还是必须通过执行以下操作在功能中手动检查它:

function check_for_address_info($param) {
  if(!is_a($param, 'App\Customer' || !is_a($param, 'App\Supplier')) {
    // not an instance of either model
    return false;
  }

  // do stuff as normal
}

关于如何接受两个不同模型作为函数参数的任何想法?

我正在使用Laravel 5.8。

1 个答案:

答案 0 :(得分:4)

有两种方法,如果在继承方面有意义,则可以扩展父模型并将其声明为参数的类型。如果您将错误的类型传递给方法,则会在运行时检查该错误并提供错误消息。

public class Profile extends Model {
}

public class Customer extends Profile {
}

public class Supplier extends Profile {
}

function check_for_address_info(App\Profile $customerOrSupplier) {
}

在弱类型语言中,通常具有通用的参数。 PHP解决此问题的方法是,您可以在PHP Doc块中声明它。这不会在运行时检查类型,主要用于键入提示,文档和静态分析工具。

/**
 * @parameter \App\Customer|\App\Supplier $customerOrSupplier
 **/
function check_for_address_info($customerOrSupplier) {
}