#php #arrays #casting
#php #массивы #Кастинг
Вопрос:
Я имею дело с очень странной проблемой работы с мусором при переборе переменной, которая была преобразована в массив
$arr = (array)$var; // problem
$arr = array($var); // ok
Первый метод, похоже, отлично работает со значениями с целыми числами, но не со строками. Есть ли какая-либо документированная разница и есть ли в php real
приведение?
Проблема связана с lavarel 4, источниками базы данных, функцией в строке 704
Комментарии:
1. Можете ли вы сказать, какое значение $var для двух примеров?
2. Во-вторых, это не приведение к типу, вы создаете массив из одного элемента, а значение элемента равно $var .
3. Это ошибка PHP — исправлена в PHP 5.2.7 и выше. Какую версию вы используете?
4. Ваша проблема не может быть переформулирована: ideone.com/cnkOqV
5. Первым шагом для предоставления дополнительной информации может быть указание нам, что
garbage
это такое. И какое входное значение обеспечивает этоgarbage
.
Ответ №1:
Если $var
это скаляр, документально подтверждено, что обе строки выполняют одно и то же:
Для любого из типов: integer, float, string, boolean и resource, преобразование значения в массив приводит к массиву с одним элементом с нулевым индексом и значением скаляра, который был преобразован. Другими словами, (array)$scalarValue — это точно то же самое, что и array($scalarValue).
http://www.php.net/manual/en/language.types.array.php#language.types.array.casting
Комментарии:
1. итак, это означает, что это ошибка, я бы ожидал такой функциональности
2. @Ulterior: да, если у вас есть воспроизводимый случай ошибки, не стесняйтесь отправлять его по адресу bugs.php.net . Обе строки должны делать то же самое.
Ответ №2:
Существует два способа приведения переменной в PHP к определенному типу.
- использование функции settype()
- используя (int) (bool) (float) и т. Д
Дополнительная информация: http://www.electrictoolbox.com/type-casting-php /
Комментарии:
1. settype приводит к тому же мусору при итерации по массиву