2016-05-11 5 views
2

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

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

function addTwo(int $a, int $b): int { 
    return $a + $b; 
} 

Ожидаемые аргументы должны быть целыми числами, и мы будем надеяться получить целое значение от функции, однако это всегда гарантировано или должна ли быть дальнейшая проверка осуществляется в рамках функции, такие как is_int обеспечить оба аргумента являются целыми числами ?

+1

Почему бы вам не попробовать его и посмотреть? –

+0

Я сделал несколько тестов, но мне интересно, всегда ли это гарантировано или есть некоторые варианты использования, которые могут отличаться и возвращать недопустимые результаты. – mhvvzmak1

+1

Он вернет захватывающую ошибку, если то, что вы предоставили функции, не является целым числом, поэтому вы будет либо иметь ошибку, либо будет возвращен int. – skrilled

ответ

3

Это зависит от условий. Например, в вашем примере для переноса строк не удастся, но пропуск float - без проблем, он будет безшовно преобразован в int.

Вы должны написать declare (strict_types = 1);

strict_types = 1 может применяться только к файлу, который прямо объявляет его на первой строке, никоим образом не обходясь этим.

Строгое типирование также влияет на декларации типа возврата. В режиме по умолчанию возвращенные значения будут принудительно введены в правильный тип , если они еще не относятся к этому типу. В сильном режиме возвращаемое значение должно быть правильного типа, иначе TypeError будет выбрано .

Returning values

+0

Итак, просто для того, чтобы уточнить, была ли строка strict_types объявлена ​​как истина внутри файла, моя функция сразу же не работает при некорректном вызове аргумента, означающем, что она не будет выполнять какую-либо функцию? Основная причина, по которой я особенно заинтересован в этом, состоит в том, что я бы предпочел, чтобы функция сработала с самого начала и выбросила ошибку типа, а не наполовину через эту функцию, если она уже выполнила определенные задачи с использованием недопустимых типов данных. – mhvvzmak1

+0

Тело функции не будет выполняться, если при обработке аргументов возникает ошибка типа. – Andrea