Menu

echo trong PHP: in chữ, biến và HTML

echo in ra một hoặc nhiều chuỗi: echo "Hello, $name"; hoặc echo $a, $b;. Đây là cách thông dụng để gửi chữ hoặc HTML ra trang web. print làm điều tương tự với một giá trị và trả về 1; <?= $x ?> là dạng rút gọn bên trong HTML.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

echo in chữ ra. Viết echo "Hello"; để in một chuỗi, echo "Hello, $name"; để chèn một biến, và echo $a, $b; để in liên tiếp nhiều giá trị. Những gì echo in ra sẽ thành trang mà trình duyệt hiển thị, hoặc dòng chữ bạn thấy trong terminal.

Dòng đầu dùng nội suy chuỗi (biến nằm bên trong nháy kép), dòng thứ hai nối chuỗi bằng toán tử ., còn dòng thứ ba truyền ba giá trị cách nhau bởi dấu phẩy. Cả ba đều in ra cùng một kiểu kết quả.

Echo HTML

Trên trang web, echo thường in ra HTML. Trình duyệt nhận đoạn chữ và hiển thị các thẻ. Nhấn Chạy và tab Trang sẽ hiện kết quả đã hiển thị:

Dòng cuối dùng nháy đơn nên nháy kép trong class="note" không cần escape. Bên trong nháy đơn, biến không được thay giá trị, nên hãy dùng chúng cho chữ cố định. Nếu một giá trị đến từ người truy cập (một form, URL), hãy in nó qua htmlspecialchars để nó không chèn được HTML; xem trang htmlspecialchars.

Thẻ echo rút gọn <?=

Bên trong tệp HTML, <?= $value ?> là dạng rút gọn của <?php echo $value; ?>. Nhờ vậy template dễ đọc hơn:

Thẻ echo rút gọn luôn dùng được. Thẻ rút gọn còn lại, <? không có php, phụ thuộc vào cấu hình và không nên dùng.

Echo nhiều giá trị và xuống dòng

echo không tự thêm dấu xuống dòng. Trong terminal, hãy thêm "\n" (trong nháy kép) hoặc hằng số PHP_EOL. Trong HTML, xuống dòng trong mã nguồn không tạo ra gì nhìn thấy được; hãy dùng <br> hoặc tách thành các phần tử riêng.

Dấu phẩy và dấu chấm cho cùng một kết quả. Với dấu phẩy, echo in lần lượt từng giá trị; với dấu chấm, PHP tạo một chuỗi trước rồi mới in ra. Xuống dòng có trang riêng: xuống dòng trong PHP.

Echo và print

print là người anh lớn tuổi hơn. Nó in một giá trị và luôn trả về 1, nên có thể xuất hiện bên trong một biểu thức. echo nhận bao nhiêu giá trị cũng được và không trả về gì.

echoprint
Giá trịmột hoặc nhiều, cách nhau bởi dấu phẩyđúng một
Trả vềkhông gì cả (đây là câu lệnh)1
Dùng trong biểu thứckhôngcó, $ok = print "x";
Cách dùng phổ biếngần như mọi nơihiếm khi

printf lại là một chuyện khác: nó định dạng giá trị bằng placeholder, như printf("%05.2f", 3.14159), và được trình bày ở trang sprintf.

Echo một mảng hoặc đối tượng

echo chỉ in chuỗi và những giá trị chuyển được thành chuỗi (số, boolean, null). Mảng thì không chuyển được. PHP trên máy bạn sẽ in một cảnh báo và chữ Array:

PHP Warning:  Array to string conversion in /home/index.php on line 3
Array

Để xem nội dung, hãy chọn hàm phù hợp với việc cần làm:

Đối tượng còn khắt khe hơn: trừ khi lớp của nó định nghĩa __toString(), echo $object; sẽ dừng script với Error: Object of class User could not be converted to string. Boolean cũng hay gây bất ngờ: echo true; in ra 1 còn echo false; không in gì cả. Hãy dùng var_dump($value) khi bạn cần thấy chính xác kiểu và giá trị.

Lỗi thường gặp: echo với dấu ngoặc và dấu phẩy

Vì echo trông giống một hàm, nhiều người viết echo("a", "b");. Đó là lỗi cú pháp, vì cặp ngoặc chỉ bao một biểu thức duy nhất:

PHP Parse error:  syntax error, unexpected token "," in /home/index.php on line 2

Hãy bỏ cặp ngoặc (echo "a", "b";) hoặc nối các giá trị lại (echo("a" . "b");). Điều này cũng đúng với print, vốn không bao giờ nhận giá trị thứ hai, dù có ngoặc hay không.

Câu hỏi thường gặp

echo và print trong PHP khác nhau thế nào?

Cả hai đều in chuỗi ra. echo nhận nhiều giá trị cách nhau bởi dấu phẩy (echo $a, $b;) và không trả về gì; print nhận đúng một giá trị và trả về 1, nên có thể dùng bên trong một biểu thức. Trên thực tế, echo được dùng ở hầu hết mọi nơi.

Dùng echo có cần dấu ngoặc đơn không?

Không. echo là một cấu trúc ngôn ngữ, không phải hàm, nên echo "Hi"; là cách viết bình thường. echo("Hi"); vẫn chạy vì cặp ngoặc chỉ nhóm một biểu thức, nhưng echo("a", "b"); là lỗi cú pháp.

Vì sao echo false không in ra gì?

echo chuyển giá trị thành chuỗi, và false trở thành chuỗi rỗng "" còn true trở thành "1". Để thấy chính giá trị boolean, dùng var_dump($x); (in ra bool(false)) hoặc echo var_export($x, true); (in ra false).

<?= trong PHP nghĩa là gì?

<?= $value ?> là thẻ echo rút gọn, tương đương hoàn toàn với <?php echo $value; ?>. Thẻ này luôn được bật từ PHP 5.4 và là cách thông dụng để in giá trị trong template HTML.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu