echo wypisuje tekst. Napisz echo "Hello";, aby wypisać łańcuch, echo "Hello, $name";, aby wstawić zmienną, i echo $a, $b;, aby wypisać kilka wartości po kolei. To, co wypisze echo, staje się stroną wyświetlaną przez przeglądarkę albo tekstem, który widzisz w terminalu.
Pierwsza linia używa interpolacji (zmienna stoi w podwójnych cudzysłowach), druga łączy łańcuchy operatorem ., a trzecia przekazuje trzy wartości rozdzielone przecinkami. Wszystkie trzy dają ten sam rodzaj wyniku.
Wypisywanie HTML przez echo
Na stronie WWW echo zwykle wypisuje HTML. Przeglądarka dostaje tekst i wyświetla znaczniki. Kliknij Run, a karta Page pokaże wyrenderowany wynik:
Ostatnia linia używa pojedynczych cudzysłowów, więc podwójnych cudzysłowów w class="note" nie trzeba escapować. W pojedynczych cudzysłowach zmienne nie są podstawiane, więc używaj ich do stałego tekstu. Jeśli wartość pochodzi od odwiedzającego (formularz, URL), wypisz ją przez htmlspecialchars, żeby nie mogła wstrzyknąć HTML; zobacz stronę o htmlspecialchars.
Krótki znacznik echo <?=
W pliku HTML <?= $value ?> to skrócona forma <?php echo $value; ?>. Dzięki niej szablony są czytelne:
Krótki znacznik echo jest zawsze dostępny. Drugi krótki znacznik, <? bez php, zależy od ustawienia i nie należy go używać.
Kilka wartości i nowe linie
echo nie dodaje znaku nowej linii. W terminalu dodaj "\n" (w podwójnych cudzysłowach) albo stałą PHP_EOL. W HTML znak nowej linii w źródle nic nie zmienia na ekranie; użyj <br> albo osobnych elementów.
Przecinki i kropki dają ten sam wynik. Z przecinkami echo wypisuje każdą wartość po kolei; z kropkami PHP najpierw buduje jeden łańcuch, a potem go wypisuje. Znaki nowej linii mają własną stronę: nowa linia w PHP.
echo vs print
print to starsze rodzeństwo. Wypisuje jedną wartość i zawsze zwraca 1, dzięki czemu może wystąpić w wyrażeniu. echo przyjmuje dowolną liczbę wartości i nic nie zwraca.
echo | print | |
|---|---|---|
| Wartości | jedna lub więcej, rozdzielone przecinkami | dokładnie jedna |
| Zwraca | nic (to instrukcja) | 1 |
| Użycie w wyrażeniu | nie | tak, $ok = print "x"; |
| Typowe użycie | prawie wszystko | rzadko |
printf to jeszcze coś innego: formatuje wartości przez symbole zastępcze, jak printf("%05.2f", 3.14159), i jest opisany na stronie o sprintf.
Wypisywanie tablicy lub obiektu
echo wypisuje tylko łańcuchy i wartości, które dają się zamienić na łańcuch (liczby, wartości logiczne, null). Tablica się nie zamienia. Twoje lokalne PHP wypisze ostrzeżenie i słowo Array:
PHP Warning: Array to string conversion in /home/index.php on line 3
Array
Aby pokazać zawartość, wybierz funkcję odpowiednią do zadania:
Obiekt jest bardziej rygorystyczny: jeśli jego klasa nie definiuje __toString(), echo $object; zatrzymuje skrypt błędem Error: Object of class User could not be converted to string. Wartości logiczne też często zaskakują: echo true; wypisuje 1, a echo false; nie wypisuje nic. Użyj var_dump($value), gdy chcesz zobaczyć dokładny typ i wartość.
Częsty błąd: echo z nawiasami i przecinkami
Ponieważ echo wygląda jak funkcja, ludzie piszą echo("a", "b");. To błąd parsowania, bo nawiasy obejmują jedno wyrażenie:
PHP Parse error: syntax error, unexpected token "," in /home/index.php on line 2
Usuń nawiasy (echo "a", "b";) albo połącz wartości (echo("a" . "b");). To samo dotyczy print, który nigdy nie przyjmuje drugiej wartości, z nawiasami czy bez.
Najczęściej zadawane pytania
Czym różni się echo od print w PHP?
Oba wypisują łańcuchy. echo przyjmuje kilka wartości rozdzielonych przecinkami (echo $a, $b;) i nic nie zwraca; print przyjmuje dokładnie jedną wartość i zwraca 1, więc można go użyć w wyrażeniu. W praktyce prawie wszędzie używa się echo.
Czy echo wymaga nawiasów?
Nie. echo to konstrukcja językowa, a nie funkcja, więc echo "Hi"; to normalna forma. echo("Hi"); działa, bo nawiasy grupują tylko jedno wyrażenie, ale echo("a", "b"); to błąd parsowania.
Dlaczego echo false nic nie wypisuje?
echo zamienia wartość na łańcuch, a false staje się pustym łańcuchem "", natomiast true staje się "1". Aby zobaczyć samą wartość logiczną, użyj var_dump($x); (wypisze bool(false)) albo echo var_export($x, true); (wypisze false).
Co oznacza <?= w PHP?
<?= $value ?> to krótki znacznik echo, identyczny z <?php echo $value; ?>. Od PHP 5.4 jest zawsze włączony i to typowy sposób wypisywania wartości w szablonach HTML.