2010-08-30 24 views
5

Tôi chỉ tò mò thôi. Trong PHP, tại sao không phải là echo được thực hiện như một hàm? Tại sao PHP không cung cấp cho chúng tôi printf và không bao giờ nói về echo? Xin lưu ý rằng:Trong PHP, tại sao không được thực hiện như một hàm echo? (không phải echo so với printf)

  • Đây không phải là câu hỏi về echo so với printf.
  • Tôi đã biết rằng echo là một cấu trúc ngôn ngữ.

CẬP NHẬT: Nhân tiện, được printf triển khai sử dụng echo?

+1

Tại sao dường như hầu hết mọi người cố gắng trả lời hoặc khóa điều này thậm chí không đọc được câu hỏi hoàn toàn? –

+2

* (mã nguồn) * [Sửa đổi CHÍNH của định dạng_print.c] (http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/formatted_print.c?view=markup) – Gordon

Trả lời

0

Echo là cấu trúc ngôn ngữ. Chức năng sử dụng ngôn ngữ xây dựng để làm công việc của họ. Giải thích là không chính xác chuyên môn của tôi, nhưng một hành động google đưa tôi đến chủ đề này:

What is the difference between a language construct and a "built-in" function in PHP?

Một số nội dung quan trọng:

...

này là gốc rễ của lý do tại sao bạn không thể xác định lại cấu trúc ngôn ngữ như tiếng vọng hoặc in: chúng được mã hóa một cách hiệu quả vào trình phân tích cú pháp, trong khi các hàm được ánh xạ tới bộ cấu trúc ngôn ngữ và trình phân tích cú pháp cho phép bạn thay đổi ánh xạ đó tại biên dịch hoặc thời gian chạy để thay thế bộ cấu trúc hoặc biểu thức ngôn ngữ của riêng bạn.

...

+0

Cảm ơn. Tôi đã đọc điều đó trước đây. Nhưng tôi chỉ tò mò tại sao nhóm PHP tiếp xúc với 'echo', một ngôn ngữ xây dựng mà tôi hiếm khi thấy trong ngôn ngữ lập trình khác, thay vì gói nó trong một hàm (IIRC, Python đã thay đổi' print' để hoạt động trong phiên bản 3). –

+2

@Hai Minh Nguyen: Vâng, tôi không nghĩ rằng Rasmus Lerdorf, Zeev Suraski, hay Andi Gutmans đang ở đây tại SO. Tôi nghĩ rằng như những người sáng tạo ban đầu của PHP, chỉ có họ mới có thể đưa ra một câu trả lời thỏa đáng cho lý do * cho hành vi này. (Họ có thể có một, nhưng nó được ẩn trong sương mù của thời gian từ chúng tôi, chỉ là con người;)) – Piskvor

1

Echo không phải là một chức năng và nó không trả về giá trị như in. In là một ngôn ngữ xây dựng quá - không yêu cầu dấu ngoặc đơn.

Hướng dẫn sử dụng: echo - Không có giá trị nào được trả về. in - Luôn trả về 1.

Thực tế là việc trả về một giá trị sẽ làm giảm hiệu suất của hệ thống.

Vì vậy, bây giờ kể từ khi printf LÀ một hàm (trả về độ dài của chuỗi đã xuất) câu trả lời tôi tin là hiển nhiên.

+0

Ngoài ra bạn có thể sử dụng: echo $ var1, $ var2, $ var3; Điều này tránh nối. –

-1

Chỉ là một dự đoán hoang dã, nhưng có lẽ đó là vì PHP đã từng tồn tại dưới dạng nhị phân CGI. Vì vậy, nó sẽ được để làm cho kịch bản shell porting dễ dàng hơn, vì bạn có thể sử dụng nhị phân echo trong những người.

Các vấn đề liên quan