Примите два разных экземпляра модели в качестве аргумента функции php - PullRequest
2 голосов
/ 07 июня 2019

Я пишу вспомогательную функцию, чтобы проверить, присутствует ли какая-либо адресная информация в моей базе данных, проверяя, не равно ли какое-либо из соответствующих полей нулю.

Итак, у меня есть две модели, которые мне нужныпринять в качестве аргумента в функции.

  • Приложение \ Клиент
  • Приложение \ Поставщик

Передаваемая переменная может быть любой.

Для функции, которая должна принимать только один тип модели, я могу просто сделать это:

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 Ответ

4 голосов
/ 07 июня 2019

Существует два подхода: если имеет смысл наследование, вы можете расширить родительскую модель и объявить ее в качестве типа параметра. Это будет проверено во время выполнения и выдаст ошибку, если вы передадите методу неправильный тип.

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) {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...