Приведение типов- хорошо или плохо?

master_x

Pitavale XXI wieku
Приведение типов- хорошо или плохо?

Известно, что в PHP остутсвует строгая типизация. Потому, программистам которые пересели на пхп с другого языка немного трудновато. В связи с этим вопрос: является ли приведение типов плохой практикой? Чтобы было понятней, случай: переменная $_GET['id'] должна быть целым числом, в результате (int)$_GET['id'] получаем то, что надо, если вместо числа там строка, то переменная приводится к нулю (дефолтное значение). Чем плох данный подход?
 

baev

‹°°¬•
Команда форума
А если «там» не строка?

В общем, RTFM, обращая внимания на «Предостережения», типа:
Предостережение

Для других типов поведение преобразования в целое не определено. В настоящее время поведение такое же, как если бы значение сперва было преобразовано в булев тип. Однако не полагайтесь на это поведение, так как он может измениться без предупреждения.
(http://php.rinet.ru/manual/ru/language.types.integer.php)
По мне, надёжней использовать связку isset() и settype().
 

master_x

Pitavale XXI wieku
baev
случай такой, что там может быть только строка или число.
isset() используется в любом случае.
 

master_x

Pitavale XXI wieku
baev
в вашем случае я как раз-таки могу принять "001" за число, мне это не вредит. Я имел в виду строку "hello" к примеру.
 

ForJest

- свежая кровь
master_x
Я уже давно пользуюсь конструкцией
(int)@$_GET['id'], если тебя интересует практическая сторона вопроса. Никаких недостатков я до сих пор в ней не выявил :).
@ стоит для подавления нотисов.
 

master_x

Pitavale XXI wieku
ForJest
собственно то же самое что и я делаю. только у меня не @ а isset.
 

ForJest

- свежая кровь
master_x
Угу. Я вот таким образом убрал isset, меньше писать, а смысл тот же семантический в итоге что и конструкция
isset($_GET['id'])?(int)$_GET['id']:0;
К тому же isset не спасает от нотиса в случае, когда, в id передан массив :).
 

sage

Новичок
является ли приведение типов плохой практикой?
Нет
переменная $_GET['id'] должна быть целым числом
если вместо числа там строка
А откуда там может оказаться строка? Если $_GET['id'] должна быть целым числом, значение и должно быть целое число. Если по каким-то причинам значение - строка, например, "hello", "гнать" таких посетителей с сайта, чтоб в адресной строке ничего не писали.
 
Сверху