--- title: > PHP types and assertions pubDate: 2023-08-20 permalink: >- archive/2023/08/20/php-types-and-assertions tags: - php --- Following yesterday's email about input validation, guard clauses and assertion libraries, these can be used to compliment PHP's native types and checking. For example: ```language-php function createJourney(string $from, string $to, int $duration): void { var_dump($from, $to, $duration); } ``` In this code, each parameter has a type, but there's no validation on the values. If I run this: ```language-plain createJourney('', '', -10); ``` I would get this output: ```language-plain string(0) "" string(0) "" int(-10) ``` This is probably not what you want. I expect `$to` and `$from` to be not empty and the duration to be greater than zero. ## Here's the thing I can use an assertion library or throw my own Exceptions if the values pass the type checks but aren't what I need. For example: ```language-php function createJourney(string $from, string $to, int $duration): void { Assert::stringNotEmpty($from); Assert::stringNotEmpty($to); Assert::positiveInteger($duration); var_dump($from, $to, $duration); } ``` Now, if an empty string or negative duration is passed - in my implementation or test code - an Exception will be thrown.