PHP-эхо со значениями int

Короче говоря, почему

<?php
$var =  'Calc: ' . 5 - 5 . '!';
echo $var;
?>

выход:

-5!

Вместо, скажем:

Расчет: 0 . '!'


Или другой вариант этой задачи:

<?php
echo "time is" . time()-2;
?>

Отпечатки:

-2

Обратите внимание на искажение, первая «строка» с первым целым числом отрубается! Хотя, ‹ $var = 'Calc: ' . (5 - 5) . '!'; > (работает нормально), я пытаюсь понять, в чем ключевая концепция такого поведения.


php
person Rami Treistman    schedule 29.09.2018    source источник
comment
Добро пожаловать в мир слабо типизированных языков. Лучше применять приведение типов.   -  person Madhur Bhaiya    schedule 29.09.2018
comment
Ваш вопрос: почему это происходит и нет, как это исправить?   -  person    schedule 29.09.2018
comment
@Dknacht - Да, меня больше беспокоит, почему первая строка + первое целое просто обрезаются - это неожиданное поведение   -  person Rami Treistman    schedule 29.09.2018
comment
сообщение было помечено как дубликат, прежде чем я смог отправить свой ответ, так что вот: pastebin.com/U52aMi9X   -  person Saif Eddin Gmati    schedule 29.09.2018
comment
Спасибо @azjezz за ваш отличный ответ, хорошо подробный и объясненный.   -  person Rami Treistman    schedule 30.09.2018


Ответы (1)


Приходит старая добрая математика и спасает положение.
Добавление () означает, что оно будет вычислено первым и даст вам правильную строку.

$var =  'Calc: ' . (5 - 5) . '!';
echo $var; //Calc: 0!

https://3v4l.org/p8OYf

person Andreas    schedule 29.09.2018
comment
Вопрос не в том, как это решить, в конце он заявляет, что знает, что использование скобок работает нормально. Вопрос в том, почему 5 - 5 вставляется как -5, как будто 5 не было - person ; 29.09.2018
comment
@Dknacht, и именно это объясняет мой ответ. Круглые скобки заставляют код сначала оценивать математику. Если он не будет оценен первым, у вас будет строка, с которой вы попытаетесь выполнить математику. - person Andreas; 29.09.2018