[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: число после строки и наоборот
Valick
сегодня слегка взорвал себе мозг вот этим
<?php
$a = '3.00';
echo $a.' - текст '. $a+0 .' - число <br />';
echo $a+0 .' - число '.$a.' - текст <br />';
?>

получаю
Цитата
3 - число
3 - число 3.00 - текст

вместо ожидаемого
Цитата
3.00 - текст 3 - число
3 - число 3.00 - текст

куда оно девается???
а вот это вообще контрольный в голову...
echo $a+1 .' - текст '. $a+0 .' - число <br />';

Цитата
4 - число
Zzepish

$a = '3.00';
echo $a.' - текст '.($a+0).' - число <br />';
echo ($a+0).' - число '.$a.' - текст <br />';
Placido
Цитата
A word of caution - the dot operator has the same precedence as + and -, which can yield unexpected results.

http://php.net/manual/ru/language.operators.string.php
Т.е. здесь:
$a+0 .' - число <br />';
сначала может происходить конкатенация нуля со строкой, а только потом сложение с $a. И никакой магии.
Valick
Zzepish, Placido, вы не поняли суть вопроса

_____________
Стимулятор ~yoomoney - 41001303250491
Placido
Вы не поняли сути ответа.
У точки и плюса одинаковый приоритет, поэтому порядок выполнения приведенных выше выражений может быть не таким, какой вы ожидали (which can yield unexpected results). Например, таким:
echo (($a.(' - текст '. $a))+0) .' - число <br />';// Теперь результат "3 - число" не кажется странным, не так ли?

Так понятнее?
Игорь_Vasinsky
$a = '3.00';
echo $a.' - текст '. ($a+0) .' - число <br />';
echo $a+0 .' - число '.$a.' - текст <br />';

что ожидаешь - то и получишь.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Valick
Игорь_Vasinsky, у меня не проблема получить то что хочу, у меня проблема понять почему так происходит ...
спасибо Placido, натолкнул на поход таки в мануал))
Цитата
У операторов с равным приоритетом левая ассоциативность подразумевает, что выражение вычисляется слева направо, правая ассоциативность, соответственно, подразумевает противоположный порядок.
Игорь_Vasinsky
ну скобки тебе на деле показали, что

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


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Valick
Игорь_Vasinsky, куда ветер, туда и Васински...
у + и у . одинаковая левая ассоциативность, поэтому всего лишь
echo ((($a.' - текст '). $a)+0) .' - число <br />';

моя ошибка заключалась в том, что я думал так
echo $a.' - текст '. $a+0 .' - число <br />';
а на самом деле так:
echo $a.' - текст '. $a+0 .' - число <br />';
поэтому в мозге не сходилось и даже на
4 - число не обратил должного внимания.
___
когда я в 2006 году учил РНР, первй же совет в книге был не полагаться на приоритет операторов по умолчанию, а указывает его явно, так собственно всегда и поступал

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

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