Hướng dẫn what is php known as? - php được gọi là gì?
PHP (từ viết tắt đệ quy cho $human_readable_date = $user->getBirthday()?->diffForHumans();1) là ngôn ngữ kịch bản đa năng nguồn mở được sử dụng rộng rãi, đặc biệt phù hợp để phát triển web và có thể được nhúng vào HTML. Show
Đẹp, nhưng điều đó có nghĩa là gì? Một ví dụ: Ví dụ #1 ví dụ giới thiệu $human_readable_date = $user->getBirthday()?->diffForHumans();2 $human_readable_date = $user->getBirthday()?->diffForHumans();3 $human_readable_date = $user->getBirthday()?->diffForHumans();4 Thay vì nhiều lệnh để xuất HTML (như đã thấy trong C hoặc Perl), các trang PHP chứa HTML với mã nhúng thực hiện "một cái gì đó" (trong trường hợp này, xuất ra "Hi, tôi là một tập lệnh PHP!"). Mã PHP được đặt trong các hướng dẫn xử lý kết thúc và khởi động đặc biệt $human_readable_date = $user->getBirthday()?->diffForHumans();5 và $human_readable_date = $user->getBirthday()?->diffForHumans();6 cho phép bạn nhảy vào và ra khỏi "chế độ PHP". Điều phân biệt PHP với một cái gì đó như JavaScript phía máy khách là mã được thực thi trên máy chủ, tạo HTML sau đó được gửi đến máy khách. Khách hàng sẽ nhận được kết quả chạy tập lệnh đó, nhưng sẽ không biết mã cơ bản là gì. Bạn thậm chí có thể định cấu hình máy chủ web của mình để xử lý tất cả các tệp HTML của mình bằng PHP và sau đó thực sự không có cách nào người dùng có thể biết những gì bạn có tay áo. Phần tốt nhất về việc sử dụng PHP là nó cực kỳ đơn giản cho một người mới đến, nhưng cung cấp nhiều tính năng nâng cao cho một lập trình viên chuyên nghiệp. Đừng ngại đọc danh sách dài các tính năng của PHP. Bạn có thể nhảy vào, trong một thời gian ngắn và bắt đầu viết các tập lệnh đơn giản trong vài giờ. Mặc dù sự phát triển của PHP tập trung vào kịch bản phía máy chủ, bạn có thể làm nhiều hơn với nó. Đọc tiếp, và xem thêm trong PHP có thể làm gì? Phần, hoặc đi đúng hướng dẫn giới thiệu nếu bạn chỉ quan tâm đến lập trình web. Không có người dùng đóng góp ghi chú cho trang này. Bài viết này là về ngôn ngữ kịch bản. Đối với các mục đích sử dụng khác, xem PHP (định hướng). PHP
PHP là một ngôn ngữ kịch bản đa năng hướng đến phát triển web. [5] Nó ban đầu được tạo ra bởi lập trình viên người Canada gốc Đan Mạch Rasmus Lerdorf vào năm 1993 và phát hành vào năm 1995. [6] [7] Việc triển khai tham chiếu PHP hiện được sản xuất bởi nhóm PHP. [8] PHP ban đầu là đại diện cho trang chủ cá nhân, [9] nhưng giờ đây nó là viết tắt của chủ nghĩa khởi tạo đệ quy PHP: Tiền xử lý siêu văn bản. [10] is a general-purpose scripting language geared toward web development.[5] It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1993 and released in 1995.[6][7] The PHP reference implementation is now produced by The PHP Group.[8] PHP originally stood for Personal Home Page,[9] but it now stands for the recursive initialism PHP: Hypertext Preprocessor.[10] Mã PHP thường được xử lý trên máy chủ web bởi trình thông dịch PHP được triển khai dưới dạng mô -đun, trình nền hoặc là giao diện cổng thông thường (CGI) có thể thực thi. Trên một máy chủ web, kết quả của mã PHP được giải thích và thực hiện & nbsp; - có thể là bất kỳ loại dữ liệu nào, chẳng hạn như Dữ liệu HTML hoặc Dữ liệu hình ảnh nhị phân & NBSP; - sẽ tạo thành toàn bộ hoặc một phần của phản hồi HTTP. Các hệ thống mẫu web khác nhau, hệ thống quản lý nội dung web và các khung web tồn tại có thể được sử dụng để sắp xếp hoặc tạo điều kiện cho việc tạo ra phản hồi đó. Ngoài ra, PHP có thể được sử dụng cho nhiều tác vụ lập trình bên ngoài bối cảnh web, chẳng hạn như các ứng dụng đồ họa độc lập [11] và điều khiển máy bay không người lái robot. [12] Mã PHP cũng có thể được thực thi trực tiếp từ dòng lệnh. Trình thông dịch PHP tiêu 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 chuyển rộng và có thể được triển khai trên hầu hết các máy chủ web trên nhiều hệ điều hành và nền tảng khác nhau. [13] Ngôn ngữ PHP phát triển mà không có đặc điểm kỹ thuật chính thức hoặc tiêu chuẩn cho đến năm 2014, với việc triển khai ban đầu đóng vai trò là tiêu chuẩn thực tế mà các triển khai khác nhằm tuân theo. Kể từ năm 2014, công việc đã tiếp tục tạo ra một đặc điểm kỹ thuật PHP chính thức. [14] W3Techs báo cáo rằng, kể từ tháng 10 & NBSP; 2022, "PHP được sử dụng bởi 74,4% của tất cả các trang web có ngôn ngữ lập trình phía máy chủ mà chúng tôi biết." [15] Php phiên bản 7.4 là phiên bản được sử dụng nhiều nhất. Hỗ trợ cho phiên bản 7.3 đã được giảm vào ngày 6 tháng 12 năm 2021. History[edit][edit]Lịch sử ban đầu [chỉnh sửa][edit]Sự phát triển của PHP bắt đầu vào năm 1993 [6] khi Rasmus Lerdorf viết một số chương trình giao diện Gateway (CGI) chung trong C, [16] [17] mà anh ấy đã sử dụng để duy trì trang chủ cá nhân của mình. Ông đã mở rộng chúng để làm việc với các biểu mẫu web và để liên lạc với cơ sở dữ liệu và gọi việc triển khai này là "Trình thông dịch trang chủ/mẫu 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 đơn giản, động. Để tăng tốc báo cáo lỗi và cải thiện mã, Lerdorf ban đầu đã công bố phát hành PHP/FI dưới dạng "Công cụ trang chủ cá nhân (Công cụ PHP) Phiên bản 1.0" trên nhóm thảo luận USENET comp.infosystems.www.Authoring.cgi vào ngày 8 tháng 6 năm 1995 . [1] [18] Bản phát hành này đã có chức năng cơ bản mà PHP có ngày hôm nay. Điều này bao gồm các biến giống như perl, xử lý hình thức và khả năng nhúng HTML. Cú pháp giống với Perl, nhưng đơn giản hơn, hạn chế hơn và ít nhất quán hơn. [8] Một ví dụ về cú pháp PHP sớm: [19] Hey, you are using Netscape!<p> Sorry, that record does not exist<p> Welcome !<p> You have credits left in your account.<p> PHP sớm không có ý định là một ngôn ngữ lập trình mới và phát triển hữu cơ, với Lerdorf lưu ý khi nhìn lại: "Tôi không biết làm thế nào để ngăn chặn nó, không bao giờ có ý định viết ngôn ngữ lập trình [...] 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. " 1997. Thực tế là PHP ban đầu không được thiết kế, mà thay vào đó được phát triển một cách hữu cơ đã dẫn đến việc đặt tên không nhất quán các chức năng và thứ tự không nhất quán của các tham số của chúng. [21] Trong một số trường hợp, các tên hàm được chọn để phù hợp với các thư viện cấp thấp hơn mà PHP đang "gói", [22] trong khi ở một số phiên bản rất sớm của PHP, độ dài của tên hàm được sử dụng bên trong như một hàm băm, vì vậy tên đã được chọn để cải thiện phân phối các giá trị băm. [23] Php 3 và 4 [Chỉnh sửa][edit]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 cơ sở của PHP & NBSP; 3, đổi tên ngôn ngữ thành từ viết tắt đệ quy Php: Tiền xử lý siêu văn bản. [8] [24] Sau đó, thử nghiệm công khai của PHP & NBSP; 3 đã bắt đầu, và buổi ra mắt chính thức diễn ra vào tháng 6 năm 1998. Suraski và Gutmans sau đó bắt đầu viết lại cốt lõi mới của PHP, sản xuất động cơ Zend vào năm 1999. [25] Họ cũng thành lập Zend Technologies ở Ramat Gan, Israel. [8] 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. [8] Đến tháng 8 năm 2008, chi nhánh này đã đạt đến phiên bản 4.4.9. PHP & NBSP; 4 hiện không còn được phát triển và cũng không có bất kỳ cập nhật bảo mật nào được lên kế hoạch phát hành. [26] [27] Php 5 [Chỉnh sửa][edit]Vào ngày 1 tháng 7 năm 2004, Php 5 đã được phát hành, được cung cấp bởi Zend Engine II mới. [8] PHP & NBSP; 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, tiện ích 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 hiệu suất. [28] Năm 2008, PHP & NBSP; 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 các phiên bản trước của PHP và đã được thêm vào phiên bản 5.3. [29] [30] Nhiều dự án nguồn mở cấp cao đã ngừng hỗ trợ PHP & NBSP; 4 trong mã mới từ ngày 5 tháng 2 năm 2008, vì Sáng kiến Gophp5, [31] được cung cấp bởi một tập đoàn của các nhà phát triển PHP thúc đẩy quá trình chuyển đổi từ PHP & NBSP; 4 sang PHP & NBSP; 5 . [32] [33] Theo thời gian, các thông dịch viên 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 nhị phân được xây dựng trước. [34] Đối với các phiên bản PHP 5.3 và 5.4, phân phối nhị phân Windows Windows duy nhất có sẵn là các bản dựng IA-32 32 bit, [35] [36] yêu cầu chế độ tương thích Windows 32 bit trong khi sử dụng Dịch vụ thông tin Internet (IIS) trên Windows 64 bit nền tảng. Php phiên bản 5.5 đã tạo ra các bản dựng 64 bit x86-64 có sẵn cho Microsoft Windows. [37] Hỗ trợ bảo mật chính thức cho Php 5.6 đã kết thúc vào ngày 31 tháng 12 năm 2018. [38] Php 6 và Unicode [Chỉnh sửa][edit]PHP đã nhận được các đánh giá hỗn hợp do thiếu hỗ trợ Unicode bản địa ở cấp độ ngôn ngữ cốt lõi. [39] [40] Năm 2005, một dự án do Andrei Zmievski đứng đầu đã được khởi xướng để mang lại hỗ trợ Unicode bản địa trong suốt PHP, bằng cách nhúng các thành phần quốc tế cho thư viện Unicode (ICU) và đại diện cho các chuỗi văn bản là UTF-16 trong nội bộ. [41] Vì điều này sẽ gây ra những thay đổi lớn cho 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 đây là 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 phát triển. [42] 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 bối cảnh web, dẫn đến sự chậm trễ trong dự án. [43] Kết quả là, bản phát hành PHP & NBSP; 5.3 đã được tạo vào năm 2009, với nhiều tính năng không phải là Unicode được đặt lại từ PHP & NBSP; 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 đã bị từ bỏ chính thức và bản phát hành PHP & NBSP; 5.4 đã được chuẩn bị có chứa hầu hết các tính năng không phải là không đơn lẻ từ PHP & NBSP; 6, chẳng hạn như đặc điểm và đóng lại liên kết lại. [44] 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 đến năm 2014, không có kế hoạch nào được thông qua. Php 7 [Chỉnh sửa][edit]Trong năm 2014 và 2015, một phiên bản PHP lớn mới đã được phát triển, PHP & NBSP; 7. Việc đánh số phiên bản này liên quan đến một số cuộc tranh luận giữa các nhà phát triển nội bộ. [45] Trong khi thử nghiệm php & nbsp; 6 Unicode chưa bao giờ được phát hành, một số bài báo và tiêu đề sách đã tham chiếu tên PHP & NBSP; 6, có thể gây ra sự nhầm lẫn nếu một bản phát hành mới sử dụng lại tên. [46] Sau khi bỏ phiếu, tên PHP & NBSP; 7 đã được chọn. [47] Nền tảng của PHP 7 là một nhánh PHP ban đầu được mệnh danh là Php tiếp theo (PHPNG). Nó được tác giả bởi Dmitry Stogov, Xinchen Hui và Nikita Popov, [48] và 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 động cơ Zend trong khi vẫn giữ được khả năng tương thích ngôn ngữ gần như hoàn chỉnh. [49] Đến 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 như 100%. Các thay đổi từ PHPNG giúp cải thiện hiệu suất trong các phiên bản trong tương lai dễ dàng hơn, vì các 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 để di chuyển thành công sang trình biên dịch chỉ trong thời gian (JIT). [50] Do những thay đổi đáng kể, động cơ Zend được làm lại được gọi là Zend Engine 3, thành công của Zend Engine 2 được sử dụng trong PHP & NBSP; 5. [51] Do những thay đổi nội bộ chính trong PHPNG, nó phải nhận được một phiên bản chính mới của PHP, thay vì phát hành PHP & NBSP; 5 nhỏ, theo quy trình phát hành của PHP. [52] 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 & NBSP; 7 đã tạo cơ hội cho 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ể, nó liên quan đến các thay đổi sau:
Php 7 cũng bao gồm các tính năng ngôn ngữ mới. Đáng chú ý nhất, nó đã giới thiệu các khai báo loại trả về cho các hàm [65] bổ sung cho các khai báo loại tham số hiện có và hỗ trợ cho các loại vô hướng (số nguyên, float, chuỗi và boolean) trong các khai báo tham số và loại trả về. [66] Php 8 [Chỉnh sửa][edit]Php 8 được phát hành vào ngày 26 tháng 11 năm 2020. Php 8 là phiên bản chính và đã phá vỡ các thay đổi từ các phiên bản trước. [67] [68] Các tính năng mới và những thay đổi đáng chú ý bao gồm: Biên dịch chỉ trong thời gian [Chỉnh sửa][edit]Việc biên dịch đúng lúc được hỗ trợ trong Php 8. [69] Trình biên dịch JIT của PHP 8 có thể cung cấp các cải tiến hiệu suất đáng kể cho một số trường hợp sử dụng, [70] [71] trong khi nhà phát triển PHP Nikita Popov tuyên bố rằng các cải tiến hiệu suất cho hầu hết các trang web sẽ ít đáng kể hơn so với nâng cấp từ PHP 5 lên PHP 7. [72] Những cải tiến đáng kể được dự kiến sẽ nhiều hơn cho các hoạt động kiểu toán học hơn so với các trường hợp sử dụng phát triển web thông thường. [72] Ngoài ra, trình biên dịch JIT cung cấp tiềm năng trong tương lai để chuyển một số mã từ C sang PHP, do cải thiện hiệu suất cho một số trường hợp sử dụng. [73] Bổ sung biểu thức khớp [Chỉnh sửa][edit]Php 8 đã giới thiệu biểu thức <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '4. [74] Biểu thức trận đấu tương tự về mặt khái niệm với câu lệnh <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '5 và nhỏ gọn hơn đối với một số trường hợp sử dụng. [75] Vì <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '4 là một biểu thức, kết quả của nó có thể bị cuốn vào một biến hoặc được trả về từ một hàm. [76] Loại thay đổi và bổ sung [Chỉnh sửa][edit]Php 8 đã giới thiệu các loại công đoàn, loại trả về <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '7 mới và loại <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '8 mới. [67] "Các thuộc tính", thường được gọi là "chú thích" trong các ngôn ngữ lập trình khác, đã được thêm vào Php 8, cho phép siêu dữ liệu được thêm vào các lớp. [67] <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '9 đã được thay đổi từ việc trở thành một tuyên bố thành một biểu thức. [77] Điều này cho phép các ngoại lệ được ném vào những nơi không thể trước đây. [67] Thay đổi cú pháp và bổ sung [Chỉnh sửa][edit]Php 8 bao gồm các thay đổi để cho phép các cú pháp thay thế, súc tích hơn hoặc nhất quán hơn trong một số kịch bản. Ví dụ, toán tử nullsafe tương tự như toán tử kết hợp null echo 'Hello, World!';
0, nhưng được sử dụng khi gọi các phương thức. [78] Đoạn mã sau sẽ không bị lỗi nếu echo 'Hello, World!';
1 trả về NULL:$human_readable_date = $user->getBirthday()?->diffForHumans(); Khuyến khích thuộc tính của hàm tạo đã được thêm vào dưới dạng "đường cú pháp", cho phép các thuộc tính lớp được đặt tự động khi các tham số được chuyển vào hàm tạo lớp. [67] Điều này làm giảm số lượng mã nồi hơi phải được viết. Các thay đổi nhỏ khác bao gồm hỗ trợ sử dụng echo 'Hello, World!';
2 trên các đối tượng, đóng vai trò thay thế cho việc sử dụng ________ 43; [67] bắt không bắt giữ trong các khối thử thử; Điều chỉnh cú pháp biến để giải quyết sự không nhất quán; Hỗ trợ cho các đối số được đặt tên; và hỗ trợ cho dấu phẩy trong danh sách tham số, điều này bổ sung tính nhất quán với sự hỗ trợ cho dấu phẩy trong các bối cảnh khác, chẳng hạn như trong các mảng.Thay đổi và bổ sung thư viện tiêu chuẩn [Chỉnh sửa][edit]
Thay đổi bổ sung [Chỉnh sửa][edit]
Php 8.1 [Chỉnh sửa][edit]Php 8.1 đã được phát hành vào ngày 25 tháng 11 năm 2021. Nó bao gồm một số cải tiến, chẳng hạn như liệt kê (còn được gọi là "Enums"), các thuộc tính đọc và mảng giải nén bằng các khóa chuỗi. [82] Hỗ trợ liệt kê [Chỉnh sửa][edit]Hỗ trợ cho việc liệt kê là một trong những tính năng nổi bật nhất của Php 8.1. [83] Enums cho phép các nhà phát triển thực thi các quốc gia trong cơ sở mã của họ. Dưới đây là một ví dụ về enum:
namespace App\Enums;
enum InvoiceStatus: string {
case draft = 'draft';
case pending = 'pending';
case paid = 'paid';
case expired = 'expired';
}
Các tính năng PHP 8.1 khác [Chỉnh sửa][edit]
Phát hành Lịch sử [Chỉnh sửa][edit]
Bắt đầu từ ngày 28 tháng 6 năm 2011, nhóm phát triển PHP đã thực hiện một dòng thời gian để phát hành các phiên bản mới của PHP. [52] Theo hệ thống này, ít nhất một bản phát hành sẽ xảy ra mỗi tháng. Một lần mỗi năm, 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ỏ ít nhất nên được hỗ trợ trong hai năm với các bản sửa lỗi bảo mật và lỗi, tiếp theo là ít nhất một năm chỉ sửa chữa bảo mật, với tổng số quá trình phát hành ba năm cho mỗi bản phát hành nhỏ. Không có tính năng mới, trừ khi nhỏ và khép kín, 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. Mascot[edit][edit]Linh vật Elephpant, PHP Linh vật của dự án PHP là Elephpant, một con voi xanh với logo PHP ở bên cạnh, được thiết kế bởi Vincent Pontier [181] vào năm 1998. [182] "Các chữ cái (PHP) đã hình thành hình dạng của một con voi nếu nhìn theo góc ngang." [183] Con voi đôi khi có màu khác nhau khi ở dạng đồ chơi sang trọng. Nhiều biến thể của linh vật này đã được thực hiện trong những năm qua. Chỉ những con voi dựa trên thiết kế ban đầu của Vincent Pontier mới được cộng đồng coi là chính thức. [184] Chúng là có thể sưu tập và một số trong số chúng là cực kỳ hiếm. [185] Syntax[edit][edit]Ứng dụng "Hello World" trong Php 7.4 đang chạy trên máy chủ phát triển tích hợp của nó 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: <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo ' Tuy nhiên, vì không có yêu cầu nào tồn tại đối với mã PHP được nhúng trong HTML, phiên bản đơn giản nhất của Hello, World! có thể được viết như thế này, với thẻ đóng function myAge(int $birthYear): string { // calculate the age by subtracting the birth year from the current year. $yearsOld = date('Y') - $birthYear; // return the age in a descriptive string. return $yearsOld . ($yearsOld == 1 ? ' year' : ' years'); } echo 'I am currently ' . myAge(1995) . ' old.';3 được bỏ qua như được ưa thích trong các tệp có chứa mã PHP thuần túy. [186] echo 'Hello, World!';
Trình thông dịch PHP chỉ thực thi mã PHP trong các trình phân cách của nó. Bất cứ điều gì bên ngoài các phân định của nó không được xử lý bởi PHP, mặc dù văn bản không phải Php vẫn phải chịu sự kiểm soát các cấu trúc được mô tả trong mã PHP. Các phân định phổ biến nhất là function myAge(int $birthYear): string { // calculate the age by subtracting the birth year from the current year. $yearsOld = date('Y') - $birthYear; // return the age in a descriptive string. return $yearsOld . ($yearsOld == 1 ? ' year' : ' years'); } echo 'I am currently ' . myAge(1995) . ' old.';4 để mở và function myAge(int $birthYear): string { // calculate the age by subtracting the birth year from the current year. $yearsOld = date('Y') - $birthYear; // return the age in a descriptive string. return $yearsOld . ($yearsOld == 1 ? ' year' : ' years'); } echo 'I am currently ' . myAge(1995) . ' old.';3 để đóng các phần PHP. Các hình thức rút ngắn function myAge(int $birthYear): string { // calculate the age by subtracting the birth year from the current year. $yearsOld = date('Y') - $birthYear; // return the age in a descriptive string. return $yearsOld . ($yearsOld == 1 ? ' year' : ' years'); } echo 'I am currently ' . myAge(1995) . ' old.';6 cũng tồn tại. Phân đoạn ngắn này làm cho các tệp script ít hoạt độ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 đó nó không được khuyến khích. [187] [188] Ngược lại, không có khuyến nghị nào đối với thẻ ngắn Echo ________ 67. [189] Trước PHP & NBSP; 5.4.0, cú pháp ngắn này cho function myAge(int $birthYear): string { // calculate the age by subtracting the birth year from the current year. $yearsOld = date('Y') - $birthYear; // return the age in a descriptive string. return $yearsOld . ($yearsOld == 1 ? ' year' : ' years'); } echo 'I am currently ' . myAge(1995) . ' old.';8 chỉ hoạt động với cài đặt cấu hình function myAge(int $birthYear): string { // calculate the age by subtracting the birth year from the current year. $yearsOld = date('Y') - $birthYear; // return the age in a descriptive string. return $yearsOld . ($yearsOld == 1 ? ' year' : ' years'); } echo 'I am currently ' . myAge(1995) . ' old.';9 được bật, trong khi đối với PHP & NBSP; 5.4.0 và sau đó luôn có sẵn. [190] [191] [187] 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 nội dung không phải Php, chẳng hạn như mã JavaScript hoặc đánh dấu HTML. [192] Vì vậy, ngắn nhất "Xin chào, thế giới!" Chương trình được viết bằng PHP là: Hình thức phân định đầu tiên, function myAge(int $birthYear): string { // calculate the age by subtracting the birth year from the current year. $yearsOld = date('Y') - $birthYear; // return the age in a descriptive string. return $yearsOld . ($yearsOld == 1 ? ' year' : ' years'); } echo 'I am currently ' . myAge(1995) . ' old.';4 và function myAge(int $birthYear): string { // calculate the age by subtracting the birth year from the current year. $yearsOld = date('Y') - $birthYear; // return the age in a descriptive string. return $yearsOld . ($yearsOld == 1 ? ' year' : ' years'); } echo 'I am currently ' . myAge(1995) . ' old.';3, 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 hình thành chính xác. [193] Đ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ủ tự nó được hình thành tốt XML. Các biến được tiền tố với ký hiệu đô la và một loại không cần phải được chỉ định trước. PHP & NBSP; Tuy nhiên, trước PHP & NBSP; 7, không thể sử dụng khai báo loại với các loại vô hướng như số nguyên hoặc chuỗi. [66] Dưới đây là một ví dụ về cách các biến PHP được khai báo và khởi tạo.
$name = 'John'; // variable of string type being declared and initialized
$age = 18; // variable of integer type being declared and initialized
$height = 5.3; // variable of double type being declared and initialized
echo $name . ' is ' . $height . "m tall\n"; // concatenating variables and strings
echo "$name is $age years old."; // interpolating variables to string
?>
Không giống như tên chức năng và tên lớp, tên biến nhạy cảm. Cả hai chuỗi được trích xuất 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. [194] PHP coi Newlines là khoảng trắng theo cách của ngôn ngữ dạng tự do và các tuyên bố bị chấm dứt bởi một dấu chấm phẩy. [195] PHP có ba loại Cú pháp bình luận: function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"2 Điểm khối và ý kiến nội tuyến; function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"3 hoặc function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"4 được sử dụng cho các bình luận một dòng. [196] Tuyên bố function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"5 là một trong một số cơ sở PHP cung cấp cho văn bản đầu ra. Về từ khóa và cú pháp ngôn ngữ, PHP tương tự như cú pháp kiểu C. function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"6 Các điều kiện, function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"7 và function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"8 Các vòng lặp và lợi nhuận chức năng tương tự nhau trong cú pháp với các ngôn ngữ như C, C ++, C#, Java và Perl. Kiểu dữ liệu [Chỉnh sửa][edit]PHP được gõ lỏng lẻo. Nó lưu trữ các số nguyên trong một phạm vi phụ thuộc vào nền tảng, dưới dạng số nguyên có chữ ký 32, 64 hoặc 128 bit tương đương với loại dài ngôn ngữ C. Các số nguyên không dấu được chuyển đổi thành các giá trị đã ký trong một số tình huống nhất định, đó là hành vi khác nhau đối với nhiều ngôn ngữ lập trình khác. [197] Các biến số nguyên có thể được gán bằng số thập phân (dương và âm), octal, thập lục phân và các ký hiệu nhị phân. Số điểm nổi 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 cách sử dụng ký hiệu điểm nổi, hoặc hai dạng ký hiệu khoa học. [198] PHP có loại Boolean gốc tương tự như các loại Boolean bản địa trong Java và C ++. Sử dụng các quy tắc chuyển đổi kiểu Boolean, các giá trị khác không được hiểu là đúng và không là sai, như trong Perl và C ++. [198] Kiểu dữ liệu null đại diện cho một biến không có giá trị; function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"9 là giá trị duy nhất cho phép cho loại dữ liệu này. [198] Các biến của loại "tài nguyên" đại diện cho các tham chiếu đến các tài nguyên từ các nguồn bên ngoài. Chúng thường được tạo bởi các chức năng từ một tiện ích mở rộng cụ thể và chỉ có thể được xử lý bởi các chức năng từ cùng một phần mở rộng; Ví dụ bao gồm tài nguyên tệp, hình ảnh và cơ sở dữ liệu. [198] Mảng có thể chứa các yếu 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 mảng khác. Thứ tự được bảo tồn trong danh sách các giá trị và trong các băm có cả khóa và giá trị, và hai có thể được xen kẽ. [198] PHP cũng hỗ trợ các chuỗi, có thể được sử dụng với các trích dẫn đơn, trích dẫn kép, cú pháp NowDoc hoặc Heredoc. [199] Thư viện PHP tiêu chuẩn (SPL) cố gắng giải quyết các vấn đề tiêu chuẩn và thực hiện các giao diện và lớp truy cập dữ liệu hiệu quả. [200]Standard PHP Library (SPL) attempts to solve standard problems and implements efficient data access interfaces and classes.[200] Functions[edit][edit]PHP xác định một loạt các hàm lớn trong ngôn ngữ cốt lõi và nhiều chức năng cũng có sẵn trong các phần mở rộng khác nhau; Các chức năng này được ghi lại rõ ràng trong tài liệu PHP trực tuyến. [201] Tuy nhiên, thư viện tích hợp có nhiều quy ước đặt tên và sự không nhất quán liên quan, như được mô tả trong lịch sử ở trên. Các chức năng tùy chỉnh có thể được xác định bởi nhà phát triển: function myAge(int $birthYear): string { // calculate the age by subtracting the birth year from the current year. $yearsOld = date('Y') - $birthYear; // return the age in a descriptive string. return $yearsOld . ($yearsOld == 1 ? ' year' : ' years'); } echo 'I am currently ' . myAge(1995) . ' old.'; Tính đến năm 2022, đầu ra của chương trình mẫu trên là "Tôi hiện đang 27 tuổi". Thay cho các con trỏ chức năng, các chức năng trong PHP có thể được tham chiếu bằng một chuỗi chứa tên của chúng. Theo cách này, các chức năng PHP bình thường có thể được sử dụng, ví dụ, như các cuộc gọi lại hoặc trong các bảng chức năng. [202] 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 tạo mẫu. [201] [202] 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 thời gian chạy về việc có nên xác định chức năng hay không. Có một hàm function getAdder(int $x): Closure { return fn(int $y): int => $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 exception0 xác định xem một hàm có tên nhất định có được xác định hay không. Các cuộc gọi chức năng phải sử dụng dấu ngoặc đơn, ngoại trừ các hàm tạo hàm lớp không đối thủ được gọi với toán tử PHP function getAdder(int $x): Closure { return fn(int $y): int => $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 exception1, trong trường hợp dấu ngoặc đơn là tùy chọn. Kể từ PHP & NBSP; 4.0.1 function getAdder(int $x): Closure { return fn(int $y): int => $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 exception2, một trình bao bọc mỏng xung quanh function getAdder(int $x): Closure { return fn(int $y): int => $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 exception3, cho phép tạo các hàm PHP bình thường được tạo trong quá trình thực hiện chương trình; Nó không được dùng trong PHP & NBSP; 7.2 và bị loại bỏ trong PHP & NBSP; 8.0 [203] có lợi cho cú pháp cho các hàm ẩn danh hoặc "đóng" [204] có thể nắm bắt các biến từ phạm vi xung quanh, được thêm vào trong PHP & NBSP; 5.3. Cú pháp mũi tên tốc ký đã được thêm vào trong Php 7.4: [205] function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10" Trong ví dụ trên, hàm function getAdder(int $x): Closure { return fn(int $y): int => $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 exception4 tạo ra một đóng bằng cách sử dụng đối số được truyền function getAdder(int $x): Closure { return fn(int $y): int => $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 exception5 (từ khóa
$name = 'John'; // variable of string type being declared and initialized
$age = 18; // variable of integer type being declared and initialized
$height = 5.3; // variable of double type being declared and initialized
echo $name . ' is ' . $height . "m tall\n"; // concatenating variables and strings
echo "$name is $age years old."; // interpolating variables to string
?>
8 nhập một biến từ bối cảnh từ vựng), có một đối số bổ sung function getAdder(int $x): Closure { return fn(int $y): int => $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 exception7 và trả về việc đóng được tạo cho người gọi. Chức năng như vậy là một đối tượng hạng nhất, có 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 chức năng khác, v.v. [206] Bất thường đối với một ngôn ngữ được đánh máy động, PHP hỗ trợ các khai báo loại trên các tham số chức năng, được thực thi trong thời gian chạy. Điều này đã được hỗ trợ cho các lớp và giao diện kể từ PHP & NBSP; 5.0, cho các mảng kể từ PHP & NBSP; 5.1, cho "các loại gọi" kể từ các loại PHP & NBSP; 5.4 và Scalar (Integer, Float, String và Boolean) kể từ Php & NBSP; 7.0. [66] PHP & NBSP; 7.0 cũng có các khai báo loại cho các loại trả về chức năng, được biểu thị bằng cách đặt tên loại sau danh sách các tham số, trước một dấu hai chấm. [65] Ví dụ: hàm function getAdder(int $x): Closure { return fn(int $y): int => $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 exception8 từ ví dụ trước có thể được chú thích bằng các loại như vậy trong PHP & NBSP; 7: function getAdder(int $x): Closure { return fn(int $y): int => $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, khai báo loại vô hướng tuân theo các nguyên tắc gõ yếu. Vì vậy, ví dụ, nếu loại tham số là function getAdder(int $x): Closure { return fn(int $y): int => $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 exception9, PHP sẽ cho phép không chỉ số nguyên, mà còn các chuỗi số, phao hoặc booleans có thể chuyển đổi được chuyển sang hàm đó và sẽ chuyển đổi chúng. [66] Tuy nhiên, PHP & NBSP; 7 có chế độ "gõ nghiêm ngặt", khi được sử dụng, không cho phép các chuyển đổi đó cho các cuộc gọi chức năng và trả về trong một tệp. [66] Đối tượng PHP [Chỉnh sửa][edit]Chức năng lập trình hướng đối tượng cơ bản đã được thêm vào trong PHP & NBSP; 3 và được cải thiện trong PHP & NBSP; 4. [8] Điều này cho phép PHP để có được sự trừu tượng hơn nữa, làm cho các nhiệm vụ sáng tạo dễ dàng hơn cho các lập trình viên sử dụng ngôn ngữ. Xử lý đối tượng đã được viết lại hoàn toàn cho PHP & NBSP; 5, mở rộng bộ tính năng và hiệu suất nâng cao. [207] 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ị. [207] Hạn chế của phương pháp này là mã phải sử dụng nhiều các biến "tham chiếu" của PHP nếu nó muốn sửa đổi một đối tượng mà nó được truyền thay vì tạo một bản sao của nó. Trong cách tiếp cận mới, các đối tượng được tham chiếu bằng tay cầm, và 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, các lớp cuối cùng, phương pháp trừu tượng và phương pháp 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 tạo, tương tự như các ngôn ngữ hướng đối tượng khác như C ++ và mô hình xử lý ngoại lệ tiêu chuẩn. Hơn nữa, các giao diện được thêm vào của PHP & NBSP; 5 và cho phép thực hiện 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 thực hiện ArrayAccess có thể được sử dụng với cú pháp mảng và các đối tượng triển khai trình lặp hoặc iteratoraggregate có thể được sử dụng với cấu trúc ngôn ngữ
namespace App\Enums;
enum InvoiceStatus: string {
case draft = 'draft';
case pending = 'pending';
case paid = 'paid';
case expired = 'expired';
}
7. Không có tính năng bảng ảo trong động cơ, vì vậy các biến tĩnh được liên kết với tên thay vì tham chiếu tại thời điểm biên dịch. [208]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ừ dành riêng
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
1, động cơ Zend sẽ kiểm tra xem phương thức
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
2 có được xác định hay không. Nếu không, nó sẽ gọi một mặc định
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
2 sẽ sao chép các thuộc tính của đối tượng. Nếu phương thức
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
2 được xác định, thì nó sẽ chịu trách nhiệm đặt các thuộc tính cần thiết trong đối tượng được tạo. Để thuận tiện, độ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, do đó, lập trình viên có thể bắt đầu với bản sao giá trị của đối tượng nguồn và chỉ ghi đè các thuộc tính cần thay đổi. [209]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ách sử dụng các từ khóa
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
5,
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
6 và
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
7. Mặc định là công khai, nếu chỉ sử dụng VAR;
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
8 là một từ đồng nghĩa với
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
5. Các mục được tuyên bố
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
5 có thể được truy cập ở mọi nơi.
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
7 giới hạn quyền truy cập vào các lớp kế thừa (và cho lớp xác định mục).
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
6 chỉ giới hạn khả năng hiển thị đối với lớp xác định mục. [210] 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 phải là cùng một trường hợp.Example[edit][edit]Sau đây là một ví dụ cơ bản về lập trình hướng đối tượng trong Php 8:
abstract class User
{
protected string $name;
public function __construct(string $name)
{
// make first letter uppercase and the rest lowercase
$this->name = ucfirst(strtolower($name));
}
public function greet(): string
{
return "Hello, my name is " . $this->name;
}
abstract public function job(): string;
}
class Student extends User
{
public function __construct(string $name, private string $course)
{
parent::__construct($name);
}
public function job(): string
{
return "I learn " . $this->course;
}
}
class Teacher extends User
{
public function __construct(string $name, private array $teachingCourses)
{
parent::__construct($name);
}
public function job(): string
{
return "I teach " . implode(", ", $this->teachingCourses);
}
}
$students = [
new Student("Alice", "Computer Science"),
new Student("Bob", "Computer Science"),
new Student("Charlie", "Business Studies"),
];
$teachers = [
new Teacher("Dan", ["Computer Science", "Information Security"]),
new Teacher("Erin", ["Computer Science", "3D Graphics Programming"]),
new Teacher("Frankie", ["Online Marketing", "Business Studies", "E-commerce"]),
];
foreach ([$students, $teachers] as $users) {
echo $users[0]::class . "s:\n";
array_walk($users, function (User $user) {
echo "{$user->greet()}, {$user->job()}\n";
});
}
Chương trình này xuất bản như sau: $human_readable_date = $user->getBirthday()?->diffForHumans();0 Implementations[edit][edit]Việc triển khai PHP hoàn chỉnh duy nhất là bản gốc, được gọi đơn giản là PHP. Nó được sử dụng rộng rãi nhất và được cung cấp bởi động cơ Zend. Để phân loại nó khỏi các triển khai khác, đôi khi nó được gọi là "Zend PHP". Zend Engine biên dịch mã nguồn PHP trên định dạng nội bộ mà nó có thể thực thi, do đó nó hoạt động như một trình thông dịch. [211] [212] Đây 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 PHP. Do ngữ nghĩa phức tạp và 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 hiện một kịch bản đơn của PHP và thực tế là động cơ Zend là một trình thông dịch, dẫn đến không hiệu quả; Do đó, các sản phẩm khác nhau đã được phát triển để giúp cải thiện hiệu suất PHP. Để tăng tốc độ thời gian thực hiện 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 động cơ PHP bằng cách sử dụng bộ đệm opcode, hoạt động bằng cách lưu trữ dạng được biên dịch của Một tập lệnh PHP (opcodes) trong bộ nhớ được chia sẻ để tránh chi phí phân tích cú pháp và biên dịch mã mỗi khi tập lệnh chạy. Bộ đệm Opcode, Zend Opcache, được tích hợp vào PHP kể từ phiên bản 5.5. [213] 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 tiện ích mở rộng PECL. [214] 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 biên dịch JIT hỗ trợ, và do đó mang lại lợi ích hiệu suất so với Zend PHP với chi phí thiếu khả năng tương thích PHP đầy đủ. Các triển khai thay thế bao gồm các vấn đề sau:
Licensing[edit][edit]PHP là phần mềm miễn phí được phát hành theo giấy phép PHP, quy định rằng: [219]
Hạn chế này đối với việc sử dụng "PHP" 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ư giấy phép BSD ban đầu. [220] Phát triển và cộng đồng [chỉnh sửa][edit]PHP bao gồm các thư viện nguồn miễn phí và nguồn mở khác nhau trong phân phối nguồn của nó hoặc sử dụng chúng trong các bản dựng nhị phân PHP. PHP về cơ bản là một hệ thống nhận thức Internet với các mô-đun tích hợp để truy cập các 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) . Nhiều chức năng quen thuộc với các lập trình viên C. PHP cho phép các nhà phát triển viết các tiện ích mở rộng trong C để thêm chức năng vào ngôn ngữ PHP. Các tiện ích mở rộng PHP có thể được biên dịch tĩnh thành PHP hoặc được tải động trong thời gian chạy. Nhiều tiện ích mở rộng đã được viết để thêm hỗ trợ cho API Windows, Quản lý quy trình trên các hệ điều hành giống UNIX, Chuỗi Multibyte (Unicode), Curl và một số định dạng nén phổ biến. Các tính năng PHP khác có sẵn thông qua các tiện ích mở rộng bao gồm tích hợp với Chat Relay Chat (IRC), tạo hình ảnh động và nội dung flash adobe, đối tượng dữ liệu PHP (PDO) như một lớp trừu tượng được sử dụng để truy cập cơ sở dữ liệu, [222] [223] [224] [225] [226] [227] [228] và thậm chí tổng hợp lời nói. Một số chức năng cốt lõi của ngôn ngữ, chẳng hạn như các chức năng xử lý các chuỗi và mảng, cũng được thực hiện dưới dạng phần mở rộng. [229] Dự án Thư viện Cộng đồng mở rộng PHP (PECL) là một kho lưu trữ cho các phần mở rộng cho ngôn ngữ PHP. [230] Một số dự án khác, chẳng hạn như Zephir, cung cấp khả năng mở rộng PHP được tạo bằng ngôn ngữ cấp cao và được biên dịch thành các phần 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 trong C, đơ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. [231] Đến tháng 12 năm 2018, nhóm PHP bao gồm mười người: Thies C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead và Andrei Zmiev. Zend Technologies cung cấp chứng nhận PHP dựa trên kỳ thi PHP & NBSP; 7 [233] (và trước đây dựa trên PHP & NBSP; 5.5) để các lập trình viên trở thành nhà phát triển PHP được chứng nhận. PHP Foundation [Chỉnh sửa][edit]Vào ngày 26 tháng 11 năm 2021, Blog JetBrains đã công bố thành lập Quỹ PHP, nơi sẽ tài trợ cho việc thiết kế và phát triển PHP. [234] Cài đặt và cấu hình [Chỉnh sửa][edit]Ví dụ đầu ra của hàm phpinfo () trong PHP 7.1 Có hai cách chính để thêm hỗ trợ cho PHP vào máy chủ web & nbsp; - như một mô -đun máy chủ web gốc hoặc là một CGI có thể thực thi. 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 Apache HTTP Server, Microsoft IIS và IPLANET Web Server. 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, nó luôn có thể được sử dụng làm giao diện cổng thông thường (CGI) hoặc bộ xử lý FASTCGI; Trong trường hợp đó, máy chủ web được cấu hình để sử dụng thực thi CGI của PHP để xử lý tất cả các yêu cầu cho các tệp PHP. [235] PHP-FPM (Trình quản lý quy trình FASTCGI) là triển khai FASTCGI thay thế cho PHP, được gói với phân phối PHP chính thức kể từ phiên bản 5.3.3. [236] 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 là hữu ích cho các máy chủ được tải rất nhiều. [237] Khi sử dụng PHP cho tập lệnh dòng lệnh, cần thực thi giao diện dòng lệnh PHP (CLI). PHP hỗ trợ giao diện lập trình ứng dụng máy chủ CLI (SAPI) kể từ PHP & NBSP; 4.3.0. [238] Trọng tâm chính của SAPI này là phát triển các ứng dụng vỏ bằng PHP. Có khá nhiều sự 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. [239] PHP có giao diện mô -đun trực tiếp được gọi là SAPI cho các máy chủ web khác nhau; [240] trong trường hợp PHP & NBSP; 5 và Apache & NBSP; 2.0 trên Windows, nó được cung cấp dưới dạng tệp DLL có tên Php5Apache2.dll, [241] là mô -đun rằng, trong số các chức năng khác, cung cấp một giao diện giữa PHP và máy chủ web, được triển khai dưới dạng mà máy chủ hiểu. Hình thức này là những gì được gọi là SAPI.php5apache2.dll,[241] which is a module that, among other functions, provides an interface between PHP and the web server, implemented in a form that the server understands. This form is what is known as a SAPI. Có nhiều loại SAPI khác nhau cho các phần mở rộng máy chủ web khác nhau. Ví dụ, ngoài những người được liệt kê ở trên, các SAPI khác cho ngôn ngữ PHP bao gồm giao diện cổng thông thường và giao diện dòng lệnh. [240] [242] 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) của máy tính để bàn, bằng cách sử dụng tiện ích mở rộng PHP-GTK. PHP-GTK không được bao gồm trong phân phối PHP chính thức, [235] và như một phần mở rộng, nó chỉ có thể được sử dụng với các phiên bản PHP 5.1.0 trở lên. Cách phổ biến nhất để cài đặt PHP-GTK là biên dịch nó từ mã nguồn. [243] Khi PHP được cài đặt và sử dụng trong môi trường đám mây, bộ dụng cụ phát triển phần mềm (SDK) được cung cấp để sử dụng các tính năng cụ thể của đám mây. Ví dụ:
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. [246] [247] Tệp cấu hình $human_readable_date = $user->getBirthday()?->diffForHumans();05 được tìm kiếm ở các vị trí khác nhau, tùy thuộc vào cách sử dụng PHP. [248] Tệp cấu hình được chia thành các phần khác nhau, [249] 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. [250] Use[edit][edit]Tổng quan rộng rãi về gói phần mềm đèn, được hiển thị ở đây cùng với Squid PHP là ngôn ngữ kịch bản đa năng, đặ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 hiện bởi thời gian chạy PHP, thường là để 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. [251] Nó cũng có thể được sử dụng cho các ứng dụng giao diện người dùng (GUI) dòng máy khách (GUI). 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 lưu trữ web hỗ trợ PHP để sử dụng bởi khách hàng của họ. Nó có sẵn miễn phí và nhóm PHP cung cấp mã nguồn đầy đủ để người dùng xây dựng, tùy chỉnh và mở rộng để sử dụng riêng. [13] Được thiết kế ban đầu để tạo các trang web động, PHP hiện tập trung chủ yếu vào tập lệnh phía máy chủ, [252] 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 đến máy khách, chẳng hạn như ASP.Net của Microsoft , Trang Javaserver của Sun Microsystems, [253] và $human_readable_date = $user->getBirthday()?->diffForHumans();06. 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à Laminas, cung cấp các tính năng tương tự như các khung web khác. Kiến trúc đèn đã 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. [254] PHP thường được sử dụng làm P trong gói này cùng với Linux, Apache và MySQL, mặc dù P cũng có thể đề cập đến Python, Perl hoặc một số hỗn hợp của ba. Các gói tương tự, WAMP và MAMP, cũng có sẵn cho Windows và MacOS, với chữ cái đầu tiên dành cho 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 cài đặt cơ sở MacOS, người dùng của 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. Đối với các kịch bản sử dụng cụ thể và nâng cao hơn, PHP cung cấp một cách được xác định rõ và được ghi lại để viết các tiện ích mở rộng tùy chỉnh trong C hoặc C ++. [255] [256] [257] [258] [259] [260] [261] 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 hiện trong đó nó rất 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ự. [262] [263] PHP cũng cung cấp các cách được xác định rõ để nhúng 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 như một ngôn ngữ kịch bản nội bộ cho một dự án khác, cũng 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. [264] PHP đã nhận được các đánh giá hỗn hợp do thiếu hỗ trợ cho đa luồng ở cấp độ ngôn ngữ cốt lõi, [265] mặc dù sử dụng các luồng được thực hiện bởi tiện ích mở rộng PECL "Pthreads". [266] [267] Một giao diện dòng lệnh, PHP-CLI và hai công cụ tập lệnh máy chủ Windows Script ActiveX cho PHP đã được sản xuất. Thống kê phổ biến và sử dụng [Chỉnh sửa][edit]PHP được sử dụng cho các hệ thống quản lý nội dung web bao gồm MediaWiki, [268] WordPress, [269] Joomla, [270] Drupal, [271] Moodle, [272] EZ Publish, EZ Platform và Silverstripe. [273] Kể từ tháng 1 & NBSP; 2013, PHP đã được sử dụng trong hơn 240 & nbsp; triệu trang web (39% trong số những người được lấy mẫu) và được cài đặt trên 2.1 & nbsp; triệu máy chủ web. [274] Kể từ tháng 3 & NBSP; 2021, PHP đã được sử dụng làm ngôn ngữ lập trình phía máy chủ trên 79,1% trang web, giảm từ 83,5% trước đó, trong đó ngôn ngữ có thể được xác định và Php 7 là phiên bản được sử dụng nhiều nhất của ngôn ngữ với 50,3% của Tất cả các trang web trên web bằng phiên bản đó. [275] Security[edit][edit]Trong năm 2019, 11% của tất cả các lỗ hổng được liệt kê bởi cơ sở dữ liệu lỗ hổng quốc gia có liên quan đến PHP; [276] trong lịch sử, khoảng 30% của tất cả các lỗ hổng được liệt kê kể từ năm 1996 trong cơ sở dữ liệu này được liên kết với PHP. Các lỗ hổng 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 năm 2009, khoảng 1% tổng số mặc dù PHP áp dụng cho khoảng 20% các chương trình được liệt kê). Nhận ra rằng các lập trình viên phạm sai lầm, một số ngôn ngữ bao gồm kiểm tra kỹ thuậ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, [278] 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ứ. [279] [280] Có các bản vá bảo vệ nâng cao như suhosin và hardening-patch, đặc biệt được thiết kế cho môi trường lưu trữ web. [281] Trong lịch sử, các phiên bản cũ của PHP có một số tham số cấu hình và giá trị mặc định cho các cài đặt thời gian chạy đó khiến một số ứng dụng PHP dễ bị các vấn đề về bảo mật. Trong số này, các chỉ thị cấu hình $human_readable_date = $user->getBirthday()?->diffForHumans();07 và ____ 50 [282] là các chỉ thị được biết đến nhiều nhất; Cái sau làm cho bất kỳ tham số URL nào trở thành biến PHP, mở một đường dẫn cho các lỗ hổng bảo mật nghiêm trọng bằng cách cho phép kẻ tấn công đặt giá trị của bất kỳ biến toàn cầu không được giới thiệu nào và can thiệp vào việc thực hiện tập lệnh PHP. Hỗ trợ cho các cài đặt "Trích dẫn ma thuật" và "đăng ký toàn cầu" đã bị phản đối kể từ PHP & NBSP; 5.3.0 và bị xóa khỏi PHP & NBSP; 5.4.0. [283] Một ví dụ khác cho lỗ hổng cài đặt thời gian chạy tiềm năng xuất phát từ việc không tắt thực thi PHP (ví dụ bằng cách sử dụng Chỉ thị cấu hình $human_readable_date = $user->getBirthday()?->diffForHumans();09) [284] cho thư mục nơi lưu trữ các tệp được tải lên; cho phép nó có thể dẫn đến việc thực thi mã độc được nhúng trong các tệp được tải lên. [285] [286] [287] Thực tiễn tốt nhất là xác định vị trí thư mục hình ảnh bên ngoài gốc tài liệu có sẵn cho máy chủ web và phục vụ nó thông qua tập lệnh trung gian hoặc tắt thực thi PHP cho thư mục lưu trữ các tệp được tải lên. Ngoài ra, cho phép tải động của các tiện ích mở rộng PHP (thông qua Chỉ thị cấu hình $human_readable_date = $user->getBirthday()?->diffForHumans();10) [288] trong môi trường lưu trữ web được chia sẻ có thể dẫn đến các vấn đề bảo mật. [289] [290] Các chuyển đổi loại ngụ ý dẫn đến các giá trị khác nhau được coi là bình đẳng, đôi khi chống lạ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 so sánh $human_readable_date = $user->getBirthday()?->diffForHumans();11 là $human_readable_date = $user->getBirthday()?->diffForHumans();12, bởi vì các chuỗi có thể phân tích được khi các số được chuyển đổi thành số; Trong trường hợp này, giá trị so sánh đầu tiên được coi là ký hiệu khoa học có giá trị (0 × 101234), bằng không. Các lỗi như thế này dẫn đến các lỗ hổng xác thực trong Diễn đàn Máy đơn giản, [291] TYPO3 [292] và PHPBB [293] khi so sánh các băm mật khẩu MD5. Cách được khuyến nghị là sử dụng Hash_equals () (đối với an toàn tấn công thời gian), $human_readable_date = $user->getBirthday()?->diffForHumans();13 hoặc toán tử nhận dạng ( $human_readable_date = $user->getBirthday()?->diffForHumans();14), vì $human_readable_date = $user->getBirthday()?->diffForHumans();15 dẫn đến $human_readable_date = $user->getBirthday()?->diffForHumans();16. [294] $human_readable_date = $user->getBirthday()?->diffForHumans();11 is $human_readable_date = $user->getBirthday()?->diffForHumans();12, because strings that are parsable as numbers are converted to numbers; in this case, the first compared value is treated as scientific notation having the value (0×101234), which is zero. Errors like this resulted in authentication vulnerabilities in Simple Machines Forum,[291] Typo3[292] and phpBB[293] when MD5 password hashes were compared. The recommended way is to use hash_equals() (for timing attack safety), $human_readable_date = $user->getBirthday()?->diffForHumans();13 or the identity operator ( $human_readable_date = $user->getBirthday()?->diffForHumans();14), as $human_readable_date = $user->getBirthday()?->diffForHumans();15 results in $human_readable_date = $user->getBirthday()?->diffForHumans();16.[294] Trong một phân tích năm 2013 về hơn 170.000 độ khử trang web, được xuất bản bởi Vùng-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 không an toàn của các cấu trúc ngôn ngữ PHP $human_readable_date = $user->getBirthday()?->diffForHumans();17, $human_readable_date = $user->getBirthday()?->diffForHumans();18 và $human_readable_date = $user->getBirthday()?->diffForHumans();19. [[[[[ 295] [296] Kể từ tháng 4 & NBSP; 2021, W3Techs báo cáo rằng 64% trang web sử dụng PHP, sử dụng phiên bản 7.2 trở lên (không còn được nhóm phát triển PHP hỗ trợ) với 35% tất cả các trang web PHP sử dụng phiên bản 5.6 trở lên. [297] Phiên bản 5 vẫn được sử dụng bởi 24,5% của tất cả các trang web (tháng 9 năm 2021). [298] Rất khuyến khích di chuyển sang Php phiên bản 7 hoặc 8 và sử dụng $human_readable_date = $user->getBirthday()?->diffForHumans();20 thay vì $human_readable_date = $user->getBirthday()?->diffForHumans();21 hoặc $human_readable_date = $user->getBirthday()?->diffForHumans();22, vì các hàm sau không an toàn về mặt mật mã. Có hai cuộc tấn công có thể được thực hiện qua các nguồn entropy PHP: "Tấn công hạt giống" và "Tấn công phục hồi nhà nước". Với các công nghệ GPU hiện tại, kẻ tấn công có thể thực hiện các tính toán lên tới 230 MD5 mỗi giây với GPU $ 250, trong khi với thêm $ 500 có thể đạt tới 232 tính toán. [299] Kết hợp với "cuộc tấn công sinh nhật", điều này có thể dẫn đến các lỗ hổng an ninh nghiêm trọng. Xem thêm [sửa][edit]
References[edit][edit]
Đọc thêm [Chỉnh sửa][edit]Tệp âm thanh này được tạo từ bản sửa đổi của bài viết này ngày 23 & NBSP; tháng 11 & NBSP; 2011 và không phản ánh các chỉnh sửa tiếp theo.
Liên kết bên ngoài [Chỉnh sửa][edit]
PHP ban đầu được gọi là gì?PHP ban đầu là đại diện cho trang chủ cá nhân, nhưng giờ đây nó là viết tắt của chủ nghĩa khởi đầu đệ quy PHP: Tiền xử lý siêu văn bản.Personal Home Page, but it now stands for the recursive initialism PHP: Hypertext Preprocessor.
PHP được gọi là mã hóa là gì?PHP (Từ viết tắt đệ quy cho PHP: Bộ tiền xử lý siêu văn bản) là một ngôn ngữ kịch bản đa năng nguồn mở được sử dụng rộng rãi, đặc biệt phù hợp để phát triển web và có thể được nhúng vào HTML.a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML.
PHP là loại ngôn ngữ nào?PHP là ngôn ngữ kịch bản phía máy chủ nguồn mở mà nhiều nhà phát triển sử dụng để phát triển web.Đây cũng là một ngôn ngữ có mục đích chung mà bạn có thể sử dụng để thực hiện nhiều dự án, bao gồm cả giao diện người dùng đồ họa (GUI).open-source server-side scripting language that many devs use for web development. It is also a general-purpose language that you can use to make lots of projects, including Graphical User Interfaces (GUIs).
Là mã hóa PHP hay lập trình?PHP là ngôn ngữ lập trình phía máy chủ, nguồn mở có thể được sử dụng để tạo trang web, ứng dụng, hệ thống quản lý quan hệ khách hàng và nhiều hơn nữa.Đây là một ngôn ngữ đa năng được sử dụng rộng rãi có thể được nhúng vào HTML.programming language that can be used to create websites, applications, customer relationship management systems and more. It is a widely-used general-purpose language that can be embedded into HTML. |