[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Наткнулся на магию! (баг или фича - хз)...
kirik
Собственно может я туплю, но мне кажется такое поведение php несколько неправильным.

echo 6 . '-' . 6;

выводит 6-6 пока всё хорошо..
echo 6-1 . '-' . 6;

показывает 5-6 опять всё ОК.
echo 6-1 . '-' . 6*2;

5-12 - полёт нормальный

А теперь немного уличной магии user posted image

Что выведет этот код: ??
echo 6-1 . '-' . 6-1;

а этот?
echo 6-1 . '-' . 6+1;

а такой?
echo 6-1 . '-' . 99999-1;



PS
расстановка скобочек помогает вернуться к здоровой логике. Было подозрение что это из-за воспалённого сознания приоритетности операций, но после экспериментов оно прошло :)

UPD
если это баг php, то на bugs.php.net найти его не смог



Спустя 25 минут, 31 секунда (5.04.2011 - 10:34) Zerstoren написал(а):
тоже самое
$as = 'test '.5 - 2.' ggg';

только скобки дают логику действию
Не забывайте что действия идут слева на право и сверху вниз.

Спустя 12 минут, 22 секунды (5.04.2011 - 10:47) kirik написал(а):
Цитата (Zerstoren @ 5.04.2011 - 02:34)
Не забывайте что действия идут слева на право и сверху вниз.

Спасибо за напоминание...
В чём логика-то? Почему
echo 'test ' . 5 * 2 . ' ggg';
и
echo 'test ' . 5 / 2 . ' ggg';
работают как и ожидается, а
echo 'test ' . 5 + 2 . ' ggg';
и
echo 'test ' . 5 - 2 . ' ggg';
- косячат?

Спустя 4 минуты, 47 секунд (5.04.2011 - 10:52) kirik написал(а):
Кажется это я туплю.. Это действительно из-за приоритетности операций. Сначала идет умножение и деление, затем идет конкатенация, и потом сложение и вычитание.

Пошёл спать, а завтра перечитывать ман (если там такое есть конечно ага..)..

Спустя 56 минут, 4 секунды (5.04.2011 - 11:48) Trianon написал(а):
непуганные идиоты, прасти госпади.
Я имею в виду разработчиков.

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

Пишешь, как по минному полю ходишь...

Единственное, что спасает - скобки в местах, хотя бы слегка подозрительных, уже ставлю на автомате.

Спустя 3 часа, 32 минуты, 22 секунды (5.04.2011 - 15:20) inpost написал(а):
kirik
А вот интересный глюк с тернарным оператором, я тебе уже писал, повторюсь тут, на этот раз нашел причину глюка:
$temp = 'Лалалала'.$i == 7 ? '-Правда-' : '-Ложь-'.'Ллялялял';

Так вот, данные вместо того, чтобы записаться в переменную - выведутся как через echo, а если взять в скобки:
$temp = 'Лалалала'.($i == 7 ? '-Правда-' : '-Ложь-').'Ллялялял';
Такой вариант уже попадёт в переменную.

Спустя 2 часа, 30 минут, 45 секунд (5.04.2011 - 17:51) kirik написал(а):
Цитата (Trianon @ 5.04.2011 - 03:48)
Пишешь, как по минному полю ходишь...

Так и есть.. особенно когда ман невнимательно читаешь smile.gif Эту дурацкую точку я 2 раза пропустил: первый раз когда читал впервые (давно), второй раз - вчера когда первый раз открыл эту страницу.
Конечно это ничего не изменит, но я с тобой согласен. У точки должен быть приоритет ниже чем у арифметических сложения и вычитания, но выше чем у <<, >>.

Цитата (inpost @ 5.04.2011 - 07:20)
А вот интересный глюк с тернарным оператором, я тебе уже писал, повторюсь тут....данные вместо того, чтобы записаться в переменную - выведутся как через ech

Ты точно мне писал по этому поводу?)) А то у меня при любых значениях i - ничего не отображается..

Кстати полезно иногда вот так тупить. Я не знал что у && и and разный приоритет (ровно как и у || и or).
Кстати там ещё в верхнем комменте забавный пример smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.