В чем причина кастинга в php? - PullRequest
6 голосов
/ 18 марта 2011

Я видел это в некоторых сообщениях:

$num = "5";
if(((int)$num) < 4){ ...}

есть ли причина использовать "5" как int или так же хорошо сказать:

if($num < 4){ ...}

потому что я проверил его с помощью своего кода:

echo $num + 4; //outputs 9
echo (int)$num + 4;//also outputs 9

Обновление: Мой вопрос касается кастинга в целом, выше приведены только один или два примера.

Обновление 2: сразу же тип ручного жонглирования php

<?php
$foo = "0";  // $foo is string (ASCII 48)
$foo += 2;   // $foo is now an integer (2)
$foo = $foo + 1.3;  // $foo is now a float (3.3)
$foo = 5 + "10 Little Piggies"; // $foo is integer (15)
$foo = 5 + "10 Small Pigs";     // $foo is integer (15)
?>

^^^^ почему происходят эти последние 2 вещи?

Ответы [ 3 ]

7 голосов
/ 18 марта 2011

В упомянутых вами случаях нет действительно веских причин.Это связано с тем, что PHP не только является динамически типизированным языком, но и используемые операторы не чувствительны к типу.

Однако приведение также имеет много полезных применений.В случае (int) вы можете разыграть, чтобы убедиться, что вы всегда используете целое число во время ваших операций.Кроме того, заблаговременное приведение, вы избавляете PHP от необходимости непрерывно вводить жонглирование позже.

Редактировать из-за вопроса edit (rev4)

Последние два элементапроисходит потому, что PHP попытается принудительно ввести строку в целое число во время математической операции.Таким образом, он разбирает строку как число.Как только ему не удается найти действительное целое число, возвращаются найденные номера.

По сути, в начале строки найдите все, что соответствует целочисленному / числовому формату чисел .Как только что-то перестает соответствовать этому формату, верните то, что у вас есть.Если первый символ не может соответствовать формату, return 0;.

Для лучшего объяснения читайте: http://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting

2 голосов
/ 19 марта 2011

Все, что я здесь прочитал, звучит вполне разумно, поэтому я не буду перефразировать это. Вместо этого я приведу два примера, где я довольно часто использую приведение типов в PHP:

  1. Предоставление API и попытка возврата правильных типов в различных форматах обычно требуют явного ввода каждого возвращаемого значения. Например, если я возвращаю какой-то смешанный массив данных через XML_Serializer или XML-RPC, и я не выполняю правильное приведение целых чисел / чисел с плавающей запятой, они будут возвращены в виде строк, что вызывает все проблемы для людей, использующих строго типизированные языки, пытающиеся потреблять API. Однако я не могу говорить о том, как SOAP + WSDL справится с этим, поскольку я с ним не связывался.

  2. Преобразование возвращаемых значений в массивы в случаях, когда библиотека (или наш код) возвращает либо массив, либо ноль, и мы не можем / не хотим его изменять. Как правило, это делается исключительно для предотвращения предупреждений, которые вы получаете, когда не массив передается в структуру или метод управления массивом.

1 голос
/ 18 марта 2011

Вам не нужно приводить при выполнении арифметических операций, потому что PHP сделает это неявно. У меня никогда не было случая, когда неявное приведение по умолчанию было не тем, что я хотел. На самом деле, приведение редко актуально в PHP.

Приведение, которое я выполняю чаще всего, - это явное преобразование строки в целое число (или число с плавающей точкой) в назначении, когда я знаю, что переменная будет использоваться во многих математических операциях.

Это полезное чтение:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...