Поведение непарентифицированных выражений, содержащих как».», так и» «/» -«, изменится в PHP 8: » » / » — » будет иметь более высокий приоритет

#php #php-7.4 #php-8

#php #php-7.4

Вопрос:

 $date1 = date('d M Y', strtotime(' ' . $i   1 . 'month'));  

Эта ошибка появляется иногда, даже если я не вызываю эту функцию в этот момент, но она отлично работает, когда я обновляю страницу, это похоже на какое-то предупреждение.

Комментарии:

1. Как следует из предупреждения, попробуйте добавить скобки в $i 1 so ($i 1)

2. да , спасибо, это сработало

Ответ №1:

Проблема в том, что ваше выражение лица

 ' ' . $i   1 . 'month'  

Во-первых, он вычисляет крайний левый операнд, который является ' ' . Затем он добавляется $i к этому String , в результате чего получается что-то вроде ‘ 123' . А затем он пытается численно добавить 1 к этому String , но это не удастся, потому что PHP не может преобразовать левую сторону в число. Для того, чтобы решить эту проблему, вам нужно $i 1 будет сначала оценить, а затем оценить свои String .

Вы можете сделать это неявно:

 $date1 = date('d M Y', strtotime(' ' . ($i   1) . 'month'));  

или явно:

 $monthOffset = $i   1; $date1 = date('d M Y', strtotime(' ' . $monthOffset . 'month'));