Я получил код php здесь:
<?php
echo 'hello ' . 1 + 2 . '34';
?>
который выводит 234,
но когда я добавляю номер 11 до "привет":
<?php
echo '11hello ' . 1 + 2 . '34';
?>
Он выводит 1334, а не 245 (что я ожидал от него), почему?
Я получил код php здесь:
<?php
echo 'hello ' . 1 + 2 . '34';
?>
который выводит 234,
но когда я добавляю номер 11 до "привет":
<?php
echo '11hello ' . 1 + 2 . '34';
?>
Он выводит 1334, а не 245 (что я ожидал от него), почему?
Это странно...
Но
<?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', за которым следуют одна или несколько цифр.
Точечный оператор имеет тот же precedence как + и -, что может дать неожиданные результаты.
Это технически отвечает на ваш вопрос... если вы хотите, чтобы числа обрабатывались как числа во время конкатенации, просто заверните их в круглые скобки.
<?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';