Как получить определенный тип в функции?

#php #php-7

#php #php-7

Вопрос:

Я хочу использовать int только для суммы в $, но иногда я получаю double, поэтому я проверяю, является ли его int. Есть ли лучший способ сделать это? Моя проблема в том, что другой класс отправляет ему данные, и я хочу предотвратить, чтобы они не отправляли какой-либо тип .. возможно ли это?

мой код:

 function finTrian($amount, $source, $trian, $realTrian, $pos = -1)
{
   if(!is_int($amount))
      return;

  if($amount < $requiredAmount)
      return "E-1019";

  $totalTrian = ($trian * $realTrian) / self::T_FACTOR;
  

 }


 ?> 
  

У меня действительно возникли проблемы с этим, иногда приложение работает некорректно, и мне нужно найти проблему. Может кто-нибудь, пожалуйста, помочь мне с этим?

Спасибо!!!

Комментарии:

1. да, сэр, я использую php-7

Ответ №1:

Да, это возможно сделать..

Просто измените свой код, как показано ниже:

От:

 function finTrian($amount, $source, $trian, $realTrian, $pos = -1)
{
  if(!is_int($amount))
    return;

  if($amount < $requiredAmount)
    return "E-1019";
  

Для:

 function finTrian(int $amount, $source, $trian, $realTrian, $pos = -1)
{
  if($amount < $requiredAmount)
    return "E-1019";
  

параметр $amount будет преобразован в int, если это возможно. @Eiko

Типы были добавлены в php 7:

 bool      PHP 7.0.0
float     PHP 7.0.0
int       PHP 7.0.0
string    PHP 7.0.0
  

Комментарии:

1. Это будет работать только в php 7, тип int также добавляется в php 7

2. Спасибо вам обоим, Vural Acar, и не паникуйте, это просто очаровательная работа!!! Как я это пропустил…

3. Это не выполняет проверку типа. Он выполняет приведение! Таким образом, он не обеспечивает вызов функции с другими типами данных.

4. Правильно, спасибо, Эйко, на самом деле это было не то, что я улучшил.

Ответ №2:

Нет, нет способа избавиться от проверки типа.

Если вы укажете тип в функции, как в другом ответе:

 function finTrian(int $amount, $source, $trian, $realTrian, $pos = -1) { ... }
  

$amount параметр будет преобразован в int, если это возможно.

Поэтому вызов его с $amount = 3.8 помощью просто вызовет функцию с finTrian(3, ...)

Примечание: он будет приведен к 3, а не к 4. Это принципиально отличается от проверки типа, которую вы имели в своем вопросе!

Комментарии:

1. @Don’T Panic Хороший улов. Действительно ли это использует кого-либо (последовательно)?

2. Не уверен, но я рад, что он есть. В противном случае объявления типов были бы не так полезны, IMO.