Ответ
Тип mixed появился в PHP 8.0 и означает, что параметр, возвращаемое значение или свойство может принимать любое значение любого типа. Это эквивалентно отсутствию проверки типа, но явно указывает на такую возможность в сигнатуре.
Пример использования:
function processInput(mixed $input): void {
if (is_string($input)) {
echo "String: $input";
} elseif (is_array($input)) {
print_r($input);
}
}
Ключевые особенности:
- Заменяет старые аннотации
@param mixedв PHPDoc - Совместим со строгим режимом типизации (
declare(strict_types=1)) - Полезен для legacy-кода или функций, которые действительно должны работать с любыми типами
- Не является union-типом, это отдельный специальный тип
Использование mixed делает код более явным и документированным, чем отсутствие типа.
Ответ 18+ 🔞
Слушай, вот это реально полезная штука, этот mixed. Раньше-то как было? Писал в комменте @param mixed и молился, чтобы в функцию не прилетело чего-то совсем уж ебанутого. А теперь можно просто в коде указать, и всё — формально, красиво, и компилятор не орёт.
По сути, это такой официальный способ сказать: «Чувак, сюда можно пихать что угодно — строку, число, массив, объект, null, да хоть ресурс какой-нибудь. Я со всем разберусь, или, по крайней мере, попробую». Это пиздец как удобно для всякого старого легаси-кода, который писался, когда про типы только мечтали.
Вот смотри на пример, тут всё понятно:
function processInput(mixed $input): void {
if (is_string($input)) {
echo "String: $input";
} elseif (is_array($input)) {
print_r($input);
}
}
Видишь? Функция готова принять что угодно. Дальше внутри уже твои дела — проверяй is_string, is_int, делай что хочешь. Главное, что на входе теперь не тёмный лес, а явно объявленная вседозволенность.
А ещё круто то, что он не union-тип. То есть это не string|int|array.... Это именно отдельный, специальный тип, который означает «любой тип, я не шучу». И он отлично дружит со строгим режимом declare(strict_types=1) — не надо его выключать.
Так что, если у тебя есть функция, которая реально должна работать со всем на свете, или ты рефакторишь старый код и пока не хочешь заморачиваться с нормальными типами — mixed твой лучший друг. Просто пишешь его и живёшь спокойно, без чувства вины, что ты какой-то распиздяй. Всё по правилам, всё документировано. Ёпта, удобно же!