Sự khác biệt giữa echo, print và print_r trong PHP là gì?


197

Tôi sử dụng echoprint_rnhiều, và hầu như không bao giờ sử dụng print.

Tôi cảm thấy echolà một vĩ mô, và print_rlà một bí danh var_dump.

Nhưng đó không phải là cách tiêu chuẩn để giải thích sự khác biệt.


3
print_r không chính xác là bí danh của var_dump - nó xuất ra ở định dạng khác. Đáng chú ý, đầu ra từ var_dump cũng bao gồm "loại" của từng biến.
thomasrutter


Một chi tiết khác để thêm và có thể hữu ích, đó là var_dump cắt ngắn các văn bản rất dài, hiển thị ... và chỉ ra độ dài còn lại, ví dụ: thậm chí '... (length = 4482) Nếu bạn sử dụng echo thì điều này không xảy ra.
Yordan

Câu trả lời:


186

printechoít nhiều giống nhau; cả hai đều là cấu trúc ngôn ngữ hiển thị các chuỗi. Sự khác biệt là tinh tế: printcó giá trị trả về là 1 nên có thể được sử dụng trong các biểu thức trong khi echovoidkiểu trả về; echocó thể lấy nhiều tham số, mặc dù việc sử dụng như vậy là rất hiếm; echonhanh hơn một chútprint . (Cá nhân, tôi luôn luôn sử dụng echo, không bao giờ print.)

var_dumpin ra một kết xuất chi tiết của một biến, bao gồm loại của nó và loại của bất kỳ mục con nào (nếu đó là một mảng hoặc một đối tượng). print_rin một biến ở dạng dễ đọc hơn: chuỗi không được trích dẫn, thông tin loại bị bỏ qua, kích thước mảng không được cung cấp, v.v.

var_dumpprint_rtheo kinh nghiệm của tôi thường hữu ích hơn khi gỡ lỗi. Nó đặc biệt hữu ích khi bạn không biết chính xác những giá trị / loại bạn có trong các biến của mình. Hãy xem xét chương trình thử nghiệm này:

$values = array(0, 0.0, false, '');

var_dump($values);
print_r ($values);

Với print_rbạn không thể nói sự khác biệt giữa 00.0, false'':

array(4) {
  [0]=>
  int(0)
  [1]=>
  float(0)
  [2]=>
  bool(false)
  [3]=>
  string(0) ""
}

Array
(
    [0] => 0
    [1] => 0
    [2] => 
    [3] => 
)

1
Cấu trúc ngôn ngữ là gì?
omg

1
@Shore - đó là thứ được tích hợp vào ngôn ngữ không phải là chức năng. Chúng thường rất nhanh và không hoạt động chính xác như các chức năng thông thường.
alex

3
Chỉnh sửa hai năm sau để sửa chữa những điểm không chính xác được xác định trong những bình luận này. Cảm ơn tất cả, tôi phải ngủ vào ngày 7 tháng 10. ;-)
John Kugelman


5
Nhanh lên, luật sư di động!
John Kugelman

100

tiếng vang

  • Xuất ra một hoặc nhiều chuỗi được phân tách bằng dấu phẩy
  • Không có giá trị trả lại

    ví dụ echo "String 1", "String 2"

in

  • Chỉ xuất ra một chuỗi
  • Trả về 1 , vì vậy nó có thể được sử dụng trong một biểu thức

    ví dụ print "Hello"

    hoặc là, if ($expr && print "foo")

in_r ()

  • Xuất ra một đại diện có thể đọc được của con người về bất kỳ một giá trị nào
  • Chấp nhận không chỉ các chuỗi mà các loại khác bao gồm mảng và đối tượng, định dạng chúng để có thể đọc được
  • Hữu ích khi gỡ lỗi
  • Có thể trả lại đầu ra của nó dưới dạng giá trị trả về (thay vì lặp lại) nếu đối số tùy chọn thứ hai được đưa ra

var_dump ()

  • Xuất ra một đại diện có thể đọc được của con người của một hoặc nhiều giá trị được phân tách bằng dấu phẩy
  • Chấp nhận không chỉ các chuỗi mà các loại khác bao gồm mảng và đối tượng, định dạng chúng để có thể đọc được
  • Sử dụng một định dạng đầu ra khác print_r(), ví dụ, nó cũng in loại giá trị
  • Hữu ích khi gỡ lỗi
  • Không có giá trị trả lại

var_export ()

  • Xuất ra một đại diện có thể đọc được có thể thực thi được của PHP đối với bất kỳ một giá trị nào
  • Chấp nhận không chỉ các chuỗi mà các loại khác bao gồm mảng và đối tượng, định dạng chúng để có thể đọc được
  • Sử dụng một định dạng đầu ra khác nhau cho cả hai print_r()var_dump() - kết quả đầu ra là mã PHP hợp lệ!
  • Hữu ích khi gỡ lỗi
  • Có thể trả lại đầu ra của nó dưới dạng giá trị trả về (thay vì lặp lại) nếu đối số tùy chọn thứ hai được đưa ra

Ghi chú:

  • Mặc dù printcó thể được sử dụng trong một biểu thức, tôi khuyên mọi người tránh làm như vậy, vì nó không tốt cho khả năng đọc mã (và vì nó không bao giờ có ích). Các quy tắc ưu tiên khi nó tương tác với các toán tử khác cũng có thể gây nhầm lẫn. Vì điều này, cá nhân tôi không bao giờ có lý do để sử dụng nó echo.
  • Trong khi đó echoprintlà các cấu trúc ngôn ngữ, print_r()var_dump()/ var_export()là các hàm thông thường. Bạn không cần dấu ngoặc đơn để kèm theo các đối số echohoặc print(và nếu bạn sử dụng chúng, chúng sẽ được xử lý như trong biểu thức).
  • Mặc dù var_export()trả về mã PHP hợp lệ cho phép đọc lại các giá trị sau đó, việc dựa vào mã này cho mã sản xuất có thể giúp giới thiệu các lỗ hổng bảo mật dễ dàng hơn do nhu cầu sử dụng eval(). Thay vào đó, tốt hơn là sử dụng một định dạng như JSON để lưu trữ và đọc lại các giá trị. Tốc độ sẽ tương đương.

3
Chỉ là một ghi chú nhanh về thời điểm bạn muốn echo $a, $b;cú pháp khi bạn có thể thực hiện echo $a . $b;: nếu $ a hoặc $ b là các chuỗi thực sự lớn thì chuỗi sau sẽ sử dụng thêm bộ nhớ và thời gian tạo ra một phiên bản chuỗi được nối riêng trong bộ nhớ trước nó có thể bắt đầu xuất ra trình duyệt.
thomasrutter

Tất nhiên bạn chỉ có thể sử dụng echo $a; echo $b;quá.
thomasrutter

16

Chỉ cần thêm vào câu trả lời của John , echonên là người duy nhất bạn sử dụng để in nội dung lên trang.

printchậm hơn một chút var_dump()print_r()chỉ nên được sử dụng để gỡ lỗi.

Ngoài ra, điều đáng nói là print_r()var_dump()sẽ lặp lại theo mặc định, thêm một đối số thứ hai print_r()vào ít nhất là đánh giá thành đúng để thay thế nó trở lại, ví dụ print_r($array, TRUE).

Sự khác biệt giữa tiếng vang và trở lại là:

  • echo: Sẽ ngay lập tức in giá trị ra đầu ra.
  • return: Sẽ trả về đầu ra của hàm dưới dạng chuỗi. Hữu ích cho việc đăng nhập, vv

Chỉ vì bạn nêu ra vấn đề, sự khác biệt giữa echoing và returning là gì?
David nói phục hồi Monica

2
wow tôi ước tôi biết về tham số trả về :( về cơ bản bạn có thể thực hiện $ foo = print_r ($ mảng, true); và sử dụng nó theo các cách khác (vào nhật ký, bảng, v.v.)
FryGuy

Tôi đã sử dụng thông số print_rtrả về khá nhiều trong khi tôi đang mã hóa PHP. Tuy nhiên, tôi có xu hướng viết print_r( $foo, 1 );. Nó nhanh hơn để gõ;) Và về điều này tôi không quan tâm nhiều về khả năng đọc vì tôi thấy tên này cũng print_rkhông được mô tả.
shoutuma

var_dump()không hỗ trợ đối số thứ hai cho phép nó trả về giá trị như print_r()hiện tại, bởi vì var_dump()có thể chấp nhận nhiều đối số cho đầu ra.
thomasrutter

@thomasrutter Đúng, không chắc tại sao tôi lại viết như vậy.
alex

6
echo

Không có loại trả lại

print

Có loại trả về

print_r()

Đầu ra như được định dạng,


5

Sự khác biệt giữa echo , print , print_rvar_dump rất đơn giản.

tiếng vang

echo thực sự không phải là một chức năng mà là một cấu trúc ngôn ngữ được sử dụng để in đầu ra. Nó nhanh hơn một chút so với bản in.

echo "Hello World";    // this will print Hello World
echo "Hello ","World"; // Multiple arguments - this will print Hello World

$var_1=55;
echo "$var_1";               // this will print 55
echo "var_1=".$var_1;        // this will print var_1=55
echo 45+$var_1;              // this will print 100

$var_2="PHP";
echo "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with echo (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with echo (loop or index  value required)

Bạn cũng có thể sử dụng câu lệnh echo có hoặc không có ngoặc đơn

echo ("Hello World");   // this will print Hello World

in

Giống như echo cấu trúc in cũng là một cấu trúc ngôn ngữ và không phải là một chức năng thực sự. Sự khác biệt giữa echoprintin chỉ chấp nhận một đối số duy nhất và in luôn trả về 1. Trong khi đó echo không có giá trị trả về. Vì vậy, tuyên bố in có thể được sử dụng trong các biểu thức.

print "Hello World";    // this will print Hello World
print "Hello ","World"; // Multiple arguments - NOT POSSIBLE with print
$var_1=55;
print "$var_1";               // this will print 55
print "var_1=".$var_1;        // this will print var_1=55
print 45+$var_1;              // this will print 100

$var_2="PHP";
print "$var_2";                   // this will print PHP

$var_3=array(99,98,97)           // Arrays are not possible with print (loop or index  value required)
$var_4=array("P"=>"3","J"=>"4"); // Arrays are not possible with print (loop or index  value required)

Cũng giống như echo , in có thể được sử dụng có hoặc không có dấu ngoặc đơn.

print ("Hello World");   // this will print Hello World

in_r

Hàm print_r () được sử dụng để in thông tin có thể đọc được của con người về một biến. Nếu đối số là một mảng, hàm print_r () sẽ in các khóa và phần tử của nó (giống với các đối tượng).

print_r ("Hello World");    // this will print Hello World

$var_1=55;
print_r ("$var_1");               // this will print 55
print_r ("var_1=".$var_1);        // this will print var_1=55
print_r (45+$var_1);              // this will print 100

$var_2="PHP";
print_r ("$var_2");                // this will print PHP

$var_3=array(99,98,97)             // this will print Array ( [0] => 1 [1] => 2 [2] => 3 ) 
$var_4=array("P"=>"3","J"=>"4");   // this will print  Array ( [P] => 3 [J] => 4 ) 

var_dump

Hàm var_dump thường được sử dụng để gỡ lỗi và in thông tin (loại và giá trị) về một biến / mảng / đối tượng.

var_dump($var_1);     // this will print  int(5444) 
var_dump($var_2);     // this will print  string(5) "Hello" 
var_dump($var_3);     // this will print  array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 
var_dump($var_4);     // this will print  array(2) { ["P"]=> string(1) "3" ["J"]=> string(1) "4" }

3

Tiếng vọng :

Đây là câu lệnh không phải là hàm Không có giá trị trả về

Không yêu cầu dấu ngoặc đơn

Không in mảng

In

Đây là chức năng thực sự

Trả về loại 1

Yêu cầu dấu ngoặc đơn

Không in mảng

In_r

In ở định dạng dễ đọc của con người

Chuỗi không trong dấu ngoặc kép

Không chi tiết Thông tin về biến như loại và tất cả

var_dump

Tất cả thông tin kết xuất của biến như loại phần tử và phần tử phụ


2
Có rất nhiều vấn đề với câu trả lời này. printkhông một chức năng thực tế, nó là một cấu trúc ngôn ngữ giống như tiếng vang. Nó cũng có thể được sử dụng như một tuyên bố. echokhông một tuyên bố và cũng không nó có thể được sử dụng trong một. printkhông không cần dấu ngoặc đơn, cũng không phải làm một trong hai tiếng vang hoặc in sử dụng dấu ngoặc đơn như một chức năng sẽ. Bạn cũng đã bỏ lỡ một trong những khác biệt chính - echo chấp nhận nhiều chuỗi để echo được phân tách bằng dấu phẩy.
thomasrutter

2
... Và bạn đã gửi câu trả lời này khi một số câu trả lời đã tồn tại và chứa thông tin chính xác .
thomasrutter

2

** Echocan chấp nhận nhiều biểu thức trong khi in không thể. Hàm PHP Print_r () được sử dụng để trả về một mảng ở dạng người có thể đọc được. Nó được viết đơn giản là

![Print_r ($your_array)][1]

2

echo: echo là một cấu trúc ngôn ngữ trong đó không bắt buộc phải sử dụng dấu ngoặc đơn với nó và nó có thể lấy bất kỳ số lượng tham số nào và trả về khoảng trống.

   void echo (param1,param2,param3.....);

   Example: echo "test1","test2,test3";

print: nó là một cấu trúc ngôn ngữ khi không cần sử dụng dấu ngoặc đơn, nó chỉ cần lấy một tham số và trả về

    1 always.

           int print(param1);

           print "test1";
           print "test1","test2"; // It will give syntax error

prinf: Đây là một hàm mất ít nhất một chuỗi và định dạng kiểu và trả về độ dài của chuỗi đầu ra.

    int printf($string,$s);

    $s= "Shailesh";
    $i= printf("Hello %s how are you?",$s);    
    echo $i;

    Output : Hello Shailesh how are you?
             27



   echo returns void so its execution is faster than print and printf

2

print_r() được sử dụng để in các mảng ở định dạng có thể đọc được của con người.


0

print_r () có thể in ra giá trị nhưng cũng có thể nếu tham số cờ thứ hai được truyền và là TRUE - nó sẽ trả về kết quả được in dưới dạng chuỗi và không có gì gửi đến đầu ra tiêu chuẩn. Giới thiệu về var_dump. Nếu trình gỡ lỗi XDebug được cài đặt để kết quả đầu ra sẽ được định dạng theo cách dễ đọc và dễ hiểu hơn nhiều.


-1

cả hai đều là cấu trúc ngôn ngữ. echo trả về void và in return 1. echo được coi là hơi nhanh hơn in.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.