Hướng dẫn is php is a programming language true or false? - php là một ngôn ngữ lập trình đúng hay sai?
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). Show
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 tiếng Đan Mạch-Canada Rasmus Lerdorf vào năm 1993. [6] Việc triển khai tham chiếu PHP hiện được sản xuất bởi nhóm PHP. [7] PHP ban đầu là đại diện cho trang chủ cá nhân, [8] 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. [9] is a general-purpose scripting language geared toward web development.[5] It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1993.[6] The PHP reference implementation is now produced by The PHP Group.[7] PHP originally stood for Personal Home Page,[8] but it now stands for the recursive initialism PHP: Hypertext Preprocessor.[9] 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 [10] và điều khiển máy bay không người lái robot. [11] 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 giao rộng rãi 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. [12] 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. [13] 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." [14] 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, [15] [16] mà ông đã 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] [17] 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. [7] Một ví dụ về cú pháp PHP sớm: [18] 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. " 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. [20] 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", [21] trong khi ở một số phiên bản đầu 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. [22] 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. [7] [23] 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. [24] Họ cũng thành lập Zend Technologies ở Ramat Gan, Israel. [7] 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. [7] Đế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. [25] [26] 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. [7] 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. [27] 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. [28] [29] 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, [30] đượ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 . [31] [32] 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. [33] Đố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, [34] [35] 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. [36] 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. [37] 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 gốc ở cấp độ ngôn ngữ cốt lõi. [38] [39] Năm 2005, một dự án do Andrei Zmievski đứng đầu đã được bắt đầu để 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ộ. [40] 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. [41] 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. [42] 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. [43] 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ộ. [44] 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. [45] Sau khi bỏ phiếu, tên PHP & NBSP; 7 đã được chọn. [46] 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, [47] 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. [48] Đế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). [49] 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. [50] 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. [51] 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 chức năng [64] 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ề. [65] 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. [66] [67] 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. [68] 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, [69] [70] 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. [71] 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. [71] 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. [72] Bổ sung biểu thức khớp [Chỉnh sửa][edit]Php 8 đã giới thiệu biểu thức
namespace App\Enums;
enum InvoiceStatus: string {
case draft = 'draft';
case pending = 'pending';
case paid = 'paid';
case expired = 'expired';
}
8. [73] Biểu thức trận đấu tương tự về mặt khái niệm với câu lệnh
namespace App\Enums;
enum InvoiceStatus: string {
case draft = 'draft';
case pending = 'pending';
case paid = 'paid';
case expired = 'expired';
}
9 và nhỏ gọn hơn đối với một số trường hợp sử dụng. [74] Vì
namespace App\Enums;
enum InvoiceStatus: string {
case draft = 'draft';
case pending = 'pending';
case paid = 'paid';
case expired = 'expired';
}
8 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. [75]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 '1 mới và loại <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '2 mới. [66] "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. [66] <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '3 đã được thay đổi từ việc trở thành một tuyên bố thành một biểu thức. [76] Đ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. [66] 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 <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '4, nhưng được sử dụng khi gọi các phương thức. [77] Đoạn mã sau sẽ không bị lỗi nếu <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '5 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. [66] Đ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 <html> <head> <title>PHP "Hello, World!" programtitle> head> <body> echo '6 trên các đối tượng, đóng vai trò thay thế cho việc sử dụng ________ 37; [66] 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. [81] 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. [82] 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. [51] 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 [180] vào năm 1998. [181] "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." [182] 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. [183] Chúng là có thể sưu tập và một số trong số chúng là cực kỳ hiếm. [184] 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
$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
?>
7 được bỏ qua như được ưa thích trong các tệp có chứa mã PHP thuần túy. [185] 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à
$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 để mở và
$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
?>
7 để đóng các phần PHP. 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.';0 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. [186] [187] Ngược lại, không có khuyến nghị nào đối với thẻ ngắn Echo ________ 61. [188] 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.';2 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.';3 được bật, trong khi đối với PHP & NBSP; 5.4.0 và sau đó luôn có sẵn. [189] [190] [186] 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. [191] 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,
$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 và
$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
?>
7, 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. [192] Đ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. [65] 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. [193] 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. [194] PHP có ba loại Cú pháp bình luậ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 Dấu hiệu bình luận khối và nội tuyế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.';7 hoặc 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 được sử dụng cho các nhận xét một dòng. [195] Tuyên bố 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 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"0 Các điều kiện, function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"1 và function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"2 và trả về 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. [196] 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. [197] 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 ++. [197] 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"3 là giá trị duy nhất cho phép cho loại dữ liệu này. [197] 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. [197] 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ẽ. [197] 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. [198] 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ả. [199]Standard PHP Library (SPL) attempts to solve standard problems and implements efficient data access interfaces and classes.[199] 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. [200] 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. [201] 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. [200] [201] 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($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"4 xác định xem một hàm có tên đã cho đã được xác định. 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($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"5, trong trường hợp dấu ngoặc đơn là tùy chọn. Kể từ PHP & NBSP; 4.0.1 function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"6, một trình bao bọc mỏng xung quanh function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"7, 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 [202] có lợi cho cú pháp cho các hàm ẩn danh hoặc "đóng" [203] 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: [204] 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($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"8 tạo ra một đóng bằng cách sử dụng đối số được truyền function getAdder($x) { return fn($y) => $x + $y; } $adder = getAdder(8); echo $adder(2); // prints "10"9 (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
?>
2 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 exception1 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. [205] 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. [65] 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. [64] 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 exception2 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 exception3, 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. [65] 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. [65] Đố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. [7] Đ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. [206] 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ị. [206] 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';
}
1. Không có tính năng bảng ảo trong động cơ, vì vậy các biến tĩnh được ràng buộc với tên thay vì tham chiếu tại thời điểm biên dịch. [207]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 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, động cơ Zend sẽ kiểm tra xem phương thức 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 exception6 có được xác định hay không. Nếu không, nó sẽ gọi một mặc định 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 exception6 sẽ sao chép các thuộc tính của đối tượng. Nếu phương thức 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 exception6 đượ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. [208] 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 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,
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";
});
}
0 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";
});
}
1. 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";
});
}
2 là một từ đồng nghĩa với 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. Các mục được tuyên bố 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 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";
});
}
1 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";
});
}
0 Chỉ giới hạn khả năng hiển thị đối với lớp xác định mục. [209] 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. [210] [211] Đâ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. [212] 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. [213] 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: [218]
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. [219] 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, [221] [222] [223] [224] [225] [226] [227] 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. [228] 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. [229] 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. [230] Đế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 [232] (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. [233] 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. [234] 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. [235] 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. [236] 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. [237] 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. [238] 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; [239] 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, [240] là một 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,[240] 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. [239] [241] 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, [234] 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. [242] When PHP is installed and used in cloud environments, software development kits (SDKs) are provided for using cloud-specific features. For example:
Numerous configuration options are supported, affecting both core PHP features and extensions.[245][246] Configuration file
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";
});
}
9 is searched for in
different locations, depending on the way PHP is used.[247] The configuration file is split into various sections,[248] while some of the configuration options can be also set within the web server
configuration.[249]Use[edit][edit]A broad overview of the LAMP software bundle, displayed here together with Squid PHP is a general-purpose scripting language that is especially suited to server-side web development, in which case PHP generally runs on a web server. Any PHP code in a requested file is executed by the PHP runtime, usually to create dynamic web page content or dynamic images used on websites or elsewhere.[250] It can also be used for command-line scripting and client-side graphical user interface (GUI) applications. PHP can be deployed on most web servers, many operating systems and platforms, and can be used with many relational database management systems (RDBMS). Most web hosting providers support PHP for use by their clients. It is available free of charge, and the PHP Group provides the complete source code for users to build, customize and extend for their own use.[12] Originally designed to create dynamic web pages, PHP now focuses mainly on server-side scripting,[251] and it is similar to other server-side scripting languages that provide dynamic content from a web server to a client, such as Microsoft's ASP.NET, Sun Microsystems' JavaServer Pages,[252] and $human_readable_date = $user->getBirthday()?->diffForHumans();00. PHP has also attracted the development of many software frameworks that provide building blocks and a design structure to promote rapid application development (RAD). Some of these include PRADO, CakePHP, Symfony, CodeIgniter, Laravel, Yii Framework, Phalcon and Laminas, offering features similar to other web frameworks. The LAMP architecture has become popular in the web industry as a way of deploying web applications.[253] PHP is commonly used as the P in this bundle alongside Linux, Apache and MySQL, although the P may also refer to Python, Perl, or some mix of the three. Similar packages, WAMP and MAMP, are also available for Windows and macOS, with the first letter standing for the respective operating system. Although both PHP and Apache are provided as part of the macOS base install, users of these packages seek a simpler installation mechanism that can be more easily kept up to date. For specific and more advanced usage scenarios, PHP offers a well defined and documented way for writing custom extensions in C or C++.[254][255][256][257][258][259][260] Besides extending the language itself in form of additional libraries, extensions are providing a way for improving execution speed where it is critical and there is room for improvements by using a true compiled language.[261][262] PHP also offers well defined ways for embedding itself into other software projects. That way PHP can be easily used as an internal scripting language for another project, also providing tight interfacing with the project's specific internal data structures.[263] PHP received mixed reviews due to lacking support for multithreading at the core language level,[264] though using threads is made possible by the "pthreads" PECL extension.[265][266] A command line interface, php-cli, and two ActiveX Windows Script Host scripting engines for PHP have been produced. Popularity and usage statistics[edit]PHP is used for Web content management systems including MediaWiki,[267] WordPress,[268] Joomla,[269] Drupal,[270] Moodle,[271] eZ Publish, eZ Platform, and SilverStripe.[272] As of January 2013, PHP was used in more than 240 million websites (39% of those sampled) and was installed on 2.1 million web servers.[273] As of March 2021, PHP was used as the server-side programming language on 79.1% of websites, down from 83.5% previously, where the language could be determined, and PHP 7 is the most used version of the language with 50.3% of all websites on the web using that version.[274] Security[edit][edit]In 2019, 11% of all vulnerabilities listed by the National Vulnerability Database were linked to PHP;[275] historically, about 30% of all vulnerabilities listed since 1996 in this database are linked to PHP. Technical security flaws of the language itself or of its core libraries are not frequent (22 in 2009, about 1% of the total although PHP applies to about 20% of programs listed). Recognizing that programmers make mistakes, some languages include taint checking to automatically detect the lack of input validation which induces many issues. Such a feature is being developed for PHP,[277] but its inclusion into a release has been rejected several times in the past.[278][279] 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. [280] 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();01 và ____ 44 [281] là những 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. [282] 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();03) [283] 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. [284] [285] [286] 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 ____104) [287] 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. [288] [289] 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();05 là $human_readable_date = $user->getBirthday()?->diffForHumans();06, 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, [290] TYPO3 [291] và PHPBB [292] 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 () (để an toàn tấn công thời gian), $human_readable_date = $user->getBirthday()?->diffForHumans();07 hoặc toán tử nhận dạng ( $human_readable_date = $user->getBirthday()?->diffForHumans();08), vì $human_readable_date = $user->getBirthday()?->diffForHumans();09 dẫn đến ________ 110. [293] $human_readable_date = $user->getBirthday()?->diffForHumans();05 is $human_readable_date = $user->getBirthday()?->diffForHumans();06, 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,[290] Typo3[291] and phpBB[292] when MD5 password hashes were compared. The recommended way is to use hash_equals() (for timing attack safety), $human_readable_date = $user->getBirthday()?->diffForHumans();07 or the identity operator ( $human_readable_date = $user->getBirthday()?->diffForHumans();08), as $human_readable_date = $user->getBirthday()?->diffForHumans();09 results in $human_readable_date = $user->getBirthday()?->diffForHumans();10.[293] Trong một phân tích năm 2013 về hơn 170.000 độ lệch 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();11, $human_readable_date = $user->getBirthday()?->diffForHumans();12 và $human_readable_date = $user->getBirthday()?->diffForHumans();13. [[[[ 294] [295] 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. [296] 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). [297] Rất khuyến khích di chuyển sang Php phiên bản 7 hoặc 8 và sử dụng Random_int () thay vì rand () hoặc mt_rand (), 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 tối đa 2^30 MD5 mỗi giây với GPU $ 250, trong khi với thêm $ 500 có thể đạt tới 2^32 tính toán. [298] 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]
Tại sao PHP không phải là ngôn ngữ lập trình?PHP là ngôn ngữ kịch bản vì chúng ta có thể nhúng mã PHP vào HTML. Nếu mã ngôn ngữ lập trình có thể được đưa vào ngôn ngữ khác hoặc tích hợp với ngôn ngữ hoặc tập lệnh khác được gọi là ngôn ngữ scip. PHP là ngôn ngữ phía máy chủ vì PHP yêu cầu máy chủ phải chạy mã.php requires server to run a code.
Ngôn ngữ lập trình nào được sử dụng trong PHP?PHP
HTML và PHP có phải là ngôn ngữ lập trình không?PHP là ngôn ngữ lập trình được sử dụng trong thiết kế web để tạo các trang web động.HTML cung cấp nền tảng và cấu trúc cho một trang web, trong khi các ngôn ngữ lập trình khác nhau cho phép bạn tạo các hoạt động bên trong của trang đó. used in web design to create dynamic web pages. HTML provides the foundation and structure for a web page, while various programming languages allow you to create the inner workings of that page.
Ngôn ngữ lập trình thực là gì?Ngôn ngữ lập trình là bất kỳ bộ quy tắc nào chuyển đổi chuỗi hoặc các yếu tố chương trình đồ họa trong trường hợp ngôn ngữ lập trình trực quan, thành các loại đầu ra mã máy.Ngôn ngữ lập trình là một loại ngôn ngữ máy tính và được sử dụng trong lập trình máy tính để thực hiện các thuật toán.any set of rules that converts strings, or graphical program elements in the case of visual programming languages, to various kinds of machine code output. Programming languages are one kind of computer language, and are used in computer programming to implement algorithms. |