PHP 7 — смешанный тип PHP против любого Typescript любой

Я пробовал PHP mixed введите пользовательскую функцию, но эта ошибка поставила меня в тупик (пунктуация моя):

Ошибка типа: Аргумент 1 передан <FunctionName>() должен быть примером mixed, string дано.

Ниже приведен некоторый (пример) приведенный ниже код, который вызывает сообщение об ошибке и иллюстрирует то, чего я надеялся достичь. Ниже приведен некоторый TLDR с дополнительными пояснениями. Но в основном я видел mixed в качестве типа параметров некоторых родных функций PHP (например, is_string функция) и хотел сделать то же самое в пользовательской функции.

Как я могу явно указать, что параметр функции является множественным / смешанным / любым?

Код

<?php
function echoMixed(mixed $input) {
if (!is_array($input)) {
echo mixed;
} else {
// For arrays echo each element using recursive call.
foreach($input as $current) {
echoMixed($current);
}
}
}
echoMixed('test'); // <-- This results in the error.
echoMixed(['test1', 'test2']);
?>

TLDR

Я довольно новичок в PHP, но пробовал «новую» систему явных типов. Я использую PHP 7.x, но я думаю, что это было введено в PHP 5.0. Мне нравится система опциональной типизации языка TypeScript, и изначально предполагалось mixed работает так же, как и тип any в TypeScript. PHP документация по смешанному только усилило это предположение, потому что оно утверждает:

смешанный указывает, что параметр может принимать несколько (но не обязательно все) типов.

Но после получения этой ошибки кажется, что mixed это нечто совершенно другое. Это предназначено для массивов со значениями смешанного типа или что-то?

3

Решение

Чтобы достичь того, чего вы хотите, вам просто нужно оставить mixed и не указывайте тип подсказки. PHP делает НЕ иметь ключевое слово языка для явного указания аргумента могут быть разных типов.

Обратите внимание, что mixed Я назвал ключевое слово в документации, но это не «ключевое слово языка», а ключевое слово только в PHPDocs. То же самое касается array|object, number, voidи другие псевдотипы. Фактические типы, которые вы можете использовать в коде, называются primitives в PHP, см. ниже выдержки из документации.


Вот разрешенные типы и минимальная версия PHP для их использования:

Имя класса / интерфейсаPHP 5.0.0

самPHP 5.0.0

массивPHP 5.1.0

подлежащий выкупуPHP 5.4.0

BOOLPHP 7.0.0

поплавокPHP 7.0.0

ИНТPHP 7.0.0

строкаPHP 7.0.0

Предупреждение: integer а также boolean не может быть использован в качестве шрифтов

Источник: http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration


Примитивные типы PHP

строка Кусок текста неопределенной длины.

целое или целое число Целое число, которое может быть как положительным, так и отрицательным.

поплавок Вещественное или десятичное число, которое может быть положительным или отрицательным.

логическое или логическое Переменная, которая может содержать только состояние «true» или «false».

массив Коллекция переменных неизвестного типа. Можно указать типы элементов массива, подробнее см. Главу о массивах.
Информация.

ресурс Обработчик файла или другой системный ресурс, как описано в руководстве по PHP.

ноль Значение, содержащееся или возвращаемое, буквально равно нулю. Этот тип не следует путать с пустотой, которая является полным отсутствием
переменная или значение (обычно используется с тегом @return).

подлежащий выкупу Функция или метод, которые могут передаваться переменной, см. В руководстве по PHP для получения дополнительной информации об вызываемых объектах.

Ключевые слова (не родные для PHP)

смешанный Значение с этим типом может быть буквально любым; автор документации не может предсказать, какой это будет тип.

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

объект Объект любого класса возвращается,

ложь или правда Явное логическое значение возвращается; обычно используется, когда метод возвращает значение «ложь» или что-то значимое.

сам Объект класса, где этот тип использовался, если он унаследован, он все равно будет представлять класс, в котором он был первоначально определен.

статический Объект класса, где использовалось это значение, если он унаследован, он будет представлять дочерний класс. (см. позднее статическое связывание
в руководстве по PHP).

$ this- Этот точный экземпляр объекта обычно используется для обозначения свободного интерфейса.

Источник:
https://www.phpdoc.org/docs/latest/guides/types.html#primitives

7

Другие решения

Вы должны использовать $current использовать это foreach блок

0

По вопросам рекламы [email protected]