php intval или int
Сначала зададим то, что будем приводить:
Встречайте! Это единица, записанная как текст. С пробелом до неё и после неё. После приведения типов она должна стать настоящим числом.
Поставим приведение типов в цикл:
Разница между этими временными метками будет соответствовать времени выполнения (int)$a. Чтобы результат не был случайным, поставим этот код в цикл. К примеру, 1 000 000 повторений даст более-менее среднюю величину времени приведения типа. То же самое сделаем с IntVal($a)
Поделим среднее время выполнения IntVal($a) на (int)$a. И получаем, что (int)$a примерно в 1.05-1.5* раза быстрее, чем IntVal($a).
* Простите меня грешного! С расчётом среднеквадратичного отклонения не заморачивался. Считал только среднее.
Чистота эксперимента
Проверку делаю на сервере с установленным Apache, PHP как модуль (v. 7.0.14) и BitrixEnv (v. 7.0.0). Битрикс окружение идёт со средствами ускорения PHP (OpCache, APCu). Поэтому результат можно назвать нечистым. Но применимым к серверам на BitrixEnv.
Чтобы провести чистый эксперимент, необходимо отключить все сторонние ускорители. Но подозреваю, что результат будет идентичный. Поэтому мне лень. Ведь сервер будет работать в том состоянии, в котором он находится. И вряд ли я когда-нибудь буду отключать ускорители.
Вывод
(int) до 50% быстрее, чем IntVal().
IntVal() стоит использовать только ради второго параметра. Который хз что делает и никто им не пользуется 😉
есть ли какая-то особая разница между intval и (int)?
есть ли какая-либо особая разница между двумя строками кода выше?
7 ответов
intval() может быть прошел базовый из чего конвертировать. (int) не может.
одна вещь, чтобы отметить о разнице между (int) и intval() : intval() обрабатывает переменные, которые уже int s и float s как не нуждающийся в преобразовании, независимо от базового аргумента (по крайней мере, с PHP 5.3.5). Это поведение не является самым очевидным, как отмечено в комментарии на странице PHP doc и бесстыдно повторил здесь:
Я думаю, что есть по крайней мере одна разница : с intval, вы можете указать, какая база должна использоваться в качестве второго параметра (база 10 по умолчанию):
извините за некроинг, я просто хотел посмотреть, влияет ли / как PHP7 на этот вопрос:
как вы можете видеть, кастинг определенно быстрее, по почти 100%
но мне пришлось увеличить количество циклов до 100 миллионов, прежде чем разница была вопросом секунд, что примерно тогда, когда я действительно начал бы заботиться о производительности, в большинстве случаев.
поэтому я буду придерживаться использования intval функция, потому что кастинг-это немного языковой магии, которая происходит. Даже если intval использует кастинг за кулисами, если должна быть обнаружена ошибка с кастингом, и по какой-то причине она не может быть исправлена (обратная совместимость?), то они могли бы по крайней мере исправить intval выполнять это долг.
обновление (PHP 7.1 + дополнительный случай):
, что intval делает ли это простое приведение не является базовым преобразованием:
Если база 10, хотя, intval должно совпадать с приведением (если вы не собираетесь быть придирчивым и упомянуть, что один делает вызов функции, а другой нет). Как отмечено на man page:
применяются общие правила целочисленного литья.
intval
(PHP 4, PHP 5, PHP 7, PHP 8)
intval — Возвращает целое значение переменной
Описание
Список параметров
Скалярное значение для конвертации в целое
Основание системы счисления для преобразования
Возвращаемые значения
Целое значение переменной value в случае успешного выполнения, или 0 в случае неудачи. Для пустых массивов возвращается 0, для непустых возвращается 1.
Для строк функция скорее всего вернёт 0, хотя это зависит от первого символа в строке. Применяются общие правила преобразований в целые.
Примеры
Пример #1 Примеры использования intval()
Следующие примеры приведены для 32-х битной системы.
Примечания
Параметр base применяется только в том случае, если параметр value является строкой.
Смотрите также
User Contributed Notes 17 notes
It seems intval is interpreting valid numeric strings differently between PHP 5.6 and 7.0 on one hand, and PHP 7.1 on the other hand.
echo intval ( ‘1e5’ );
?>
will return 1 on PHP 5.6 and PHP 7.0,
but it will return 100000 on PHP 7.1.
intval converts doubles to integers by truncating the fractional component of the number.
When dealing with some values, this can give odd results. Consider the following:
print intval ((0.1 + 0.7) * 10);
This will most likely print out 7, instead of the expected value of 8.
For more information, see the section on floating point numbers in the PHP manual (http://www.php.net/manual/language.types.double.php)
Also note that if you try to convert a string to an integer, the result is often 0.
However, if the leftmost character of a string looks like a valid numeric value, then PHP will keep reading the string until a character that is not valid in a number is encountered.
«101 Dalmations» will convert to 101
«$1,000,000» will convert to 0 (the 1st character is not a valid start for a number
«1.4e98 microLenats were generated when. » will convert to 1.4e98
Also note that only decimal base numbers are recognized in strings.
«099» will convert to 99, while «0x99» will convert to 0.
print intval (77, 8); // Prints 77
print intval (’77’, 8); // Prints 63
Как преобразовать в число строку в PHP?
Очень часто нам приходится работать с числовой информацией, которая представлена в виде строк. В результате возникает необходимость в преобразования строки в число. Язык программирования PHP предлагает нам несколько возможностей для этого. Речь идёт о специальных встроенных в PHP функциях, значительно облегчающих программисту задачу преобразования строки в число. Давайте их рассмотрим.
Преобразование строки в число функцией intval()
Представим, что у нас есть строка, включающая в себя один символ — «2». Вот, как будет выглядеть PHP-код преобразования этой строки в число с помощью встроенной функции intval() :
На выходе получим 2, но уже в виде числа, а не строки.
Остаётся добавить, что вышеописанная функция работает в PHP разных версий: 4, 5, 7+.
Преобразование строки в число путём приведения типов
Возможность приведения типов есть во многих языках программирования, и PHP исключением не является. В PHP мы тоже можем поменять тип переменной, применив для этого синтаксис приведения типов: (int)$variable, (float)$variable. Посмотрим, как это выглядит в коде:
Результатом будет следующий вывод:
Приведение типов можно успешно использовать и в PHP 5 и в PHP 7+.
Преобразование строки в число с помощью settype()
В принципе, вышеперечисленных способов вполне хватит для выполнения преобразования строки в число в PHP. Если же хотите знать больше, ждём вас на наших курсах!
Php intval или int
Опытный
Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва
Репутация: 9
Всего: 13
Новичок
Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007
Репутация: 22
Всего: 32
Бывалый
Профиль
Группа: Участник
Сообщений: 212
Регистрация: 11.3.2008
Где: Каспий
Репутация: 5
Всего: 5
А отличие intval в возможности передавать нужное основание системы счисления для конвертации.
Призрачный
Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов
Репутация: 10
Всего: 71
Опытный
Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011
Репутация: 5
Всего: 11
Эксперт
Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004
Репутация: 17
Всего: 45
Цитата |
а что лучше использовать использовать? Или что более корректно использовать? |
сёгун-сан
Профиль
Группа: Участник
Сообщений: 290
Регистрация: 8.6.2006
Где: Кишинёв
Репутация: 9
Всего: 11
Призрачный
Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов
Репутация: 10
Всего: 71
Цитата($дмитрий @ 29.6.2011, 16:09 |
Удобнее писать так (int)$var, потому как запись короче |
Ботокодер
Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг
Репутация: нет
Всего: 33
Цитата(Gold Dragon @ 29.6.2011, 20:37 |
Очень не удобно и не читаемо.. Это выбивается из общего правила.. Если это функция то параметры должны идти в скобках.. smile И привычнее intval($qqq) чем (int)$qqq |
Просто пингвин
Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007
Где: Мад@гаскар
Репутация: 46
Всего: 140
Призрачный
Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов
Репутация: 10
Всего: 71
В экстазе
Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай
Репутация: 1
Всего: 5
больше похоже на приведение типов в C («Си»), и не смотря на то, что «PHP обладает Си-подобным синтаксисом» на мой взгляд
И сказал Бог: «Тогда я построю свой мир с блэк-джеком и шлюхами!»
Ф топку Ubuntu, Debian наше фсё!
[ Время генерации скрипта: 0.1328 ] [ Использовано запросов: 21 ] [ GZIP включён ]
|