- Nullable
?T- значення типуTабоnull:?string. - Union
A|B(PHP 8.0) - будь-який з перелічених типів:int|string.?string- це скорочення дляstring|null. mixed(PHP 8.0) - будь-який тип, включно зnull. Явно каже: «тут справді що завгодно».- Intersection
A&B(PHP 8.1) - об'єкт, що реалізує всі перелічені інтерфейси.
function findUser(int|string $id): ?User
{
return is_int($id) ? User::find($id) : User::firstWhere('slug', $id);
}
Що варто знати:
- Union-тип змушує код усередині розрізняти варіанти (
is_int,instanceof). Якщо гілок стає багато, це сигнал, що функція робить дві різні речі. mixedне означає «тип не вказали»: він дозволяє все і забирає в аналізатора можливість допомогти. Використовуйте його лише там, де значення справді довільне - наприклад, у кеші.- Під
declare(strict_types=1)скалярні типи не приводяться:findUser('5')передасть рядок, а не число. - PHP 8.2 дозволив і DNF-типи:
(A&B)|null.