Passing multiple parameters to echo using commas (',')is not exactly identical to using the concatenation operator ('.'). There are two notable differences.
First, concatenation operators have much higher precedence. Referring to http://php.net/operators.precedence, there are many operators with lower precedence than concatenation, so it is a good idea to use the multi-argument form instead of passing concatenated strings.
<?php
echo "The sum is " . 1 | 2; // output: "2". Parentheses needed.
echo "The sum is ", 1 | 2; // output: "The sum is 3". Fine.
?>
Second, a slightly confusing phenomenon is that unlike passing arguments to functions, the values are evaluated one by one.
<?php
function f($arg){
var_dump($arg);
return $arg;
}
echo "Foo" . f("bar") . "Foo";
echo "\n\n";
echo "Foo", f("bar"), "Foo";
?>
The output would be:
string(3) "bar"FoobarFoo
Foostring(3) "bar"
barFoo
It would become a confusing bug for a script that uses blocking functions like sleep() as parameters:
<?php
while(true){
echo "Loop start!\n", sleep(1);
}
?>
vs
<?php
while(true){
echo "Loop started!\n" . sleep(1);
}
?>
With ',' the cursor stops at the beginning every newline, while with '.' the cursor stops after the 0 in the beginning every line (because sleep() returns 0).echo
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
echo
Референца за `function.echo.php` со подобрена типографија и навигација.
echo
(PHP 4, PHP 5, PHP 7, PHP 8)
echo — Излезте еден или повеќе низи
= NULL
Излегува еден или повеќе изрази, без дополнителни нови редови или празни места.
echo не е функција, туку јазичен конструкт. Неговите аргументи се список од изрази што следат по echo
клучниот збор, разделени со запирки, а не ограничени со загради. За разлика од некои други јазични конструкции, echo нема вратена вредност, така што не може да се користи во контекст на израз.
echo исто така има кратенка за синтакса, каде што можете веднаш да го следите отворачкиот таг со знак еднакво. Оваа синтакса е достапна дури и со short_open_tag конфигурациската поставка оневозможена.
I have <?=$foo?> foo.
Главните разлики со print се дека
echo прифаќа повеќе аргументи и нема вратена вредност.
Параметри
expressions-
Еден или повеќе изрази на низи за излез, разделени со запирки. Вредностите што не се низи ќе бидат претворени во низи, дури и кога the
strict_typesdirective е овозможено.
Вратени вредности
Не се враќа вредност.
Примери
Пример #1 echo examples
<?php
echo "echo does not require parentheses.";
// Strings can either be passed individually as multiple arguments or
// concatenated together and passed as a single argument
echo 'This ', 'string ', 'was ', 'made ', 'with multiple parameters.', "\n";
echo 'This ' . 'string ' . 'was ' . 'made ' . 'with concatenation.' . "\n";
// No newline or space is added; the below outputs "helloworld" all on one line
echo "hello";
echo "world";
// Same as above
echo "hello", "world";
echo "This string spans
multiple lines. The newlines will be
output as well";
echo "This string spans\nmultiple lines. The newlines will be\noutput as well.";
// The argument can be any expression which produces a string
$foo = "example";
echo "foo is $foo"; // foo is example
$fruits = ["lemon", "orange", "banana"];
echo implode(" and ", $fruits); // lemon and orange and banana
// Non-string expressions are coerced to string, even if declare(strict_types=1) is used
echo 6 * 7; // 42
// However, the following examples will work:
($some_var) ? print 'true' : print 'false'; // print is also a construct, but
// it is a valid expression, returning 1,
// so it may be used in this context.
echo $some_var ? 'true': 'false'; // evaluating the expression first and passing it to echo
?>
Пример #2 echo не е израз
<?php
// Because echo does not behave as an expression, the following code is invalid.
($some_var) ? echo 'true' : echo 'false';
?>Белешки
Забелешка: За автоматско вклучување на датотеки во скрипти, видете исто така Бидејќи ова е конструкција на јазикот, а не функција, не може да се повика користејќи, или именувани аргументи.
Забелешка: Користење со загради
Опкружувањето на еден аргумент на
echoсо загради нема да предизвика грешка во синтаксата и произведува синтакса што изгледа како нормален повик на функција. Сепак, ова може да биде погрешно, бидејќи заградите се всушност дел од изразот што се излегува, а не дел одechoсамата синтакса.Пример #3 Користење загради
<?php
echo "hello", PHP_EOL;
// outputs "hello"
echo("hello"), PHP_EOL;
// also outputs "hello", because ("hello") is a valid expression
echo(1 + 2) * 3, PHP_EOL;
// outputs "9"; the parentheses cause 1+2 to be evaluated first, then 3*3
// the echo statement sees the whole expression as one argument
echo "hello", " world", PHP_EOL;
// outputs "hello world"
echo("hello"), (" world"), PHP_EOL;
// outputs "hello world"; the parentheses are part of each expression
?>
Пример #4 Невалиден израз
<?php
echo("hello", " world"), PHP_EOL;
// Throws a Parse Error because ("hello", " world") is not a valid expression
?>
Проследување на повеќе аргументи на echo може да избегне компликации што произлегуваат од приоритетот на операторот за спојување во PHP. На пример, операторот за спојување има поголем приоритет од тернарниот оператор, а пред PHP 8.0.0 имаше ист приоритет како собирање и одземање:
<?php
// Below, the expression 'Hello ' . isset($name) is evaluated first,
// and is always true, so the argument to echo is always $name
echo 'Hello ' . isset($name) ? $name : 'John Doe' . '!';
// The intended behaviour requires additional parentheses
echo 'Hello ' . (isset($name) ? $name : 'John Doe') . '!';
// In PHP prior to 8.0.0, the below outputs "2", rather than "Sum: 3"
echo 'Sum: ' . 1 + 2;
// Again, adding parentheses ensures the intended order of evaluation
echo 'Sum: ' . (1 + 2);If multiple arguments are passed in, then parentheses will not be required to enforce precedence, because each expression is separate:
<?php
echo "Hello ", isset($name) ? $name : "John Doe", "!";
echo "Sum: ", 1 + 2;Види Исто така
- print Ако се предадат повеќе аргументи, тогаш заградите нема да бидат потребни за да се наметне редоследот на извршување, бидејќи секој израз е одделен:
- printf() Излез на стринг
- flush() Излез на форматиран стринг
- Испразни го баферот за системски излез