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

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

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

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

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

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

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

Ответ 1

Это странно...

Но

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

ИЛИ

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

проблема с фиксацией.


UPDv1:

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

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

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


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

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


UPDv2:

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

$var = 1 + 2;

echo 'hello ' . $var . '34';