Знакомые с php side-effects, подскажите плз (вопрос по логике дублеловки)

Вот есть (file author.inc lines 539-542) такой кусочек кода:

    if (1*$oldver >= 1*$ver) {
      unlink ($f);
      return $r . " Версия не лучше: ".bl($BookId)." $oldver:$ver<br>";
    }

Смысл операции 1*$ver если я правильно понимаю - сказать php что переменная $ver именно численная, а не строка. Вопрос: а не может ли такого быть, что (как иногда бывает в C) что результатом 1*$ver станет integer, даже если $ver содержало 1.1 ?

Комментарии

Может.
За все версии ПХП не скажу, но в 3 так и было.
Мне пришлось довольно навороченную процедуру ваять для корректного преобразования в число.
Что-то типа

<?php
function a2i($s) {
 
$t0 = trim($s); if(!$t0) return 0;
 
$t1 = "1".$t0;
 
$t2 = 0 + $t1;
  return (
$t2 - 10*strlen($t0));
}
?>

jno написал:
Может.

Блин... :((

Хочу напомнить, что давеча прекратили поддержку четвёртого пых-пыха.

а зачем не $ver+0? и никто ничего не теряет, и получаем число.

Это не мой код.

Кажется, отбой пока. Кажется, работает этот код нормально. По крайней мере при $oldver=1.0 и $ver=1.001 сравнение происходит корректно. А более экзотические варианты когда $oldver=1 или $oldver undefined меня пока не интересуют.

<?php
   
if (floatval ($oldver) >= floatval ($ver)) {
     
unlink ($f);
      return
$r . ' Версия не лучше: ' . bl($BookId) . ' ' . $oldver . ':' . $ver . '<br>';
    }
?>

Спасибо. Есть специальная floatval, значит. Правда, тесты показали, что этот код и так работает. Но все равно спасибо, конечно.

X