Я пробовал 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']);
?>
Я довольно новичок в PHP, но пробовал «новую» систему явных типов. Я использую PHP 7.x, но я думаю, что это было введено в PHP 5.0. Мне нравится система опциональной типизации языка TypeScript, и изначально предполагалось mixed
работает так же, как и тип any
в TypeScript. PHP документация по смешанному только усилило это предположение, потому что оно утверждает:
смешанный указывает, что параметр может принимать несколько (но не обязательно все) типов.
Но после получения этой ошибки кажется, что mixed
это нечто совершенно другое. Это предназначено для массивов со значениями смешанного типа или что-то?
Чтобы достичь того, чего вы хотите, вам просто нужно оставить 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
BOOL — PHP 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
Вы должны использовать $current
использовать это foreach
блок