Я только что обнаружил, что это будет работать:
echo $value , " continue";
но это не так:
return $value , " continue";
Пока "." работает в обоих.
Чем здесь отличается точка от запятой?
Я только что обнаружил, что это будет работать:
echo $value , " continue";
но это не так:
return $value , " continue";
Пока "." работает в обоих.
Чем здесь отличается точка от запятой?
return
допускает только одно выражение. Но echo
позволяет список выражений, где каждое выражение отделяется запятой. Но учтите, что поскольку echo
— это не функция, а специальная языковая конструкция, заключение списка выражений в круглые скобки недопустимо.
echo 1,2,(3),4,(5);
- person Pacerier; 06.04.2015
array((1,2,3))
также вызовет ошибку.
- person Tgr; 27.08.2015
1,2,3
является допустимым выражением), а в PHP его нет.
- person Tgr; 27.08.2015
print
является языковой конструкцией, как и echo
, но синтаксический анализатор специально не разрешает echo
после начала оператора, потому что это не имеет смысла где-либо еще ($echo=1;
не считается). print <arg>
возвращает 1, поэтому допускается любое значение, даже в круглых скобках. Это может быть полезно для отладки ряда условий, таких как echo $a&&(print 'a')&&$b&&(print 'b')||$c&&(print 'c') ? 1 : 0; //ac1
, где, по-видимому, $a и $c были истинными, а $b — нет. Вот еще интересная каша: echo 4,print 3,print 2; //43121
.
- person Chinoto Vokro; 17.12.2016
Вы также должны отметить, что echo
как конструкция быстрее с запятыми, чем с точками.
Итак, если вы присоединитесь к персонажу 4 миллиона раз, вот что вы получите:
эхо $str1, $str2, $str3;
Около 2,08 секунды
эхо $str1 . $стр2 . $стр3;
Около 3,48 секунд
Как вы можете видеть выше, это занимает почти половину времени.
Это связано с тем, что PHP с точками объединяет строку first и затем выводит их, а с запятыми просто выводит их одну за другой.
Речь идет о дробях, но все же.
ob_start(function(){},4000); $past=microtime(true); echo eval('echo '.trim(str_repeat('"123".', 1e5), '.').';'); $time=microtime(true)-$past; ob_end_clean(); echo $time;
Если я запущу это, я получу ошибку сегментации, но если я перейду на 1e4 повторения или заменю точку на запятую (в первом аргументе str_repeat и втором аргументе trim), это сработает. Вывод: не объединяйте, если в этом нет необходимости, вместо этого используйте запятые. Пустой буфер вывода предотвращает вывод и ограничивает использование памяти. В этом непристойном бенчмарке запятые в 7 раз быстрее (какой сумасшедший объединяет 10000 значений?!).
- person Chinoto Vokro; 17.12.2016
.
— это оператор конкатенации в PHP для объединения двух строк.
Запятая может использоваться для нескольких входов в echo
.
echo
— это не вызов функции, а языковая конструкция. Языковые конструкции в PHP могут вызываться как с круглыми скобками, так и без них.
- person Alex Barrett; 23.09.2009
Точка (.
) предназначена для конкатенации переменной или строки. Вот почему он работает, когда вы повторяете при объединении двух строк, и он работает, когда вы возвращаете конкатенацию строки в методе. Но запятая не объединяется, и поэтому оператор return не будет работать.
echo
— это языковая конструкция, которая может принимать несколько выражений, поэтому запятая работает:
void echo ( string $arg1 [, string $... ] )
Используйте точку для конкатенации.
The echo is a function
- нет. Смотрите ответ ниже от @knittl
- person scrowler; 19.06.2014
echo
не является функцией. echo
не является функцией. echo
не является функцией. echo
не является функцией. Прочтите документы, да php.net/echo. echo на самом деле не является функцией (это языковая конструкция), поэтому вам не нужно использовать с ней круглые скобки. Кроме того, если вы хотите передать в эхо более одного параметра, параметры не должны заключаться в круглые скобки.. И почему вы говорите, что это работает, когда все из нас получают уведомление PHP: попытка получить свойство не-объекта в файле.php в строке 2?
- person Pacerier; 30.03.2015
echo
— это языковая конструкция (не функция) и может принимать несколько аргументов, поэтому ,
работает. использование запятой будет немного четным (но только несколько наносекунд, не о чем беспокоиться)
.
— это оператор конкатенации (клей) для строк
echo
на самом деле является функцией (не совсем, но, скажем, ради аргумента), которая принимает любое количество параметров и объединит их вместе.
Хотя return
— это не функция, а скорее ключевое слово, которое сообщает функции вернуть значение, а ,
пытается интерпретировать как некий оператор. Вы должны использовать .
в качестве оператора конкатенации в случае, когда вы используете оператор return
.
Стоит отметить, что оператор конкатенации .
имеет более высокий приоритет, чем многие другие операторы, и имеет такой же приоритет, как операторы +
и -
.
Почему это важно?
Что ж, говорить дешево, позвольте мне показать вам код (из документация по PHP< /а>)
$x = 4;
// this line might result in unexpected output:
echo "x minus one equals " . $x-1 . ", or so I hope\n";
// because it is evaluated like this line:
echo (("x minus one equals " . $x) - 1) . ", or so I hope\n";
// the desired precedence can be enforced by using parentheses:
echo "x minus one equals " . ($x-1) . ", or so I hope\n";
Фактически, первая строка выдаст сообщение об устаревании, начиная с PHP 7.4.0.
Устарело: поведение выражений без скобок, содержащих оба '.' и '+'/'-' изменятся в PHP 8: '+'/'-' будет иметь более высокий приоритет
Таким образом, в PHP 8 кажется, что проблема ассоциативности в этом случае будет решена путем предоставления операторам +
и -
более высокого приоритета.
Можем ли мы сейчас сказать, что .
и ,
при использовании эха дают одинаковый результат?
Нет, они не всегда будут давать одинаковый результат
Возьмем, к примеру, этот случай
echo ' Here\'s ' . $name ?? 'Johnny';
Здесь мы использовали Нулевой оператор объединения, поэтому, если $name существует и не равно NULL, он будет возвращен, иначе он вернет Johnny. На первый взгляд может показаться, что результатом будет А вот и Джонни, поскольку $name не определено, по крайней мере, они на это надеются.
На самом деле результат будет
PHP Notice: Undefined variable: name
Here's
Здесь произошло то, что оператор ??
имеет более низкий приоритет, чем .
, что означает, что PHP сначала попытается оценить (здесь $name).
Вы можете решить эту проблему, заключив выражение в круглые скобки
echo ' Here\'s ' . ($name ?? 'Johnny');
Или просто используйте запятую.
echo ' Here\'s ' , $name ?? 'Johnny';