T1grOK
28.03.2017 - 15:24
Недавно обнаружил некоторую странность при выполнении математических операций в PHP.
Детали по ссылке
https://t1grok.net/2017/03/27/nepravilnaya-arifmetika-v-php/
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
28.03.2017 - 15:55
А если открыть доку и прочитать внимательно? Вот тут вот:
http://php.net/manual/ru/language.operators.precedence.phpЦитата |
Приоритет и ассоциативность оператора определяет только то, как группируется выражение, а не порядок его вычисления. Обычно PHP не указывает, в каком порядке вычисляются выражения и кода, который предполагает специфичный порядок вычисления следует избегать, потому, что поведение может меняться в разных версиях PHP или в зависимости от окружающего кода. |
<?php
$a = 1;
echo $a + $a++;
$i = 1;
$array[$i] = $i++;
?>
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
T1grOK
28.03.2017 - 16:07
Как по мне это ненормально. Если язык предоставляет определенные возможности, то их можно и нужно использовать. Если какая либо возможность является исключением, то и результат всегда должен быть "исключительным", а не так могу выдать такой результат, а могу эдакий ("как захочу").
Анархия получается.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
28.03.2017 - 16:47
Может это и не правильно, что так отрабатывает. Но по "твоей" ссылке написано
Цитата |
После пришел к выводу, что рекурсивные вызовы в PHP при определенных условиях работают «с кривизной» |
хотя, замечу,
рекурсивные вызовы тут вовсе не при чем!!! Проблема только в неправильном использовании автором автоинкрементных операторов.
Такой вывод очень похож на одну шутку

Типа как из новостей:
Цитата |
Британские ученые доказали, что таракан слышит лапами. Посадили таракана на стол, стукнули по столу - таракан убежал. ОК. Оторвали таракану лапы, посадили на стол. Стучали-стучали.... Таракан не убежал. Вывод британских ученых: "таракан слышит ногами" |
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Invis1ble
28.03.2017 - 16:54
Недетерминированное поведение - это, конечно, печально. Но я для себя уже давно вывел простое эмпирическое правило написания кода, звучит оно примерно так: "не вы*бывайся!"

Тем более, что читабельность кода, как правило, ухудшается.
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
T1grOK
28.03.2017 - 16:55
Цитата (sergeiss @ 28.03.2017 - 12:47) |
хотя, замечу, рекурсивные вызовы тут вовсе не при чем!!! |
Я далееи написал, что проблема не в рекурсии...
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Эли4ка
29.03.2017 - 05:59
А собственно зачем вам именно такой код?
T1grOK
29.03.2017 - 09:44
Цитата (Эли4ка @ 29.03.2017 - 01:59) |
А собственно зачем вам именно такой код? |
Именно такой возможно и незачем, но есть множество других примеров, в которых может проявляться похожее поведение. Здесь даже дело не в практическом использовании, а в самом факте существования недетерминированности в данном контексте.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
brevis
29.03.2017 - 10:05
Этот вопрос давно будоражит умы:
++i + ++i.
_____________
Чатик в телеге
Эли4ка
30.03.2017 - 18:48
Просто когда извращаешься вот таким способом и получается черти что. Не делайте из математики херню и все. Нет такого выражения, которого нельзя заменить чисто математическим и адекватным. А ваши эти инкременты, детерминанты - это ни к чему.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.