添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Authentication Services
Command Line Specific Extensions
Compression and Archive Extensions
Cryptography Extensions
Database Extensions
Date and Time Related Extensions
File System Related Extensions
Human Language and Character Encoding Support
Image Processing and Generation
Mail Related Extensions
Mathematical Extensions
Non-Text MIME Output
Process Control Extensions
Other Basic Extensions
Other Services
Search Engine Extensions
Server Specific Extensions
Session Extensions
Text Processing
Variable and Type Related Extensions
Web Services
Windows Only Extensions
XML Manipulation
GUI Extensions
Keyboard Shortcuts
?
This help
Next menu item
Previous menu item
Previous man page
Next man page
Scroll to bottom
Scroll to top
Goto homepage
Goto search
(current page)
Focus search box
echo is not a function but a language construct. Its arguments are a list of expressions following the echo keyword, separated by commas, and not delimited by parentheses. Unlike some other language constructs, echo does not have any return value, so it cannot be used in the context of an expression. echo also has a shortcut syntax, where you can immediately follow the opening tag with an equals sign. This syntax is available even with the short_open_tag configuration setting disabled.
I have <?=$foo?> foo.
One or more string expressions to output, separated by commas. Non-string values will be coerced to strings, even when strict_types directive is enabled.

Приклад #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

// Because echo does not behave as an expression, the following code is invalid.
( $some_var ) ? echo 'true' : echo 'false' ;

// 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
?>

Примітки

Зауваження : Оскільки це мовна конструкція, а не функція, її не можна викликати через змінні-функції або названі параметри .

Зауваження : Using with parentheses
Surrounding a single argument to echo with parentheses will not raise a syntax error, and produces syntax which looks like a normal function call. However, this can be misleading, because the parentheses are actually part of the expression being output, not part of the echo syntax itself.

<?php
echo "hello" ;
// outputs "hello"

echo( "hello" );
// also outputs "hello", because ("hello") is a valid expression

echo( 1 + 2 ) * 3 ;
// 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" ;
// outputs "hello world"

echo( "hello" ), ( " world" );
// outputs "hello world"; the parentheses are part of each expression

echo( "hello" , " world" );
// Throws a Parse Error because ("hello", " world") is not a valid expression
?>
Passing multiple arguments to echo can avoid complications arising from the precedence of the concatenation operator in PHP. For instance, the concatenation operator has higher precedence than the ternary operator, and prior to PHP 8.0.0 had the same precedence as addition and subtraction:
<?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 - Output a string
  • printf() - Output a formatted string
  • flush() - Flush system output buffer
  • Ways to specify literal strings
  • pemapmodder1970 at gmail dot com
    7 years ago
    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).