Tại sao nó được gọi là PHP?

PHP là ngôn ngữ kịch bản phía máy chủ được thiết kế để phát triển web nhưng cũng được sử dụng làm ngôn ngữ lập trình đa năng. Tính đến tháng 1 năm 2013, PHP đã được cài đặt trên hơn 240 triệu trang web [39% trong số đó được lấy mẫu] và 2. 1 triệu máy chủ web. Ban đầu được tạo bởi Rasmus Lerdorf vào năm 1994, việc triển khai tham chiếu của PHP [được cung cấp bởi Zend Engine] hiện được sản xuất bởi The PHP Group. Mặc dù PHP ban đầu là viết tắt của Trang chủ cá nhân, nhưng bây giờ nó là viết tắt của PHP. Bộ tiền xử lý siêu văn bản, là một từ viết tắt đệ quy

Mã PHP có thể được trộn đơn giản với mã HTML hoặc nó có thể được sử dụng kết hợp với các công cụ tạo khuôn mẫu và khung web khác nhau. Mã PHP thường được xử lý bởi trình thông dịch PHP, thường được triển khai dưới dạng mô-đun gốc của máy chủ web hoặc tệp thực thi Giao diện cổng chung [CGI]. Sau khi mã PHP được giải thích và thực thi, máy chủ web sẽ gửi kết quả đầu ra cho máy khách của nó, thường ở dạng một phần của trang web được tạo; . PHP cũng đã phát triển để bao gồm khả năng giao diện dòng lệnh [CLI] và có thể được sử dụng trong các ứng dụng đồ họa độc lập

Trình thông dịch PHP chuẩn, được cung cấp bởi Zend Engine, là phần mềm miễn phí được phát hành theo Giấy phép PHP. PHP đã được port rộng rãi và có thể được triển khai miễn phí trên hầu hết các máy chủ web trên hầu hết mọi hệ điều hành và nền tảng

Bất chấp sự phổ biến của nó, không có thông số kỹ thuật hoặc tiêu chuẩn bằng văn bản nào tồn tại cho ngôn ngữ PHP cho đến năm 2014, khiến trình thông dịch PHP chính tắc trở thành một tiêu chuẩn thực tế. Kể từ năm 2014, đã có công việc liên tục tạo ra một đặc tả PHP chính thức

Trong những năm 2010, PHP với tư cách là một nền tảng đã trưởng thành đáng kể, phần lớn là do ảnh hưởng từ các cộng đồng và dự án phần mềm khác như Npm. Ngoài các cải tiến thư viện tiêu chuẩn, công việc của PHP-FIG dưới dạng sáng kiến ​​PSR, trình quản lý phụ thuộc Trình soạn thảo và kho lưu trữ Packagist là một yếu tố quan trọng trong việc này.

Lịch sử

Lịch sử ban đầu

Rasmus Lerdorf, người đã viết thành phần Common Gateway Interface [CGI] ban đầu, cùng với Andi Gutmans và Zeev Suraski, người đã viết lại trình phân tích cú pháp hình thành nên PHP 3

Quá trình phát triển PHP bắt đầu vào năm 1994 khi Rasmus Lerdorf viết một loạt mã nhị phân Giao diện cổng chung [CGI] bằng C, mà ông đã sử dụng để duy trì trang chủ cá nhân của mình. Ông đã mở rộng chúng để thêm khả năng làm việc với các biểu mẫu web và giao tiếp với cơ sở dữ liệu, đồng thời gọi triển khai này là "Trình thông dịch biểu mẫu/Trang chủ cá nhân" hoặc PHP/FI

PHP/FI có thể được sử dụng để xây dựng các ứng dụng web động, đơn giản. Lerdorf ban đầu thông báo phát hành PHP/FI là "Công cụ Trang chủ Cá nhân [Công cụ PHP] phiên bản 1. 0" công khai để tăng tốc vị trí lỗi và cải thiện mã, trên nhóm thảo luận Usenet comp. hệ thống thông tin. www. tác giả. cgi vào ngày 8 tháng 6 năm 1995. Bản phát hành này đã có chức năng cơ bản mà PHP có kể từ năm 2013. Điều này bao gồm các biến giống như Perl, xử lý biểu mẫu và khả năng nhúng HTML. Cú pháp tương tự như của Perl nhưng đơn giản hơn, hạn chế hơn và ít nhất quán hơn

PHP ban đầu không có ý định trở thành một ngôn ngữ lập trình mới và đã phát triển một cách tự nhiên, với Lerdorf lưu ý khi nhìn lại. "Tôi không biết làm thế nào để dừng nó lại, chưa bao giờ có ý định viết một ngôn ngữ lập trình […] Tôi hoàn toàn không biết làm thế nào để viết một ngôn ngữ lập trình, tôi chỉ tiếp tục thêm bước hợp lý tiếp theo trên đường đi. " Một nhóm phát triển bắt đầu hình thành và, sau nhiều tháng làm việc và thử nghiệm bản beta, đã phát hành chính thức PHP/FI 2 vào tháng 11 năm 1997

Một lời chỉ trích đối với PHP là nó không được thiết kế ban đầu mà thay vào đó nó được phát triển một cách tự nhiên; . Trong một số trường hợp, tên hàm được chọn để khớp với các thư viện cấp thấp hơn mà PHP đang "bao bọc", trong khi ở một số phiên bản đầu tiên của PHP, độ dài của tên hàm được sử dụng nội bộ dưới dạng hàm băm, vì vậy tên được chọn để

PHP3 và 4

Zeev Suraski và Andi Gutmans đã viết lại trình phân tích cú pháp vào năm 1997 và hình thành nền tảng của PHP 3, thay đổi tên của ngôn ngữ thành từ viết tắt đệ quy PHP. Bộ tiền xử lý siêu văn bản. Sau đó, thử nghiệm công khai của PHP 3 bắt đầu và ra mắt chính thức vào tháng 6 năm 1998. Suraski và Gutmans sau đó bắt đầu viết lại lõi PHP, sản xuất Zend Engine vào năm 1999. Họ cũng thành lập Zend Technologies ở Ramat Gan, Israel

Vào ngày 22 tháng 5 năm 2000, PHP 4, được cung cấp bởi Zend Engine 1. 0, đã được phát hành. Kể từ tháng 8 năm 2008, chi nhánh này đã đạt đến phiên bản 4. 4. 9. PHP 4 không còn được phát triển và cũng sẽ không có bất kỳ bản cập nhật bảo mật nào được phát hành

PHP5

Ngày 13 tháng 7 năm 2004, PHP 5 được phát hành, chạy trên Zend Engine II mới. PHP 5 bao gồm các tính năng mới như hỗ trợ cải tiến cho lập trình hướng đối tượng, phần mở rộng Đối tượng dữ liệu PHP [PDO] [xác định giao diện nhẹ và nhất quán để truy cập cơ sở dữ liệu] và nhiều cải tiến về hiệu suất. Năm 2008 PHP 5 trở thành phiên bản ổn định duy nhất đang được phát triển. Liên kết tĩnh muộn đã bị thiếu trong PHP và đã được thêm vào trong phiên bản 5. 3

Nhiều dự án mã nguồn mở cao cấp đã ngừng hỗ trợ PHP 4 trong mã mới kể từ ngày 5 tháng 2 năm 2008, do sáng kiến ​​GoPHP5, được cung cấp bởi một nhóm các nhà phát triển PHP thúc đẩy quá trình chuyển đổi từ PHP 4 sang PHP 5

Theo thời gian, các trình thông dịch PHP đã có sẵn trên hầu hết các hệ điều hành 32 bit và 64 bit hiện có, bằng cách xây dựng chúng từ mã nguồn PHP hoặc bằng cách sử dụng các tệp nhị phân dựng sẵn. Đối với các phiên bản PHP 5. 3 và 5. 4, các bản phân phối nhị phân duy nhất có sẵn của Microsoft Windows là các bản dựng 32-bit x86, yêu cầu chế độ tương thích Windows 32-bit khi sử dụng Dịch vụ thông tin Internet [IIS] trên nền tảng Windows 64-bit. PHP phiên bản 5. 5 đã cung cấp các bản dựng 64-bit x86-64 cho Microsoft Windows

PHP 6 và Unicode

PHP đã nhận được nhiều ý kiến ​​trái chiều do thiếu hỗ trợ Unicode gốc ở cấp độ ngôn ngữ cốt lõi. Vào năm 2005, một dự án do Andrei Zmievski đứng đầu đã được bắt đầu để mang lại hỗ trợ Unicode gốc trong PHP, bằng cách nhúng thư viện Thành phần quốc tế cho Unicode [ICU] và biểu thị các chuỗi văn bản dưới dạng UTF-16 trong nội bộ. Vì điều này sẽ gây ra những thay đổi lớn đối với cả phần bên trong của ngôn ngữ và mã người dùng, nên nó đã được lên kế hoạch phát hành phiên bản này dưới dạng phiên bản 6. 0 của ngôn ngữ, cùng với các tính năng chính khác sau đó đang được phát triển

Tuy nhiên, sự thiếu hụt các nhà phát triển hiểu những thay đổi cần thiết và các vấn đề về hiệu suất phát sinh từ việc chuyển đổi sang và từ UTF-16, hiếm khi được sử dụng trong ngữ cảnh web, đã dẫn đến sự chậm trễ trong dự án. Kết quả là, một PHP 5. 3 được tạo vào năm 2009, với nhiều tính năng không phải Unicode được chuyển ngược từ PHP 6, đáng chú ý là không gian tên. Vào tháng 3 năm 2010, dự án ở dạng hiện tại đã chính thức bị hủy bỏ và phiên bản PHP 5. Bản phát hành 4 đã được chuẩn bị chứa hầu hết các tính năng không phải Unicode còn lại từ PHP 6, chẳng hạn như liên kết lại các đặc điểm và đóng. Hy vọng ban đầu là một kế hoạch mới sẽ được hình thành để tích hợp Unicode, nhưng kể từ năm 2014, không có kế hoạch nào được thông qua.

PHP7

Kể từ năm 2015, công việc đang được tiến hành trên một phiên bản PHP chính mới có tên là PHP 7. Đã có một số tranh cãi về việc liệu phiên bản chính tiếp theo của PHP sẽ được gọi là PHP 6 hay PHP 7. Mặc dù thử nghiệm PHP 6 Unicode chưa bao giờ được phát hành, nhưng một số bài báo và tên sách đã đề cập đến tên PHP 6 cũ, điều này có thể gây nhầm lẫn nếu một bản phát hành mới sử dụng lại tên PHP 6. Sau một cuộc bỏ phiếu, tên PHP 7 đã được chọn

PHP 7 lấy nền tảng từ một nhánh PHP thử nghiệm ban đầu có tên là phpng [PHP thế hệ tiếp theo], nhằm mục đích tối ưu hóa hiệu suất PHP bằng cách tái cấu trúc Zend Engine trong khi vẫn duy trì khả năng tương thích ngôn ngữ gần như hoàn chỉnh. Kể từ ngày 14 tháng 7 năm 2014, các điểm chuẩn dựa trên WordPress, đóng vai trò là bộ điểm chuẩn chính cho dự án phpng, cho thấy hiệu suất tăng gần 100%. Các thay đổi từ phpng cũng được kỳ vọng sẽ giúp cải thiện hiệu suất dễ dàng hơn trong tương lai, vì cấu trúc dữ liệu nhỏ gọn hơn và các thay đổi khác được coi là phù hợp hơn để chuyển đổi thành công sang trình biên dịch JIT [Just-in-time]. Do có những thay đổi quan trọng, Zend Engine được làm lại này sẽ được gọi là Zend Engine 3, kế nhiệm Zend Engine 2 được sử dụng trong PHP 5

Do những thay đổi lớn bên trong của phpng, nó sẽ phải chuyển sang một phiên bản PHP chính mới, thay vì phiên bản phụ 5. x, theo quy trình phát hành của PHP, do đó sinh ra PHP 7. Các phiên bản chính của PHP được phép phá vỡ khả năng tương thích ngược của mã và do đó, PHP 7 đã tạo cơ hội để thực hiện các cải tiến khác ngoài phpng yêu cầu phá vỡ khả năng tương thích ngược. Cụ thể, các ngắt tương thích ngược sau đây đã được thực hiện

  • Nhiều "lỗi" PHP kế thừa ở mức "nguy hiểm" hoặc "có thể phục hồi" đã được thay thế bằng các ngoại lệ hướng đối tượng hiện đại
  • Cú pháp cho tham chiếu biến đổi đã được làm lại để nhất quán và hoàn chỉnh hơn trong nội bộ, cho phép sử dụng các toán tử ->, [], [], {} và ________0____0 với các biểu thức bên trái có ý nghĩa tùy ý
  • Hỗ trợ cho các phương thức xây dựng kiểu PHP 4 cũ không được dùng nữa
  • Hành vi của câu lệnh
     
    1 đã được thay đổi để dễ dự đoán hơn
  • Trình xây dựng cho một số lớp được tích hợp sẵn trong PHP trả về giá trị rỗng khi lỗi đã được thay đổi để đưa ra một ngoại lệ thay thế, để đảm bảo tính nhất quán
  • Một số tiện ích mở rộng và SAPI không được duy trì hoặc không dùng nữa đã bị xóa khỏi lõi PHP, đáng chú ý nhất là tiện ích mở rộng
     
    2 kế thừa
  • Hành vi của toán tử
     
    3 đã được thay đổi để loại bỏ hỗ trợ cho chuỗi
  • Hỗ trợ cho các dấu phân cách mã PHP kiểu ASP kế thừa [
     
    4 và
     
    5,
     
    6] đã bị xóa
  • Đã sửa lỗi giám sát cho phép câu lệnh chuyển đổi có nhiều mệnh đề
     
    7
  • Hỗ trợ hỗ trợ số thập lục phân trong một số chuyển đổi ngầm định từ chuỗi sang loại số đã bị xóa
  • Các toán tử dịch chuyển trái và dịch chuyển phải đã được thay đổi để hoạt động nhất quán hơn trên các nền tảng
  • Chuyển đổi giữa số nguyên và số dấu phẩy động đã được thắt chặt và nhất quán hơn trên các nền tảng

PHP 7 cũng sẽ bao gồm các tính năng ngôn ngữ mới. Đáng chú ý nhất, nó sẽ giới thiệu các khai báo kiểu trả về, sẽ bổ sung cho các khai báo kiểu tham số hiện có của nó và hỗ trợ các kiểu vô hướng [số nguyên, float, chuỗi và boolean] trong các khai báo kiểu tham số và kiểu trả về

Lịch sử phát hành

Chìa khóa

Màu sắcÝ nghĩaPhát triểnĐỏBản phát hành cũKhông phát triểnMàu vàngBản phát hành ổn địnhBản sửa lỗi bảo mậtMàu xanh láBản phát hành ổn địnhBản sửa lỗi và bảo mậtMàu xanh lam Bản phát hành trong tương laiTính năng mới

Phiên bảnNgày phát hànhĐược hỗ trợ cho đến Ghi chú1. 08 Tháng sáu 1995Tên chính thức là "Công cụ Trang chủ Cá nhân [Công cụ PHP]". Đây là lần đầu tiên sử dụng tên "PHP". 2. 01 Tháng mười một 1997Tên chính thức là "PHP/FI 2. 0". Đây là bản phát hành đầu tiên thực sự có thể được mô tả là PHP, là một ngôn ngữ độc lập với nhiều tính năng tồn tại cho đến ngày nay. 3. 06 Tháng sáu 199820 Tháng mười 2000Phát triển chuyển từ một người sang nhiều nhà phát triển. Zeev Suraski và Andi Gutmans viết lại cơ sở cho phiên bản này. 4. 022 tháng 5 năm 200023 tháng 6 năm 2001Đã thêm hệ thống phân tích cú pháp/thực thi thẻ phân tích cú pháp hai giai đoạn nâng cao hơn được gọi là công cụ Zend. 4. 110 tháng 12 năm 200112 tháng 3 năm 2002Giới thiệu 'siêu toàn cầu' [

 
8,
 
9,
function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 
0, v.v. ]4. 222 tháng 4 năm 20026 tháng 9 năm 2002 Bị vô hiệu hóa
function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 
1 theo mặc định. Dữ liệu nhận được qua mạng không được chèn trực tiếp vào không gian tên chung nữa, đóng các lỗ hổng bảo mật có thể có trong các ứng dụng. 4. 327 Tháng mười hai 200231 Tháng ba 2005Giới thiệu giao diện dòng lệnh [CLI], để bổ sung cho CGI. 4. 411 Tháng 7 năm 20057 Tháng 8 năm 2008Đã sửa lỗi hỏng bộ nhớ, yêu cầu phá vỡ khả năng tương thích nhị phân với các tiện ích mở rộng được biên dịch dựa trên PHP phiên bản 4. 3. x. 5. 013 Tháng bảy 20045 Tháng chín 2005Zend Engine II với một mô hình đối tượng mới. 5. 124 Tháng mười một 200524 Tháng tám 2006Cải thiện hiệu suất với việc giới thiệu các biến trình biên dịch trong Công cụ PHP được thiết kế lại. Đã thêm Đối tượng dữ liệu PHP [PDO] làm giao diện nhất quán để truy cập cơ sở dữ liệu. 5. Ngày 22 tháng 11 năm 20066 Tháng 1 năm 2011Đã bật tiện ích mở rộng bộ lọc theo mặc định. Hỗ trợ JSON gốc. 5. 330 Tháng sáu 200914 Tháng tám 2014Hỗ trợ không gian tên; . 5. 41 Tháng ba 2012Tháng chín 2015Hỗ trợ đặc điểm, hỗ trợ cú pháp mảng ngắn. Các mục đã xóa.
function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 
1,
function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 
3,
function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 
4,
function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 
5,
function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 
6 và
function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 
7. Máy chủ web tích hợp. Một số cải tiến cho các tính năng hiện có, hiệu suất và giảm yêu cầu bộ nhớ. 5. 520 Tháng sáu 2013Tháng sáu 2016Hỗ trợ cho trình tạo,
function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 
8 khối để xử lý ngoại lệ, OpCache [dựa trên Zend Optimizer+] được đóng gói trong bản phân phối chính thức. 5. 628 Tháng 8 năm 2014Tháng 8 năm 2017Biểu thức vô hướng không đổi, hàm biến thiên, giải nén đối số, toán tử lũy thừa mới, phần mở rộng của câu lệnh sử dụng cho hàm và hằng số, trình gỡ lỗi phpdbg mới dưới dạng mô-đun SAPI và các cải tiến nhỏ hơn khác. 6. xChưa phát hànhN/AAPhiên bản PHP bị bỏ rơi đã lên kế hoạch bao gồm hỗ trợ Unicode gốc. 7. 012 tháng 11 năm 201512 tháng 11 năm 2018Zend Engine 3 [cải tiến hiệu suất và hỗ trợ số nguyên 64-bit trên Windows], cú pháp biến thống nhất, quy trình biên dịch dựa trên AST, thêm
function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 
9, tính nhất quán dịch chuyển bit trên các nền tảng, toán tử
function getAdder[$x] { return function[$y] use [$x] { return $x + $y; }; } $adder = getAdder[8]; echo $adder[2]; // prints "10" 
0 [kết hợp vô giá trị], cú pháp thoát điểm mã Unicode

Bắt đầu từ ngày 28 tháng 6 năm 2011, Nhóm PHP bắt đầu theo dõi lịch trình khi các phiên bản PHP mới sẽ được phát hành. Theo dòng thời gian này, ít nhất một bản phát hành sẽ diễn ra mỗi tháng. Mỗi năm một lần, một bản phát hành nhỏ sẽ xảy ra có thể bao gồm các tính năng mới. Mỗi bản phát hành nhỏ phải có ít nhất hai năm sửa lỗi và bảo mật, sau đó là ít nhất một năm sửa lỗi chỉ dành riêng cho bảo mật, tổng cộng quy trình phát hành kéo dài ba năm cho mỗi bản phát hành nhỏ. Không có tính năng mới nào [trừ khi nhỏ và độc lập] sẽ được đưa vào một bản phát hành nhỏ trong quá trình phát hành ba năm

linh vật

Linh vật của dự án PHP là elePHPant, một chú voi xanh có logo PHP ở bên, được thiết kế bởi Vincent Pontier. Con voi đôi khi có màu khác khi ở dạng thú nhồi bông

elePHPant, linh vật PHP

Đồ chơi nhồi bông elePHPant

cú pháp

Bài chi tiết. Cú pháp và ngữ nghĩa PHP

Sau đây "Xin chào, Thế giới. " chương trình được viết bằng mã PHP được nhúng trong tài liệu HTML

   PHP Test   Hello World'; ?>   

Tuy nhiên, vì PHP không cần được nhúng trong HTML hoặc được sử dụng với máy chủ web, nên phiên bản đơn giản nhất của "Xin chào, Thế giới. " chương trình có thể được viết như thế này, với thẻ đóng được bỏ qua như được ưu tiên trong các tệp chứa mã PHP thuần túy [trước PHP 5. 4. 0, cú pháp ngắn này cho echo[] chỉ hoạt động với cài đặt cấu hình short_open_tag được bật, trong khi đối với PHP 5. 4. 0 trở lên thì luôn có sẵn]

 

Trình thông dịch PHP chỉ thực thi mã PHP trong các dấu phân cách của nó. Mọi thứ bên ngoài dấu phân cách của nó đều không được xử lý bởi PHP [mặc dù văn bản không phải PHP vẫn phải tuân theo các cấu trúc kiểm soát được mô tả trong mã PHP]. Các dấu phân cách phổ biến nhất là để đóng các phần PHP. Ngoài ra còn có các hình thức rút gọn. Các dấu phân cách ngắn làm cho các tệp tập lệnh ít di động hơn, vì hỗ trợ cho chúng có thể bị vô hiệu hóa trong cấu hình PHP cục bộ và do đó chúng không được khuyến khích. Mục đích của tất cả các dấu phân cách này là để tách mã PHP khỏi mã không phải PHP, bao gồm cả HTML

Dạng đầu tiên của dấu phân cách, , trong XHTML và các tài liệu XML khác, tạo ra các "hướng dẫn xử lý" XML được định dạng chính xác. Điều này có nghĩa là hỗn hợp kết quả của mã PHP và đánh dấu khác trong tệp phía máy chủ chính là XML được định dạng tốt

Các biến được bắt đầu bằng ký hiệu đô la và loại không cần được chỉ định trước. PHP 5 đã giới thiệu gợi ý loại cho phép các hàm buộc tham số của chúng trở thành đối tượng của một lớp, mảng, giao diện hoặc hàm gọi lại cụ thể. Tuy nhiên, trước PHP 7. 0, gợi ý loại không thể được sử dụng với các loại vô hướng như số nguyên hoặc chuỗi

Không giống như tên hàm và tên lớp, tên biến phân biệt chữ hoa chữ thường. Cả hai chuỗi trích dẫn kép [""] và heredoc đều cung cấp khả năng nội suy giá trị của một biến vào chuỗi. PHP coi các dòng mới là khoảng trắng theo cách của ngôn ngữ dạng tự do và các câu lệnh được kết thúc bằng dấu chấm phẩy. PHP có ba loại cú pháp bình luận. /* */ đánh dấu khối và chú thích nội tuyến; . Câu lệnh echo là một trong một số tiện ích mà PHP cung cấp để xuất văn bản, e. g. , đến một trình duyệt web

Về từ khóa và cú pháp ngôn ngữ, PHP tương tự như hầu hết các ngôn ngữ cấp cao tuân theo cú pháp kiểu C. điều kiện if, vòng lặp for và while, và trả về hàm có cú pháp tương tự với các ngôn ngữ như C, C++, C#, Java và Perl

Loại dữ liệu

PHP lưu trữ các số nguyên trong một phạm vi phụ thuộc vào nền tảng, số nguyên có dấu 64 bit hoặc 32 bit tương đương với loại dài của ngôn ngữ C. Các số nguyên không dấu được chuyển đổi thành các giá trị có dấu trong một số trường hợp nhất định; . Các biến số nguyên có thể được gán bằng các ký hiệu thập phân [dương và âm], bát phân, thập lục phân và nhị phân

Số dấu phẩy động cũng được lưu trữ trong một phạm vi dành riêng cho nền tảng. Chúng có thể được chỉ định bằng ký hiệu dấu phẩy động hoặc hai dạng ký hiệu khoa học. PHP có kiểu Boolean gốc tương tự như kiểu Boolean gốc trong Java và C++. Sử dụng các quy tắc chuyển đổi kiểu Boolean, các giá trị khác 0 được hiểu là đúng và 0 là sai, như trong Perl và C++

Kiểu dữ liệu null đại diện cho một biến không có giá trị;

Các biến thuộc loại "tài nguyên" đại diện cho các tham chiếu đến tài nguyên từ các nguồn bên ngoài. Chúng thường được tạo bởi các hàm từ một phần mở rộng cụ thể và chỉ có thể được xử lý bởi các hàm từ cùng một phần mở rộng;

Mảng có thể chứa các phần tử thuộc bất kỳ loại nào mà PHP có thể xử lý, bao gồm tài nguyên, đối tượng và thậm chí cả các mảng khác. Thứ tự được giữ nguyên trong danh sách giá trị và trong giá trị băm với cả khóa và giá trị và cả hai có thể được trộn lẫn. PHP cũng hỗ trợ các chuỗi, có thể được sử dụng với dấu ngoặc đơn, dấu ngoặc kép, cú pháp nowdoc hoặc heredoc

Thư viện PHP chuẩn [SPL] cố gắng giải quyết các vấn đề tiêu chuẩn và triển khai các lớp và giao diện truy cập dữ liệu hiệu quả

Chức năng

PHP có hàng trăm chức năng được cung cấp bởi chức năng ngôn ngữ cốt lõi và hàng nghìn chức năng khác có sẵn thông qua các phần mở rộng khác nhau; . Tuy nhiên, thư viện tích hợp có nhiều quy ước đặt tên khác nhau và sự không nhất quán liên quan, như được mô tả trong phần lịch sử ở trên

Các chức năng bổ sung có thể được xác định bởi nhà phát triển

function myAge[$birthYear] { // defines a function, this one is named "myAge" $yearsOld = date['Y'] - $birthYear; // calculates the age return $yearsOld . ' year' . [$yearsOld != 1 ? 's' : '']; // returns the age in a descriptive form } echo 'I am currently ' . myAge[1981] . ' old.'; // outputs the text concatenated // with the return value of myAge[] // As the result of this syntax, myAge[] is called. 

Vào năm 2015, đầu ra của chương trình mẫu trên sẽ là 'Tôi hiện 34 tuổi. '

Trong PHP, các hàm bình thường không phải là hàm hạng nhất và chỉ có thể được tham chiếu trực tiếp bằng tên của chúng hoặc động bởi một biến chứa tên của hàm [được gọi là "hàm biến"]. Các chức năng do người dùng xác định có thể được tạo bất cứ lúc nào mà không cần tạo nguyên mẫu. Các chức năng có thể được xác định bên trong các khối mã, cho phép quyết định trong thời gian chạy về việc có nên xác định một chức năng hay không. Các lời gọi hàm phải sử dụng dấu ngoặc đơn, ngoại trừ các hàm khởi tạo của lớp không đối số được gọi bằng toán tử mới PHP, trong đó dấu ngoặc đơn là tùy chọn

Cho đến PHP 5. 3, hỗ trợ cho các chức năng hoặc bao đóng ẩn danh thực sự không tồn tại trong PHP. Trong khi create_function[] tồn tại từ PHP 4. 0. 1, nó chỉ đơn thuần là một trình bao bọc mỏng xung quanh eval[] cho phép các hàm PHP thông thường được tạo trong quá trình thực thi chương trình. Ngoài ra, hỗ trợ cho các hàm biến cho phép sử dụng các hàm PHP bình thường, chẳng hạn như gọi lại hoặc trong các bảng hàm. PHP5. 3 đã thêm hỗ trợ cho các hàm đóng, là các hàm hạng nhất, ẩn danh thực sự, có thể thấy cú pháp của chúng trong ví dụ sau

function getAdder[$x] { return function[$y] use [$x] { return $x + $y; }; } $adder = getAdder[8]; echo $adder[2]; // prints "10" 

Trong ví dụ trên, hàm getAdder[] tạo một bao đóng bằng cách sử dụng đối số $x đã truyền [từ khóa use nhập một biến từ ngữ cảnh từ vựng], hàm này nhận một đối số bổ sung $y và trả về bao đóng đã tạo cho người gọi. Một hàm như vậy là một đối tượng hạng nhất, nghĩa là nó có thể được lưu trữ trong một biến, được truyền dưới dạng tham số cho các hàm khác, v.v.

Bất thường đối với ngôn ngữ được nhập động, PHP hỗ trợ khai báo kiểu trên các tham số chức năng, được thực thi khi chạy. Điều này đã được hỗ trợ cho các lớp và giao diện kể từ PHP 5. 0, đối với các mảng kể từ PHP 5. 1, cho "có thể gọi được" kể từ PHP 5. 4 và sẽ được hỗ trợ cho các loại vô hướng [số nguyên, số float, chuỗi và boolean] trong PHP 7. 0. PHP 7. 0 cũng sẽ giới thiệu các khai báo kiểu cho các kiểu trả về của hàm, được thể hiện bằng cách đặt tên kiểu sau danh sách các tham số, trước dấu hai chấm. Ví dụ: hàm getAdder từ ví dụ trước có thể được chú thích bằng các loại như vậy trong PHP 7

function getAdder[int $x]: \Closure { return function[int $y] use [$x] : int { return $x + $y; }; } $adder = getAdder[8]; echo $adder[2]; // prints "10" echo $adder[null]; // throws an exception because an incorrect type was passed $adder = getAdder[[]]; // would also throw an exception 

Theo mặc định, các khai báo kiểu vô hướng tuân theo các nguyên tắc gõ yếu. Vì vậy, ví dụ, nếu kiểu của một tham số là int, PHP sẽ không chỉ cho phép các số nguyên mà còn cả các chuỗi số có thể chuyển đổi, số float hoặc booleans được chuyển đến hàm đó và sẽ chuyển đổi chúng. Tuy nhiên, PHP 7 sẽ thêm chế độ "gõ nghiêm ngặt", khi được sử dụng, không cho phép các chuyển đổi như vậy đối với các lệnh gọi hàm và trả về trong một tệp

Các đối tượng

Chức năng lập trình hướng đối tượng cơ bản đã được thêm vào trong PHP 3 và được cải thiện trong PHP 4. Xử lý đối tượng đã được viết lại hoàn toàn cho PHP 5, mở rộng bộ tính năng và nâng cao hiệu suất. Trong các phiên bản trước của PHP, các đối tượng được xử lý như các loại giá trị. Hạn chế của phương thức này là toàn bộ đối tượng đã được sao chép khi một biến được gán hoặc truyền dưới dạng tham số cho một phương thức. Trong cách tiếp cận mới, các đối tượng được tham chiếu theo xử lý chứ không phải theo giá trị

PHP 5 đã giới thiệu các biến và phương thức thành viên riêng tư và được bảo vệ, cùng với các lớp trừu tượng, lớp cuối cùng, phương thức trừu tượng và phương thức cuối cùng. Nó cũng giới thiệu một cách tiêu chuẩn để khai báo các hàm tạo và hàm hủy, tương tự như cách của các ngôn ngữ hướng đối tượng khác như C++ và một mô hình xử lý ngoại lệ tiêu chuẩn. Hơn nữa, PHP 5 đã thêm các giao diện và cho phép triển khai nhiều giao diện. Có các giao diện đặc biệt cho phép các đối tượng tương tác với hệ thống thời gian chạy. Các đối tượng triển khai ArrayAccess có thể được sử dụng với cú pháp mảng và các đối tượng triển khai Iterator hoặc IteratorAggregate có thể được sử dụng với cấu trúc ngôn ngữ foreach. Không có tính năng bảng ảo trong công cụ, vì vậy các biến tĩnh được gắn với tên thay vì tham chiếu tại thời điểm biên dịch

Nếu nhà phát triển tạo một bản sao của một đối tượng bằng cách sử dụng từ clone dành riêng, công cụ Zend sẽ kiểm tra xem phương thức __clone[] đã được xác định chưa. Nếu không, nó sẽ gọi một __clone[] mặc định sẽ sao chép các thuộc tính của đối tượng. Nếu một phương thức __clone[] được định nghĩa, thì nó sẽ chịu trách nhiệm thiết lập các thuộc tính cần thiết trong đối tượng được tạo. Để thuận tiện, công cụ sẽ cung cấp một hàm nhập các thuộc tính của đối tượng nguồn, vì vậy lập trình viên có thể bắt đầu với một bản sao giá trị phụ của đối tượng nguồn và chỉ ghi đè các thuộc tính cần thay đổi

Sau đây là một ví dụ cơ bản về lập trình hướng đối tượng trong PHP

class Person { public $firstName; public $lastName; public function __construct[$firstName, $lastName = ''] { // optional second argument $this->firstName = $firstName; $this->lastName = $lastName; } public function greet[] { return 'Hello, my name is ' . $this->firstName . [[$this->lastName != ''] ? [' ' . $this->lastName] : ''] . '.'; } public static function staticGreet[$firstName, $lastName] { return 'Hello, my name is ' . $firstName . ' ' . $lastName . '.'; } } $he = new Person['John', 'Smith']; $she = new Person['Sally', 'Davis']; $other = new Person['iAmine']; echo $he->greet[]; // prints "Hello, my name is John Smith." echo '
'; echo $she->greet[]; // prints "Hello, my name is Sally Davis." echo '
'; echo $other->greet[]; // prints "Hello, my name is iAmine." echo '
'; echo Person::staticGreet['Jane', 'Doe']; // prints "Hello, my name is Jane Doe."

Khả năng hiển thị của các thuộc tính và phương thức PHP được xác định bằng các từ khóa công khai, riêng tư và được bảo vệ. Giá trị mặc định là công khai, nếu chỉ sử dụng var; . Các mục được khai báo công khai có thể được truy cập ở mọi nơi. protected giới hạn quyền truy cập vào các lớp kế thừa [và lớp xác định mục]. riêng tư chỉ giới hạn khả năng hiển thị đối với lớp xác định mục. Các đối tượng cùng loại có quyền truy cập vào các thành viên riêng tư và được bảo vệ của nhau mặc dù chúng không giống nhau. Các tính năng hiển thị thành viên của PHP đôi khi được mô tả là "rất hữu ích. " Tuy nhiên, đôi khi chúng cũng được mô tả là "tốt nhất là không liên quan và tệ nhất là có hại tích cực. "

Triển khai

Bản triển khai PHP ban đầu, hoàn chỉnh và được sử dụng rộng rãi nhất được cung cấp bởi Zend Engine và được gọi đơn giản là PHP. Để phân biệt nó với các triển khai khác, đôi khi nó được gọi một cách không chính thức là "Zend PHP". Zend Engine biên dịch mã nguồn PHP nhanh chóng thành một định dạng bên trong mà nó có thể thực thi, do đó nó hoạt động như một trình thông dịch. Nó cũng là "triển khai tham chiếu" của PHP, vì PHP không có đặc điểm kỹ thuật chính thức và do đó, ngữ nghĩa của Zend PHP xác định ngữ nghĩa của chính PHP. Do ngữ nghĩa phức tạp và nhiều sắc thái của PHP, được xác định bởi cách thức hoạt động của Zend, rất khó để các triển khai cạnh tranh cung cấp khả năng tương thích hoàn toàn

Mô hình thực thi một yêu cầu cho mỗi tập lệnh của PHP và thực tế Zend Engine là một trình thông dịch dẫn đến sự kém hiệu quả; . Để tăng tốc thời gian thực thi và không phải biên dịch mã nguồn PHP mỗi khi trang web được truy cập, các tập lệnh PHP cũng có thể được triển khai ở định dạng nội bộ của công cụ PHP bằng cách sử dụng bộ nhớ cache opcode, hoạt động bằng cách lưu vào bộ nhớ đệm dạng đã biên dịch của . Bộ nhớ cache opcode, Zend Opcache, được tích hợp vào PHP kể từ phiên bản 5. 5. Một ví dụ khác về bộ đệm opcode được sử dụng rộng rãi là Bộ đệm PHP thay thế [APC], có sẵn dưới dạng phần mở rộng PECL

Trong khi Zend PHP vẫn là triển khai phổ biến nhất, một số triển khai khác đã được phát triển. Một số trong số này là trình biên dịch hoặc hỗ trợ biên dịch JIT và do đó mang lại lợi ích về hiệu suất so với Zend PHP với chi phí thiếu khả năng tương thích PHP đầy đủ. triển khai thay thế bao gồm những điều sau đây

  • Máy ảo HipHop [HHVM] – do Facebook phát triển và có sẵn dưới dạng mã nguồn mở, máy này chuyển đổi mã PHP thành mã byte cấp cao [thường được gọi là ngôn ngữ trung gian], sau đó được dịch động thành mã máy x86-64 trong thời gian chạy bởi một
  • Parrot – một máy ảo được thiết kế để chạy các ngôn ngữ động một cách hiệu quả;
  • Phalanger – biên dịch PHP thành mã byte Ngôn ngữ trung gian chung [CIL]
  • HipHop – được phát triển tại Facebook và có sẵn dưới dạng mã nguồn mở, ứng dụng này chuyển đổi các tập lệnh PHP thành mã C++, sau đó biên dịch mã kết quả, giúp giảm tải cho máy chủ tới 50%. Vào đầu năm 2013, Facebook đã từ chối nó để ủng hộ HHVM vì nhiều lý do, bao gồm khó khăn khi triển khai và thiếu hỗ trợ cho toàn bộ ngôn ngữ PHP, bao gồm các cấu trúc create_function[] và eval[]

cấp phép

PHP là phần mềm miễn phí được phát hành theo Giấy phép PHP, quy định rằng

Các sản phẩm có nguồn gốc từ phần mềm này không được gọi là "PHP", cũng không được xuất hiện "PHP" trong tên của chúng mà không có sự cho phép trước bằng văn bản từ group@php. net. Bạn có thể chỉ ra rằng phần mềm của bạn hoạt động cùng với PHP bằng cách nói "Foo for PHP" thay vì gọi nó là "PHP Foo" hoặc "phpfoo"

Hạn chế sử dụng tên PHP này làm cho Giấy phép PHP không tương thích với Giấy phép Công cộng Chung [GPL], trong khi Giấy phép Zend không tương thích do điều khoản quảng cáo tương tự như điều khoản của giấy phép BSD ban đầu

Phát triển và cộng đồng

PHP bao gồm nhiều thư viện nguồn mở và miễn phí khác nhau trong bản phân phối nguồn của nó hoặc sử dụng chúng để tạo ra các bản dựng nhị phân PHP. Về cơ bản, PHP là một hệ thống nhận biết Internet với các mô-đun tích hợp để truy cập máy chủ Giao thức truyền tệp [FTP] và nhiều máy chủ cơ sở dữ liệu, bao gồm PostgreSQL, MySQL, Microsoft SQL Server và SQLite [là cơ sở dữ liệu nhúng], máy chủ LDAP và các máy chủ khác. Nhiều hàm quen thuộc với các lập trình viên C, chẳng hạn như các hàm trong họ stdio, có sẵn trong các bản dựng PHP tiêu chuẩn

PHP cho phép các nhà phát triển viết các tiện ích mở rộng bằng C để thêm chức năng cho ngôn ngữ PHP. Các phần mở rộng PHP có thể được biên dịch tĩnh thành PHP hoặc được tải động khi chạy. Nhiều tiện ích mở rộng đã được viết để thêm hỗ trợ cho Windows API, quản lý quy trình trên các hệ điều hành giống Unix, chuỗi nhiều byte [Unicode], cURL và một số định dạng nén phổ biến. Các tính năng khác của PHP được cung cấp thông qua các tiện ích mở rộng bao gồm tích hợp với IRC, tạo hình ảnh động và nội dung Adobe Flash, Đối tượng dữ liệu PHP [PDO] dưới dạng lớp trừu tượng được sử dụng để truy cập cơ sở dữ liệu và thậm chí tổng hợp giọng nói. Một số hàm cốt lõi của ngôn ngữ, chẳng hạn như các hàm xử lý chuỗi và mảng, cũng được triển khai dưới dạng phần mở rộng. Dự án Thư viện cộng đồng mở rộng PHP [PECL] là kho lưu trữ các tiện ích mở rộng cho ngôn ngữ PHP

Một số dự án khác, chẳng hạn như Zephir, cung cấp khả năng tạo các tiện ích mở rộng PHP bằng ngôn ngữ cấp cao và được biên dịch thành các tiện ích mở rộng PHP gốc. Cách tiếp cận như vậy, thay vì viết các phần mở rộng PHP trực tiếp bằng C, giúp đơn giản hóa việc phát triển các phần mở rộng và giảm thời gian cần thiết để lập trình và thử nghiệm

Nhóm PHP bao gồm mười người [tính đến năm 2015]. thies C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski

Zend Technologies cung cấp kỳ thi chứng chỉ cho các lập trình viên để trở thành nhà phát triển PHP được chứng nhận

Cài đặt và cấu hình

Có hai cách chính để thêm hỗ trợ cho PHP vào máy chủ web – dưới dạng mô-đun máy chủ web gốc hoặc dưới dạng tệp thực thi CGI. PHP có giao diện mô-đun trực tiếp được gọi là Giao diện lập trình ứng dụng máy chủ [SAPI], được hỗ trợ bởi nhiều máy chủ web bao gồm Máy chủ HTTP Apache, Microsoft IIS, Netscape [hiện không còn tồn tại] và iPlanet. Một số máy chủ web khác, chẳng hạn như OmniHTTPd, hỗ trợ Giao diện lập trình ứng dụng máy chủ Internet [ISAPI], là giao diện mô-đun máy chủ web của Microsoft. Nếu PHP không có hỗ trợ mô-đun cho máy chủ web, thì nó luôn có thể được sử dụng làm Giao diện cổng chung [CGI] hoặc bộ xử lý FastCGI;

PHP-FPM [FastCGI Process Manager] là một triển khai FastCGI thay thế cho PHP, đi kèm với bản phân phối PHP chính thức kể từ phiên bản 5. 3. 3. Khi so sánh với việc triển khai FastCGI cũ hơn, nó chứa một số tính năng bổ sung, chủ yếu hữu ích cho các máy chủ web tải nặng

Khi sử dụng PHP cho tập lệnh dòng lệnh, cần có tệp thực thi giao diện dòng lệnh PHP [CLI]. PHP hỗ trợ CLI SAPI kể từ PHP 4. 3. 0. Trọng tâm chính của SAPI này là phát triển các ứng dụng shell sử dụng PHP. Có khá nhiều điểm khác biệt giữa CLI SAPI và các SAPI khác, mặc dù chúng có chung nhiều hành vi

PHP cũng có thể được sử dụng để viết các ứng dụng giao diện người dùng đồ họa [GUI] trên máy tính để bàn, bằng cách sử dụng phần mở rộng PHP-GTK. PHP-GTK không có trong bản phân phối PHP chính thức và như một tiện ích mở rộng, nó chỉ có thể được sử dụng với các phiên bản PHP 5. 1. 0 và mới hơn. Cách phổ biến nhất để cài đặt PHP-GTK là biên dịch nó từ mã nguồn

Khi PHP được cài đặt và sử dụng trong môi trường đám mây, bộ công cụ phát triển phần mềm [SDK] được cung cấp để sử dụng các tính năng dành riêng cho đám mây. Ví dụ

  • Amazon Web Services cung cấp AWS SDK cho PHP
  • Windows Azure có thể được sử dụng với Windows Azure SDK cho PHP

Nhiều tùy chọn cấu hình được hỗ trợ, ảnh hưởng đến cả các tính năng và tiện ích mở rộng PHP cốt lõi. Tập tin cấu hình php. ini được tìm kiếm ở các vị trí khác nhau, tùy thuộc vào cách sử dụng PHP. Tệp cấu hình được chia thành nhiều phần khác nhau, trong khi một số tùy chọn cấu hình cũng có thể được đặt trong cấu hình máy chủ web

Sử dụng

Tổng quan về gói phần mềm LAMP, được hiển thị ở đây cùng với Squid

PHP là ngôn ngữ kịch bản có mục đích chung, đặc biệt phù hợp với phát triển web phía máy chủ, trong trường hợp đó, PHP thường chạy trên máy chủ web. Bất kỳ mã PHP nào trong tệp được yêu cầu đều được thực thi bởi thời gian chạy PHP, thường để tạo nội dung trang web động hoặc hình ảnh động được sử dụng trên các trang web hoặc nơi khác. Nó cũng có thể được sử dụng cho các ứng dụng giao diện người dùng đồ họa [GUI] phía máy khách và tập lệnh dòng lệnh. PHP có thể được triển khai trên hầu hết các máy chủ web, nhiều hệ điều hành và nền tảng và có thể được sử dụng với nhiều hệ thống quản lý cơ sở dữ liệu quan hệ [RDBMS]. Hầu hết các nhà cung cấp dịch vụ lưu trữ web đều hỗ trợ PHP để khách hàng của họ sử dụng. Nó được cung cấp miễn phí và Nhóm PHP cung cấp mã nguồn hoàn chỉnh để người dùng xây dựng, tùy chỉnh và mở rộng cho mục đích sử dụng của riêng họ

PHP hoạt động chủ yếu như một bộ lọc, lấy đầu vào từ một tệp hoặc luồng chứa văn bản và/hoặc hướng dẫn PHP và xuất ra một luồng dữ liệu khác. Thông thường, đầu ra sẽ là HTML, mặc dù nó có thể là JSON, XML hoặc dữ liệu nhị phân như định dạng hình ảnh hoặc âm thanh. Kể từ PHP 4, trình phân tích cú pháp PHP biên dịch đầu vào để tạo mã byte để Zend Engine xử lý, mang lại hiệu suất được cải thiện so với người tiền nhiệm trình thông dịch của nó

Ban đầu được thiết kế để tạo các trang web động, giờ đây PHP chủ yếu tập trung vào kịch bản phía máy chủ và nó tương tự như các ngôn ngữ kịch bản phía máy chủ khác cung cấp nội dung động từ máy chủ web tới máy khách, chẳng hạn như ASP của Microsoft. NET, Các trang JavaServer của Sun Microsystems và mod_perl. PHP cũng đã thu hút sự phát triển của nhiều khung phần mềm cung cấp các khối xây dựng và cấu trúc thiết kế để thúc đẩy phát triển ứng dụng nhanh [RAD]. Một số trong số này bao gồm PRADO, CakePHP, Symfony, CodeIgniter, Laravel, Yii Framework, Phalcon và Zend Framework, cung cấp các tính năng tương tự như các khung ứng dụng web khác

Kiến trúc LAMP đã trở nên phổ biến trong ngành công nghiệp web như một cách triển khai các ứng dụng web. PHP thường được sử dụng làm chữ P trong gói này cùng với Linux, Apache và MySQL, mặc dù chữ P cũng có thể đề cập đến Python, Perl hoặc một số kết hợp của ba. Các gói tương tự, WAMP và MAMP, cũng có sẵn cho Windows và OS X, với chữ cái đầu tiên là viết tắt của hệ điều hành tương ứng. Mặc dù cả PHP và Apache đều được cung cấp như một phần của bản cài đặt cơ sở Mac OS X, người dùng các gói này tìm kiếm một cơ chế cài đặt đơn giản hơn, có thể dễ dàng cập nhật hơn

Tính đến tháng 4 năm 2007, hơn 20 triệu miền Internet có các dịch vụ web được lưu trữ trên các máy chủ có cài đặt PHP và mod_php được ghi nhận là mô-đun Máy chủ HTTP Apache phổ biến nhất. Tính đến tháng 10 năm 2010, PHP đã được sử dụng làm ngôn ngữ lập trình phía máy chủ trên 75% tất cả các trang web có ngôn ngữ lập trình phía máy chủ [tính đến tháng 2 năm 2014, tỷ lệ này đã đạt 82%] và PHP là ngôn ngữ được sử dụng nhiều nhất. . Các hệ thống quản lý nội dung web được viết bằng PHP bao gồm MediaWiki, Joomla, eZ Publish, SilverStripe, WordPress, Drupal, Moodle, phần giao diện người dùng của Facebook, Known và Digg

Đối với các tình huống sử dụng cụ thể và nâng cao hơn, PHP cung cấp một cách được xác định rõ ràng và được ghi lại để viết các tiện ích mở rộng tùy chỉnh trong C hoặc C++. Bên cạnh việc mở rộng ngôn ngữ dưới dạng các thư viện bổ sung, các tiện ích mở rộng đang cung cấp một cách để cải thiện tốc độ thực thi ở những nơi quan trọng và có chỗ để cải thiện bằng cách sử dụng ngôn ngữ được biên dịch thực sự. PHP cũng cung cấp các cách được xác định rõ ràng để nhúng chính nó vào các dự án phần mềm khác. Bằng cách đó, PHP có thể dễ dàng được sử dụng làm ngôn ngữ kịch bản nội bộ cho một dự án khác, đồng thời cung cấp giao diện chặt chẽ với các cấu trúc dữ liệu nội bộ cụ thể của dự án

PHP đã nhận được nhiều ý kiến ​​trái chiều do thiếu hỗ trợ đa luồng ở cấp độ ngôn ngữ cốt lõi, mặc dù việc sử dụng các luồng có thể thực hiện được nhờ tiện ích mở rộng PECL "pthreads"

Bảo vệ

Trong năm 2013, 9% tất cả các lỗ hổng được liệt kê bởi Cơ sở dữ liệu về lỗ hổng quốc gia có liên quan đến PHP; . Các lỗi bảo mật kỹ thuật của chính ngôn ngữ hoặc của các thư viện cốt lõi của nó không thường xuyên [22 trong năm 2009, khoảng 1% tổng số mặc dù PHP áp dụng cho khoảng 20% ​​chương trình được liệt kê]. Nhận thấy rằng các lập trình viên mắc lỗi, một số ngôn ngữ bao gồm tính năng kiểm tra dấu vết để tự động phát hiện việc thiếu xác thực đầu vào gây ra nhiều vấn đề. Một tính năng như vậy đang được phát triển cho PHP, nhưng việc đưa nó vào một bản phát hành đã bị từ chối nhiều lần trong quá khứ

Có các bản vá bảo vệ nâng cao như Suhosin và Hardening-Patch, được thiết kế đặc biệt cho môi trường lưu trữ web

Có một số tính năng ngôn ngữ và tham số cấu hình [chủ yếu là các giá trị mặc định cho cài đặt thời gian chạy như vậy] khiến các ứng dụng PHP dễ gặp sự cố bảo mật. Trong số này, chỉ thị cấu hình magic_quotes_gpc và register_globals được biết đến nhiều nhất; . Hỗ trợ cho "dấu ngoặc kép ma thuật" và "đăng ký toàn cầu" không được dùng nữa kể từ PHP 5. 3. 0 và bị xóa kể từ PHP 5. 4. 0

Một ví dụ khác về lỗ hổng cài đặt thời gian chạy xuất phát từ việc không tắt thực thi PHP [thông qua chỉ thị cấu hình công cụ] cho thư mục lưu trữ hình ảnh đã tải lên; . Ngoài ra, việc bật tải động các tiện ích mở rộng PHP [thông qua chỉ thị cấu hình enable_dl] trong môi trường lưu trữ web được chia sẻ có thể dẫn đến các sự cố bảo mật

Ngoài ra, các chuyển đổi loại ngụ ý dẫn đến các giá trị không tương thích được coi là giống hệt với ý định của lập trình viên có thể dẫn đến các vấn đề bảo mật. Ví dụ: kết quả của phép so sánh "0e1234" == "0" sẽ đúng vì giá trị được so sánh đầu tiên sẽ được coi là ký hiệu khoa học của một số [0×101234] có giá trị bằng 0. Tính năng này dẫn đến lỗ hổng xác thực trong Simple Machines Forum, Typo3 và phpBB khi so sánh hàm băm mật khẩu MD5. Thay vào đó, nên sử dụng hàm strcmp hoặc toán tử nhận dạng [===];

Trong một phân tích năm 2013 về hơn 170.000 vụ thay đổi giao diện trang web, được xuất bản bởi Zone-H, kỹ thuật được sử dụng thường xuyên nhất [53%] là khai thác lỗ hổng bao gồm tệp, chủ yếu liên quan đến việc sử dụng các hàm PHP bao gồm, yêu cầu và allow_url_fopen không an toàn

PHP là viết tắt của từ gì?

PHP, ban đầu bắt nguồn từ Công cụ Trang chủ Cá nhân, giờ là viết tắt của PHP. Bộ tiền xử lý siêu văn bản , mà Câu hỏi thường gặp về PHP mô tả là "từ viết tắt đệ quy. " PHP thực thi trên máy chủ, trong khi một giải pháp thay thế có thể so sánh được, JavaScript, thực thi trên máy khách.

PHP ban đầu được gọi là gì?

PHP được hình thành vào khoảng mùa thu năm 1994 bởi Rasmus Lerdorf. Các phiên bản chưa phát hành ban đầu được sử dụng trên trang chủ của anh ấy để theo dõi xem ai đang xem sơ yếu lý lịch trực tuyến của anh ấy. Phiên bản đầu tiên được những người khác sử dụng đã có vào khoảng đầu năm 1995 và được gọi là Công cụ Trang chủ Cá nhân .

PHP trong tiếng Anh đơn giản là gì?

PHP là viết tắt của Bộ tiền xử lý siêu văn bản . Nó là ngôn ngữ kịch bản mã nguồn mở phía máy chủ được sử dụng để phát triển web động và có thể được nhúng vào mã HTML.

Tên đầy đủ của PHP là gì?

Dạng đầy đủ của PHP là Bộ tiền xử lý siêu văn bản . Nó được viết tắt trước đây là Trang chủ cá nhân. Nó là ngôn ngữ lập trình được sử dụng rộng rãi để xây dựng các ứng dụng web hoặc trang web. Nó là ngôn ngữ kịch bản phía máy chủ được mã hóa bằng HTML để phát triển Trang web động, Trang web tĩnh hoặc Ứng dụng web.

Chủ Đề