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

标签 php laravel laravel-5 laravel-5.8

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

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

  • 应用\客户
  • 应用\供应商

传递的变量可以是其中之一。

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

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。

最佳答案

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

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 block 中声明它。这不会在运行时检查类型,主要用于类型提示、文档和静态分析工具。

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

关于php - 接受两个不同的模型实例作为函数参数 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56496711/

相关文章:

php - 更新了一列,但 'published_at' 列也更新了? [拉拉维尔 5]

php - Laravel 5 中的自定义验证器

php - python中php的print_r()相当于什么?

php - 翻译 laravel 中输入字段的名称

javascript - 如果刷新或选项卡关闭,Dropzone 将删除文件

php - Laravel 命名路由不起作用

laravel - 依赖注入(inject)在 Laravel 5.2 的迁移文件中不起作用

php - SQLite3 PHP "Update"- 准备好的查询的结果

php - PHP中有 "Java Bean"之类的技术吗?

php - 如何有条件地覆盖 Eloquent 模型中的值?