Strict types
| declare(strict_types=1) | |
| Scalar declarations | |
| Return types | |
| Union | |
| nullable and never |
declare(strict_types=1)
By default PHP coerces scalar arguments, so a string with digits can slip into an int parameter.
One declare at the top of the file switches that file to exact checks.
It must be the first statement in the file, before any other code or output.
declare(strict_types=1); function doubleInt(int $n): int { return $n * 2; } echo doubleInt(21);
Scalar declarations
Declare int, float, string,
and bool for every scalar input. Readers see the contract at once,
and the engine rejects wrong types early.
In strict mode passing a numeric string to an int parameter throws a TypeError.
declare(strict_types=1); function greet(string $name, int $age): string { return $name; } echo greet("Ada", 36);
Return types
A return type guarantees what the caller receives. Add it after a colon behind the parameter list.
void means nothing is returned, which keeps command style functions honest.
Mismatched returns fail fast instead of leaking bad data downstream.
function loadIds(): array { return [1, 2, 3]; } function logLine(string $line): void { echo $line; }
Union
When a value can legitimately be one of several types, list them with a vertical bar.
This is clearer than leaving the parameter untyped.
Keep unions short. Long lists often signal that the function does too much.
function toNumber(int|float $value): int|float { return $value; } var_dump(toNumber(5)); var_dump(toNumber(5.5));
nullable and never
A question mark marks a type as nullable, so null joins the allowed set.
Use it for optional results like a missing record.
The never return type marks functions that never return at all because they
always throw or exit. It documents terminal paths for readers and static analyzers.
function findName(int $id): ?string { if ($id < 1) { return null; } return "Ada"; } function abort(string $msg): never { throw new RuntimeException($msg); }
Next: Closures and arrow functions
Article author: Arthur Isaev