Сопряжение числа строк php перепутано

Я получил код php здесь:

<?php echo 'hello ' . 1 + 2 . '34'; ?> 

который выводит 234,

но когда я добавляю номер 11 до «привет»:

 <?php echo '11hello ' . 1 + 2 . '34'; ?> 

Он выводит 1334, а не 245 (что я ожидал от него), почему?

Related of "Сопряжение числа строк php перепутано"

Это странно…

Но

 <?php echo '11hello ' . (1 + 2) . '34'; ?> 

ИЛИ

 <?php echo '11hello ', 1 + 2, '34'; ?> 

исправление проблема.


UPDv1:

Наконец удалось получить правильный ответ:

'hello' = 0 (не содержит ведущих цифр, поэтому PHP предполагает, что он равен нулю).

Итак, 'hello' . 1 + 2 'hello' . 1 + 2 упрощает 'hello1' + 2 равно 2 , потому что никакие ведущие цифры в 'hello1' тоже не равны нулю.


'11hello ' = 11 (содержит ведущие цифры, поэтому PHP предполагает, что одиннадцать).

Итак, '11hello ' . 1 + 2 '11hello ' . 1 + 2 упрощает '11hello 1' + 2 поскольку 11 + 2 равно 13 .


UPDv2:

http://www.php.net/manual/en/language.types.string.php

Значение задается начальной частью строки. Если строка начинается с действительных числовых данных, это будет используемое значение. В противном случае значение будет равно 0 (ноль). Действительные числовые данные являются необязательным знаком, за которым следуют одна или несколько цифр (необязательно содержащие десятичную точку), за которыми следует необязательный показатель. Показателем является «e» или «E», за которым следует одна или несколько цифр.

Оператор точки имеет тот же приоритет, что и + и -, что может дать неожиданные результаты.

Это технически отвечает на ваш вопрос … если вы хотите, чтобы числа обрабатывались как числа во время конкатенации, просто оберните их в круглые скобки.

 <?php echo '11hello ' . (1 + 2) . '34'; ?> 

вы должны использовать () в математической операции

 echo 'hello ' . (1 + 2) . '34'; // output hello334 echo '11hello ' . (1 + 2) . '34'; // output 11hello334 

Вы должны проверить таблицу преобразования типа PHP, чтобы лучше понять, что происходит за кулисами: http://php.net/manual/en/types.comparisons.php

Если вы ненавидите размещение операторов между назначением их на vaiable

 $var = 1 + 2; echo 'hello ' . $var . '34';