PHP

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา

PHP
PHP-logo.svg
กระบวนทัศน์หลายกระบวนทัศน์ : ความจำเป็น , การทำงาน , เชิงวัตถุ , ขั้นตอน , ไตร่ตรอง
ออกแบบโดยราสมุส เลอร์ดอร์ฟ
นักพัฒนาทีมพัฒนา PHP, Zend Technologies
ปรากฏตัวครั้งแรก8 มิถุนายน 2538 ; 26 ปีที่แล้ว[1] [2] (1995-06-08)
ปล่อยที่มั่นคง
8.0.11 [3] Edit this on Wikidata / 23 กันยายน 2564 ; 7 วันที่ผ่านมา (23 September 2021)
ปล่อยตัวอย่าง
8.1.0 เบต้า 1 [4] Edit this on Wikidata / 22 กรกฎาคม 2564 ; 2 เดือนที่แล้ว (22 July 2021)
วินัยการพิมพ์แบบไดนามิก , อ่อนแอ

ตั้งแต่เวอร์ชัน 7.0:

ค่อยเป็นค่อยไป[5]
ภาษาการใช้งานC (โดยหลักแล้ว องค์ประกอบบางอย่างC++ )
OSเหมือนยูนิกซ์ , Windows , macOS , IBM i , OpenVMS
ใบอนุญาตใบอนุญาต PHP (เอ็นจิ้น Zend ส่วนใหญ่ภายใต้ใบอนุญาต Zend Engine )
นามสกุลไฟล์.php, .phar, .phtml, .pht,.phps
เว็บไซต์www .php .net Edit this at Wikidata
การใช้งานที่สำคัญ
Zend Engine , HHVM , PeachPie , Quercus , Parrot
ได้รับอิทธิพลจาก
Perl , HTML , C , C++ , Java , Tcl , [2] JavaScript , แฮ็ค[6]
ได้รับอิทธิพล
แฮ็ค , JSP , ASP

PHPเป็นวัตถุประสงค์ทั่วไป ภาษาสคริปต์ที่มุ่งสู่การพัฒนาเว็บ [7]เดิมสร้างขึ้นโดยRasmus Lerdorf โปรแกรมเมอร์ ชาวเดนมาร์ก - แคนาดาในปี 1994 [8]การใช้งานอ้างอิง PHP ถูกผลิตขึ้นโดย The PHP Group [9] PHP เดิมยืนสำหรับหน้าแรกส่วนบุคคล , [8]แต่ตอนนี้ยืนสำหรับrecursive ย่อPHP: Hypertext Preprocessor [10]

โค้ด PHP มักจะมีการประมวลผลบนเว็บเซิร์ฟเวอร์โดยมี PHP ล่ามนำมาใช้เป็นโมดูลเป็นภูตหรือเป็นCommon Gateway Interface (CGI) ปฏิบัติการ บนเว็บเซิร์ฟเวอร์ ผลลัพธ์ของโค้ด PHP ที่แปลและดำเนินการ ซึ่งอาจเป็นข้อมูลประเภทใดก็ได้ เช่นHTML ที่สร้างขึ้นหรือข้อมูลภาพไบนารีจะสร้างการตอบสนองHTTPทั้งหมดหรือบางส่วนต่างๆระบบเว็บแม่แบบเว็บระบบการจัดการเนื้อหาและกรอบเว็บที่มีอยู่ซึ่งสามารถใช้เพื่อประสานหรืออำนวยความสะดวกในการสร้างการตอบสนองนั้น นอกจากนี้ PHP สามารถใช้สำหรับงานเขียนโปรแกรมจำนวนมากนอกบริบทเว็บ เช่นแอปพลิเคชันกราฟิกแบบสแตนด์อโลน[11]และการควบคุมโดรนด้วยหุ่นยนต์ [12]โค้ด PHP ยังสามารถดำเนินการได้โดยตรงจากบรรทัดคำสั่ง

ล่าม PHP มาตรฐานขับเคลื่อนโดยZend เครื่องยนต์เป็นซอฟต์แวร์เสรีเผยแพร่ภายใต้ใบอนุญาต PHP PHP ได้รับการพอร์ตอย่างกว้างขวางและสามารถใช้งานได้บนเว็บเซิร์ฟเวอร์ส่วนใหญ่บนระบบปฏิบัติการและแพลตฟอร์มที่หลากหลาย [13]

ภาษา PHP พัฒนาขึ้นโดยไม่มีข้อกำหนดหรือมาตรฐานที่เป็นทางการเป็นลายลักษณ์อักษรจนถึงปี 2014 โดยการใช้งานดั้งเดิมทำหน้าที่เป็นมาตรฐานตามพฤตินัยซึ่งการใช้งานอื่น ๆ มุ่งหวังที่จะปฏิบัติตาม ตั้งแต่ปี 2014 งานได้ดำเนินต่อไปเพื่อสร้างข้อกำหนด PHP อย่างเป็นทางการ [14]

W3Techs รายงานว่า ณ วันที่เมษายน 2021 , "PHP จะถูกใช้โดย 79.2% ของเว็บไซต์ทั้งหมดที่มีฝั่งเซิร์ฟเวอร์ภาษาโปรแกรมที่เรารู้ว่า." [15]

ประวัติ

ประวัติตอนต้น

Rasmus Lerdorfผู้เขียนต้นฉบับCommon Gateway Interface (CGI) องค์ประกอบร่วมกับAndi GutmansและZeev Suraskiผู้เขียนparserที่ก่อตัวขึ้น PHP 3

การพัฒนา PHP เริ่มในปี 1994 เมื่อRasmus LerdorfเขียนหลายCommon Gateway Interface (CGI) โปรแกรมC , [16] [17]ซึ่งเขาใช้ในการรักษาของเขาในหน้าแรกส่วนบุคคลเขาขยายให้พวกเขาทำงานกับเว็บฟอร์มและสื่อสารกับฐานข้อมูลและเรียกการใช้งานนี้ว่า "Personal Home Page/Forms Interpreter" หรือ PHP/FI

PHP / FI สามารถใช้ในการสร้างง่ายโปรแกรมเว็บแบบไดนามิกเพื่อเร่งการรายงานจุดบกพร่องและปรับปรุงโค้ด เริ่มแรก Lerdorf ได้ประกาศเปิดตัว PHP/FI ในชื่อ "Personal Home Page Tools (PHP Tools) เวอร์ชัน 1.0" ในกลุ่มสนทนาUsenet comp.infosystems.www.authoring.cgiเมื่อวันที่ 8 มิถุนายน 1995 . [1] [18]รุ่นนี้มีฟังก์ชันพื้นฐานที่ PHP มีอยู่แล้วในปัจจุบัน นี้รวมPerl เหมือนตัวแปรการจัดการรูปแบบและความสามารถในการฝังHTML ไวยากรณ์คล้ายกับที่ของPerlแต่ก็ง่าย จำกัด มากขึ้นและสอดคล้องกันน้อย[9]

ตัวอย่างของไวยากรณ์ PHP ยุคแรก: [19]

<! - รวม / ข้อความ/ หัว html -->

<! - getenv  HTTP_USER_AGENT -> 
<! - ถ้า substr  $ exec_result  Mozilla -> 
  Hey ,  คุณ กำลัง ใช้ Netscape ! < P > 
<! - endif ->

<! - SQL  ฐานข้อมูล เลือก *  จาก ตาราง ที่ ใช้= '$ ชื่อผู้ใช้' -> 
<! - ifless  $ numentries  1 -> 
  ขออภัย,  ที่ บันทึก ไม่ ได้ อยู่< P > 
<! - endif  ทางออก-> 
  ยินดีต้อนรับ <!-- $user -->!< p > 
  คุณ มี <!-- $index : 0 -->  เครดิต เหลือ อยู่ใน บัญชีของคุณ <p >

<! - รวม / ข้อความ/ ส่วนท้าย html -->

PHP ยุคแรกไม่ได้ตั้งใจให้เป็นภาษาการเขียนโปรแกรมใหม่และเติบโตขึ้นอย่างเป็นธรรมชาติ โดย Lerdorf สังเกตเมื่อมองย้อนกลับไปว่า "ฉันไม่รู้ว่าจะหยุดมันได้อย่างไร ไม่เคยตั้งใจจะเขียนภาษาโปรแกรมเลย [...] ฉันมี ไม่รู้เลยว่าจะเขียนภาษาโปรแกรมอย่างไร ฉันก็แค่เพิ่มตรรกะขั้นต่อไประหว่างทาง" [20]ทีมพัฒนาเริ่มก่อตัวขึ้น และหลังจากทำงานหลายเดือนและทดสอบเบต้า ได้เปิดตัว PHP/FI 2 อย่างเป็นทางการในเดือนพฤศจิกายน 1997

ความจริงที่ว่า PHP ไม่ได้ถูกออกแบบแต่แรก แต่ได้รับการพัฒนาแบบออร์แกนิกแทน ทำให้เกิดการตั้งชื่อฟังก์ชันที่ไม่สอดคล้องกันและการจัดลำดับพารามิเตอร์ที่ไม่สอดคล้องกัน [21]ในบางกรณี ชื่อฟังก์ชันได้รับเลือกให้ตรงกับไลบรารีระดับล่างซึ่ง PHP นั้น "ห่อหุ้ม" [22]ในขณะที่ PHP เวอร์ชันแรกๆ ความยาวของชื่อฟังก์ชันถูกใช้ภายในเป็นฟังก์ชันแฮชชื่อเพื่อให้ได้รับการคัดเลือกในการปรับปรุงการกระจายของค่าแฮ [23]

PHP 3 และ 4

นี่คือตัวอย่างของโค้ด PHP ที่กำหนดเองสำหรับที่WordPress ระบบการจัดการเนื้อหา

Zeev SuraskiและAndi Gutmansเขียนparserในปี 1997 และกลายเป็นฐานของ PHP 3, การเปลี่ยนชื่อภาษาเพื่อrecursive ย่อ PHP: Hypertext Preprocessor [9] [24]หลังจากนั้น การทดสอบสาธารณะของ PHP 3 เริ่มต้นขึ้น และการเปิดตัวอย่างเป็นทางการก็มาถึงในเดือนมิถุนายน 2541 จากนั้น Suraski และ Gutmans ก็เริ่มเขียนใหม่ของ PHP's core ใหม่ โดยผลิตZend Engineในปี 2542 [25]พวกเขายังก่อตั้งZend เทคโนโลยีในRamat Gan , อิสราเอล [9]

วันที่ 22 พฤษภาคม 2000 เปิดตัว PHP 4 ซึ่งขับเคลื่อนโดย Zend Engine 1.0 [9]ภายในเดือนสิงหาคม 2551 สาขานี้มีเวอร์ชัน 4.4.9 แล้ว ตอนนี้ PHP 4 ไม่ได้อยู่ระหว่างการพัฒนาอีกต่อไป และไม่มีการอัพเดทความปลอดภัยใด ๆ ที่มีแผนจะเปิดตัว [26] [27]

PHP 5

เมื่อวันที่ 1 กรกฎาคม พ.ศ. 2547 ได้เปิดตัว PHP 5 ซึ่งขับเคลื่อนโดย Zend Engine II ใหม่[9] PHP 5 รวมคุณสมบัติใหม่ เช่น การสนับสนุนที่ดีขึ้นสำหรับการเขียนโปรแกรมเชิงวัตถุ ส่วนขยาย PHP Data Objects (PDO) (ซึ่งกำหนดอินเทอร์เฟซที่มีน้ำหนักเบาและสม่ำเสมอสำหรับการเข้าถึงฐานข้อมูล) และการปรับปรุงประสิทธิภาพมากมาย[28]ในปี 2008 PHP 5 กลายเป็นเวอร์ชันเสถียรเพียงเวอร์ชันเดียวที่อยู่ระหว่างการพัฒนาการเชื่อมโยงแบบคงที่ตอนปลายหายไปจาก PHP เวอร์ชันก่อนหน้า และเพิ่มในเวอร์ชัน 5.3 [29] [30]

โครงการโอเพ่นซอร์สที่มีชื่อเสียงหลายโครงการหยุดสนับสนุน PHP 4 ในโค้ดใหม่ตั้งแต่วันที่ 5 กุมภาพันธ์ 2008 เนื่องจากการริเริ่ม GoPHP5 [31]จัดทำโดยกลุ่มนักพัฒนา PHP ที่ส่งเสริมการเปลี่ยนจาก PHP 4 เป็น PHP 5 [32 ] [33]

เมื่อเวลาผ่านไป ล่าม PHP จะพร้อมใช้งานบนระบบปฏิบัติการแบบ 32 บิตและ64 บิตที่มีอยู่โดยส่วนใหญ่ไม่ว่าจะโดยการสร้างจากซอร์สโค้ด PHP หรือโดยใช้ไบนารีที่สร้างไว้ล่วงหน้า [34]สำหรับ PHP รุ่น 5.3 และ 5.4 ที่ใช้ได้เฉพาะMicrosoft Windowsกระจายไบนารีถูก 32 บิตIA-32สร้าง[35] [36]กำหนดโหมดความเข้ากันได้ของ Windows 32 บิตในขณะที่ใช้บริการข้อมูลทางอินเทอร์เน็ต (IIS) ใน 64 - แพลตฟอร์ม Windows บิต PHP เวอร์ชัน 5.5 ทำให้รุ่น 64 บิตx86-64พร้อมใช้งานสำหรับ Microsoft Windows [37]

การสนับสนุนความปลอดภัยอย่างเป็นทางการสำหรับ PHP 5.6 สิ้นสุดในวันที่ 31 ธันวาคม 2018 [38]

PHP 6 และ Unicode

PHP ได้รับการวิจารณ์แบบผสมเนื่องจากขาดการรองรับUnicodeดั้งเดิมที่ระดับภาษาหลัก [39] [40]ในปี 2548 โปรเจ็กต์ที่นำโดย Andrei Zmievski ได้ริเริ่มขึ้นเพื่อให้รองรับUnicodeดั้งเดิมทั่วทั้ง PHP โดยการฝังไลบรารีInternational Components for Unicode (ICU) และแสดงสตริงข้อความเป็นUTF-16ภายใน [41]เนื่องจากสิ่งนี้จะทำให้เกิดการเปลี่ยนแปลงครั้งใหญ่ทั้งภายในของภาษาและรหัสผู้ใช้ จึงมีการวางแผนที่จะเผยแพร่สิ่งนี้เป็นเวอร์ชัน 6.0 ของภาษา พร้อมด้วยคุณสมบัติหลักอื่นๆ ที่กำลังอยู่ระหว่างการพัฒนา [42]

อย่างไรก็ตาม การขาดแคลนนักพัฒนาที่เข้าใจการเปลี่ยนแปลงที่จำเป็น และปัญหาด้านประสิทธิภาพที่เกิดจากการแปลงเป็นและจาก UTF-16 ซึ่งไม่ค่อยได้ใช้ในบริบทของเว็บ ทำให้เกิดความล่าช้าในโครงการ [43]ด้วยเหตุนี้ การเปิดตัว PHP 5.3 จึงถูกสร้างขึ้นในปี 2009 โดยมีคุณสมบัติที่ไม่ใช่ Unicode มากมายที่ส่งกลับจาก PHP 6 โดยเฉพาะเนมสเปซ ในเดือนมีนาคม 2010 โปรเจ็กต์ในรูปแบบปัจจุบันถูกยกเลิกอย่างเป็นทางการ และการเปิดตัว PHP 5.4 ได้เตรียมฟีเจอร์ที่ไม่ใช่ Unicode ที่เหลืออยู่ส่วนใหญ่จาก PHP 6 เช่น traits และ closure re-binding [44]ความหวังแรกเริ่มคือจะมีการจัดทำแผนใหม่สำหรับการรวม Unicode แต่ภายในปี 2014 ยังไม่มีการนำมาใช้

PHP 7

ในช่วงปี 2014 และ 2015 ได้มีการพัฒนา PHP เวอร์ชันหลักใหม่ นั่นคือ PHP 7 การกำหนดหมายเลขของเวอร์ชันนี้เกี่ยวข้องกับการอภิปรายในหมู่นักพัฒนาภายใน[45]ในขณะที่การทดลอง PHP 6 Unicode ไม่เคยได้รับการเผยแพร่ บทความและชื่อหนังสือหลายฉบับได้อ้างอิงถึงชื่อ PHP 6 ซึ่งอาจทำให้เกิดความสับสนหากรุ่นใหม่จะใช้ชื่อซ้ำ[46]หลังจากโหวต ชื่อ PHP 7 ถูกเลือก[47]

รากฐานของ PHP 7 เป็นสาขาของ PHP ที่เดิมเรียกว่าPHP รุ่นต่อไป ( phpng ) มันถูกเขียนโดย Dmitry Stogov, Xinchen Hui และ Nikita Popov [48]และมุ่งที่จะเพิ่มประสิทธิภาพการทำงานของ PHP โดยการปรับโครงสร้าง Zend Engine ใหม่ในขณะที่ยังคงความเข้ากันได้ของภาษาที่เกือบจะสมบูรณ์[49]ภายในวันที่ 14 กรกฎาคม 2014 การวัดประสิทธิภาพบนWordPressซึ่งทำหน้าที่เป็นชุดมาตรฐานหลักสำหรับโครงการ phpng พบว่าประสิทธิภาพเพิ่มขึ้นเกือบ 100% การเปลี่ยนแปลงจาก phpng ช่วยให้ปรับปรุงประสิทธิภาพในเวอร์ชันต่อๆ ไปได้ง่ายขึ้น เนื่องจากโครงสร้างข้อมูลที่กะทัดรัดและการเปลี่ยนแปลงอื่นๆ ถูกมองว่าเหมาะสมกว่าสำหรับการย้ายที่ประสบความสำเร็จไปยังคอมไพเลอร์แบบทันเวลา (JIT)[50]เนื่องจากการเปลี่ยนแปลงที่สำคัญ Zend Engine ที่ทำใหม่จึงถูกเรียกว่า Zend Engine 3ซึ่งต่อจาก Zend Engine 2 ที่ใช้ใน PHP 5 [51]

เนื่องจากการเปลี่ยนแปลงภายในที่สำคัญใน phpng มันจะต้องได้รับหมายเลขเวอร์ชันหลักใหม่ของ PHP แทนที่จะเป็นรุ่นย่อยของ PHP 5 ตามกระบวนการเผยแพร่ของ PHP [52] PHP เวอร์ชันหลักได้รับอนุญาตให้ทำลายความเข้ากันได้ของโค้ดแบบย้อนหลัง ดังนั้น PHP 7 จึงเป็นโอกาสสำหรับการปรับปรุงอื่นๆ นอกเหนือจาก phpng ที่ต้องมีตัวแบ่งความเข้ากันได้แบบย้อนหลัง โดยเฉพาะอย่างยิ่ง มันเกี่ยวข้องกับการเปลี่ยนแปลงต่อไปนี้:

  • กลไกข้อผิดพลาดร้ายแรงหรือรับคืนระดับมรดก PHP หลายคนถูกแทนที่ด้วยเชิงวัตถุที่ทันสมัยข้อยกเว้น [53]
  • ไวยากรณ์สำหรับ dereference ของตัวแปรถูกทำใหม่เพื่อให้มีความสอดคล้องและสมบูรณ์ภายในมากขึ้น ทำให้สามารถใช้ตัวดำเนินการ->, [], (), {}, และ::, ด้วยนิพจน์ด้านซ้ายที่มีความหมายตามอำเภอใจ [54]
  • เลิกสนับสนุนวิธีการคอนสตรัคเตอร์แบบ 4 สไตล์ PHP ดั้งเดิมแล้ว [55]
  • พฤติกรรมของforeachคำสั่งถูกเปลี่ยนเพื่อให้คาดเดาได้มากขึ้น [56]
  • ตัวสร้างสำหรับบางคลาสในตัวของ PHP ซึ่งคืนค่า null เมื่อเกิดความล้มเหลวถูกเปลี่ยนเป็นข้อยกเว้นแทน เพื่อความสอดคล้อง [57]
  • อินเทอร์เฟซการเขียนโปรแกรมเซิร์ฟเวอร์แอปพลิเคชัน (SAPI) และส่วนขยายที่ไม่ได้รับการดูแลหรือเลิกใช้งานจำนวนมากถูกลบออกจากแกนหลักของ PHP โดยเฉพาะอย่างยิ่งmysqlส่วนขยายแบบเดิม [58]
  • พฤติกรรมของlist()โอเปอเรเตอร์ถูกเปลี่ยนเพื่อลบการสนับสนุนสำหรับสตริง [59]
  • การสนับสนุนถูกลบสำหรับตัวคั่นแบบ ASP แบบเดิม<%และ%>และ<script language="php"> ... </script>. [60]
  • แก้ไขการกำกับดูแลที่อนุญาตให้คำสั่ง switchมีหลายdefaultส่วน [61]
  • การสนับสนุนสำหรับการสนับสนุนเลขฐานสิบหกในการแปลงโดยนัยบางประเภทจากสตริงเป็นตัวเลขถูกลบออก [62]
  • ตัวดำเนินการ shift ซ้ายและshift ขวาถูกเปลี่ยนเพื่อให้ทำงานสอดคล้องกันมากขึ้นในแพลตฟอร์มต่างๆ [63]
  • การแปลงระหว่างตัวเลขทศนิยมและจำนวนเต็มมีการเปลี่ยนแปลง (เช่น อนันต์เปลี่ยนเป็นแปลงเป็นศูนย์) และดำเนินการอย่างสม่ำเสมอมากขึ้นในแพลตฟอร์มต่างๆ [63] [64]

PHP 7 ยังรวมคุณสมบัติภาษาใหม่ ที่โดดเด่นที่สุดคือ การประกาศประเภทการส่งคืนสำหรับฟังก์ชัน[65]ซึ่งเสริมการประกาศประเภทพารามิเตอร์ที่มีอยู่ และรองรับประเภทสเกลาร์ (จำนวนเต็ม ทุ่น สตริง และบูลีน) ในการประกาศพารามิเตอร์และประเภทการส่งคืน [66]

PHP 8

PHP 8 เปิดตัวเมื่อวันที่ 26 พฤศจิกายน 2020 PHP 8 เป็นเวอร์ชันหลักและมีการเปลี่ยนแปลงจากเวอร์ชันก่อนหน้า [67] [68]คุณลักษณะใหม่และการเปลี่ยนแปลงที่โดดเด่น ได้แก่:

การรวบรวมแบบทันเวลา

รองรับการคอมไพล์แบบทันเวลาใน PHP 8. [69]

คอมไพเลอร์ JITของ PHP 8 สามารถให้การปรับปรุงประสิทธิภาพที่สำคัญสำหรับกรณีการใช้งานบางกรณี [70] [71]นักพัฒนา PHP Nikita Popov กล่าวว่าการปรับปรุงประสิทธิภาพสำหรับเว็บไซต์ส่วนใหญ่จะมีความสำคัญน้อยกว่าการอัพเกรดจาก PHP 5 เป็น PHP 7 [72]การปรับปรุงประสิทธิภาพเนื่องจากการเพิ่มคอมไพเลอร์ JIT คาดว่าจะเป็น มีความสำคัญมากกว่าสำหรับการดำเนินการทางคณิตศาสตร์มากกว่ากรณีการใช้งานทั่วไปสำหรับการพัฒนาเว็บ [72]นอกจากนี้ คอมไพเลอร์ JIT ยังให้ศักยภาพในอนาคตในการย้ายโค้ดบางส่วนจาก C เป็น PHP เนื่องจากการปรับปรุงประสิทธิภาพสำหรับกรณีการใช้งานบางกรณี [73]

การเพิ่มนิพจน์การจับคู่

PHP 8 แนะนำmatchนิพจน์ [74]นิพจน์การจับคู่มีแนวคิดคล้ายกับswitchคำสั่งและมีขนาดกะทัดรัดกว่าสำหรับกรณีการใช้งานบางกรณี [75]เนื่องจากmatchเป็นนิพจน์ ผลลัพธ์จึงสามารถจับเป็นตัวแปรหรือส่งคืนจากฟังก์ชันได้ [76]

เปลี่ยนแปลงประเภทและเพิ่มเติม

PHP 8 แนะนำประเภทยูเนี่ยน ชนิดstaticส่งคืนใหม่และmixedประเภทใหม่ [67]

"แอตทริบิวต์" ซึ่งมักเรียกกันว่า "คำอธิบายประกอบ" ในภาษาการเขียนโปรแกรมอื่นๆ ถูกเพิ่มใน PHP 8 ซึ่งช่วยให้เพิ่มข้อมูลเมตาลงในคลาสได้ [67]

throwเปลี่ยนจากเป็นประโยคบอกเล่าเป็นนิพจน์ [77]อนุญาตให้โยนข้อยกเว้นในสถานที่ที่ไม่เคยทำมาก่อน [67]

การเปลี่ยนแปลงและเพิ่มเติมไวยากรณ์

PHP 8 มีการเปลี่ยนแปลงเพื่อให้มีรูปแบบอื่น กระชับมากขึ้น หรือสอดคล้องกันมากขึ้นในหลายสถานการณ์ ตัวอย่างเช่น ตัวดำเนินการ nullsafe จะคล้ายกับตัวดำเนินการการรวมค่า null ??แต่ใช้เมื่อเรียกใช้เมธอด [78]ข้อมูลโค้ดต่อไปนี้จะไม่แสดงข้อผิดพลาดหากgetBirthday()คืนค่าเป็น null:

$human_readable_date  =  $ผู้ใช้-> getBirthday () ?-> diffForHumans ();

โปรโมชั่นคอนสตรัคคุณสมบัติได้รับการเพิ่มเป็น " น้ำตาลประโยค " อนุญาตให้คุณสมบัติชั้นจะได้รับการตั้งค่าโดยอัตโนมัติเมื่อพารามิเตอร์ที่ผ่านเข้ามาในชั้นคอนสตรัค [67]สิ่งนี้จะลดจำนวนโค้ดสำเร็จรูปที่ต้องเขียน

การเปลี่ยนแปลงเล็กน้อยอื่น ๆ รวมถึงการสนับสนุนการใช้::classบนวัตถุ ซึ่งทำหน้าที่เป็นทางเลือกสำหรับการใช้get_class(); [67]การจับที่ไม่ได้จับในบล็อก try-catch; ปรับแต่งไวยากรณ์ของตัวแปรเพื่อแก้ไขความไม่สอดคล้องกัน การสนับสนุนสำหรับอาร์กิวเมนต์ที่มีชื่อ; และรองรับเครื่องหมายจุลภาคต่อท้ายในรายการพารามิเตอร์ ซึ่งเพิ่มความสอดคล้องด้วยการรองรับเครื่องหมายจุลภาคต่อท้ายในบริบทอื่นๆ เช่น ในอาร์เรย์

การเปลี่ยนแปลงและเพิ่มเติมไลบรารีมาตรฐาน

  • แผนที่อ่อนแอถูกเพิ่มใน PHP 8. WeakMapถืออ้างอิงถึงวัตถุ แต่อ้างอิงเหล่านี้ไม่ได้ป้องกันไม่ให้วัตถุดังกล่าวจากการเก็บขยะ [79]สิ่งนี้สามารถให้การปรับปรุงประสิทธิภาพในสถานการณ์ที่ข้อมูลถูกแคช ; นี้เป็นความเกี่ยวข้องโดยเฉพาะอย่างยิ่งสำหรับORMs [67]
  • การปรับอินเทอร์เฟซต่างๆ เช่น การเพิ่มการสนับสนุนสำหรับการสร้างอDateTimeอบเจ็กต์จากอินเทอร์เฟซ และการเพิ่มStringableอินเทอร์เฟซที่สามารถใช้สำหรับการบอกใบ้ประเภท
  • ฟังก์ชันใหม่ต่างๆ รวมถึง str_contains(), str_starts_with() และ str_ends_with(); [80] fdiv(); get_debug_type(); และ get_resource_id()
  • การใช้วัตถุของ token_get_all()

การเปลี่ยนแปลงเพิ่มเติม

  • นอกจากนี้ยังเพิ่มคำอธิบายประกอบประเภทลงในซอร์สโค้ด C ของ PHP เพื่อให้ฟังก์ชันและวิธีการภายในมี "ข้อมูลประเภทที่สมบูรณ์ในการสะท้อน" [81]
  • สืบทอดด้วยกรรมวิธีส่วนตัว
  • วิธีการบทคัดย่อในการปรับปรุงลักษณะ

ประวัติการวางจำหน่าย

เวอร์ชั่น วันที่วางจำหน่าย รองรับจนถึง[82] หมายเหตุ
Old version, no longer maintained: 1.0 8 มิถุนายน 2538 เรียกอย่างเป็นทางการว่า "Personal Home Page Tools (PHP Tools)" นี่เป็นครั้งแรกที่ใช้ชื่อ "PHP" [9]
Old version, no longer maintained: 2.0 1 พฤศจิกายน 2540 เรียกอย่างเป็นทางการว่า "PHP/FI 2.0" นี่เป็นรุ่นแรกที่สามารถระบุได้ว่าเป็น PHP ซึ่งเป็นภาษาแบบสแตนด์อโลนที่มีคุณสมบัติมากมายที่คงอยู่มาจนถึงปัจจุบัน
Old version, no longer maintained: 3.0 6 มิถุนายน 2541 20 ตุลาคม 2543 [82] การพัฒนาย้ายจากบุคคลหนึ่งไปสู่นักพัฒนาหลายคน Zeev Suraski และ Andi Gutmans เขียนฐานสำหรับเวอร์ชันนี้ใหม่ [9]
Old version, no longer maintained: 4.0 22 พฤษภาคม 2543 [83] 23 มิถุนายน 2544 [82] เพิ่มระบบการแยกวิเคราะห์/ดำเนินการแท็กแบบสองขั้นตอนขั้นสูงที่เรียกว่ากลไก Zend [84]
Old version, no longer maintained: 4.1 10 ธันวาคม 2544 [85] 12 มีนาคม 2545 [82] แนะนำ "superglobals" ( $_GET, $_POST, $_SESSION, ฯลฯ.) [84]
Old version, no longer maintained: 4.2 22 เมษายน 2545 [86] 6 กันยายน 2545 [82] ปิดใช้งานregister_globalsโดยค่าเริ่มต้น ข้อมูลที่ได้รับผ่านเครือข่ายจะไม่ถูกแทรกโดยตรงในเนมสเปซส่วนกลางอีกต่อไป ซึ่งเป็นการปิดช่องโหว่ด้านความปลอดภัยในแอปพลิเคชัน [84]
Old version, no longer maintained: 4.3 27 ธันวาคม 2545 [87] 31 มีนาคม 2548 [82] แนะนำอินเทอร์เฟซบรรทัดคำสั่ง (CLI) เพื่อเสริม CGI [84] [88]
Old version, no longer maintained: 4.4 11 กรกฎาคม 2548 [89] 7 สิงหาคม 2551 [82] แก้ไขข้อบกพร่องของหน่วยความจำเสียหาย ซึ่งจำเป็นต้องทำลายความเข้ากันได้ของไบนารีกับส่วนขยายที่คอมไพล์กับ PHP เวอร์ชัน 4.3.x [90]
Old version, no longer maintained: 5.0 13 กรกฎาคม 2547 [91] 5 กันยายน 2548 [82] Zend Engine II กับโมเดลวัตถุใหม่ [92]
Old version, no longer maintained: 5.1 24 พฤศจิกายน 2548 [93] 24 สิงหาคม 2549 [82] ปรับปรุงประสิทธิภาพด้วยการแนะนำตัวแปรคอมไพเลอร์ใน PHP Engine ที่ออกแบบใหม่ [92]เพิ่ม PHP Data Objects (PDO) เป็นอินเทอร์เฟซที่สอดคล้องกันสำหรับการเข้าถึงฐานข้อมูล [94]
Old version, no longer maintained: 5.2 2 พฤศจิกายน 2549 [95] 6 มกราคม 2554 [82] เปิดใช้งานส่วนขยายตัวกรองโดยค่าเริ่มต้น รองรับJSONดั้งเดิม [92]
Old version, no longer maintained: 5.3 30 มิถุนายน 2552 [96] 14 สิงหาคม 2557 [82] รองรับเนมสเปซ ; การเชื่อมโยงแบบคงที่ตอนปลาย , ป้ายกำกับข้าม (จำกัดgoto ), ฟังก์ชันที่ไม่ระบุชื่อ , การปิด , ไฟล์เก็บถาวร PHP (phar), การรวบรวมขยะสำหรับการอ้างอิงแบบวงกลม, การสนับสนุนWindows ที่ได้รับการปรับปรุง, sqlite3, mysqlnd แทน libmysql เป็นไลบรารีพื้นฐานสำหรับส่วนขยายที่ทำงานกับMySQL , fileinfo แทน mime_magic เพื่อการรองรับMIME ที่ดีขึ้น, ส่วนขยาย Internationalization และการเลิกใช้ส่วนขยาย ereg
Old version, no longer maintained: 5.4 1 มีนาคม 2555 [97] 3 กันยายน 2558 [82] การสนับสนุนลักษณะการสนับสนุนไวยากรณ์อาร์เรย์สั้น รายการที่ลบ: register_globals, safe_mode, allow_call_time_pass_reference, , และ. เว็บเซิร์ฟเวอร์ในตัว [98]ปรับปรุงคุณสมบัติที่มีอยู่ ประสิทธิภาพ และความต้องการหน่วยความจำที่ลดลงหลายประการ session_register()session_unregister()session_is_registered()
Old version, no longer maintained: 5.5 20 มิถุนายน 2556 [99] 10 กรกฎาคม 2559 [100] สนับสนุนเครื่องปั่นไฟ , finallyบล็อกสำหรับข้อยกเว้นการจัดการ OpCache (ขึ้นอยู่กับ Zend Optimizer +) รวมในการจัดจำหน่ายอย่างเป็นทางการ [11]
Old version, no longer maintained: 5.6 28 สิงหาคม 2557 [12] 31 ธันวาคม 2561 [100] นิพจน์สเกลาร์คงที่ฟังก์ชันแปรผัน การเปิดอาร์กิวเมนต์ ตัวดำเนินการยกกำลังใหม่ ส่วนขยายของuseคำสั่งสำหรับฟังก์ชันและค่าคงที่phpdbgดีบักเกอร์ใหม่เป็นโมดูล SAPI และการปรับปรุงอื่นๆ ที่มีขนาดเล็กกว่า [103]
6.x ยังไม่ถูกปล่อย ไม่มี PHP เวอร์ชันที่ถูกละทิ้งซึ่งวางแผนที่จะรวมการสนับสนุน Unicode ดั้งเดิม [104] [105]
Old version, no longer maintained: 7.0 3 ธันวาคม 2558 [16] 10 มกราคม 2562 [52] Zend Engine 3 (ปรับปรุงประสิทธิภาพ[50]และรองรับจำนวนเต็ม 64 บิตบน Windows [107] ), ไวยากรณ์ตัวแปรสม่ำเสมอ, [54] กระบวนการคอมไพล์ตามAST , [108]เพิ่ม, [109] ความสอดคล้องของการเลื่อนระดับบิตข้ามแพลตฟอร์ม[ 110] ( null coalesce ) โอเปอเรเตอร์[111] Unicode code point escape syntax , [112]การประกาศประเภทการส่งคืน[65] การประกาศประเภทสเกลาร์ (จำนวนเต็ม, ทุ่น, สตริงและบูลีน) [66] การเปรียบเทียบ "ยานอวกาศ" แบบสามทางโอเปอเรเตอร์[113]เครื่องปั่นไฟClosure::call() ?? <=> คณะผู้แทน[114] เรียนที่ไม่ระบุชื่อ , [115]ง่ายและมากขึ้นอย่างต่อเนื่องCSPRNG API, [116]ทดแทนในหลาย ๆ ที่เหลืออยู่ภายใน PHP "ข้อผิดพลาด" ที่มีความทันสมัยมากขึ้นข้อยกเว้น , [53]และชวเลขไวยากรณ์สำหรับการนำเข้าสินค้าหลายรายการจากใน namespace . [117]
Old version, no longer maintained: 7.1 1 ธันวาคม 2559 1 ธันวาคม 2562 [100] void return type , [118]ตัวแก้ไขการมองเห็นคงที่ของคลาส[119]
Old version, no longer maintained: 7.2 30 พฤศจิกายน 2560 30 พฤศจิกายน 2563 [100] การประกาศพารามิเตอร์ออบเจ็กต์และประเภทการส่งคืน[120]ส่วนขยาย Libsodium [121]การแทนที่วิธีนามธรรม[122]การขยายประเภทพารามิเตอร์[123]
Older version, yet still maintained: 7.3 6 ธันวาคม 2561 [124] 6 ธันวาคม 2564 ไวยากรณ์ Heredoc และNowdoc ที่ยืดหยุ่น[125]รองรับการกำหนดการอ้างอิงและการแยกโครงสร้างอาร์เรย์ด้วย list(), [126]รองรับ PCRE2, [127] hrtime() ฟังก์ชั่น[128]
Older version, yet still maintained: 7.4 28 พฤศจิกายน 2562 [129] 28 พฤศจิกายน 2565 คุณสมบัติที่พิมพ์ 2.0, [130]การโหลดล่วงหน้า, [131]ตัวดำเนินการกำหนดการรวม null, [132]ปรับปรุง openssl_random_pseudo_bytes, [133]การอ้างอิงที่อ่อนแอ, [79] FFI – ส่วนต่อประสานฟังก์ชันต่างประเทศ , [134]ส่วนขยายแฮชที่พร้อมใช้งานเสมอ, [135]รีจิสทรีแฮชรหัสผ่าน[136] การแยกสตริงหลายไบต์[137] การสะท้อนสำหรับการอ้างอิง[138]เลิกรวมกลุ่ม ext/wddx [139]กลไกการทำให้เป็นอันดับวัตถุที่กำหนดเองใหม่[140]
Current stable version: 8.0 26 พฤศจิกายน 2563 [141] 26 พฤศจิกายน 2566 การรวบรวม Just-In-Time (JIT) , [69]อาร์เรย์ที่ขึ้นต้นด้วยดัชนีเชิงลบ[142]ความหมายภาษาที่เข้มงวดกว่า/ปกติ (การตรวจสอบสำหรับวิธีการลักษณะนามธรรม), [143]สตริงที่มีเหตุผลเพื่อการเปรียบเทียบตัวเลข[144]ตัวเลขที่มีเหตุผล strings, [145] TypeError บนตัวดำเนินการเลขคณิต/บิตที่ไม่ถูกต้อง[146] การจัดประเภทใหม่ของข้อผิดพลาดของเอ็นจิ้นต่างๆ[147]ข้อผิดพลาดประเภทที่สอดคล้องกันสำหรับฟังก์ชันภายใน[148]ข้อผิดพลาดร้ายแรงสำหรับลายเซ็นเมธอดที่เข้ากันไม่ได้[149] ), float ที่ไม่ขึ้นกับสถานที่ การแปลงสตริง[150] การปรับแต่งไวยากรณ์ตัวแปร[151]แอตทริบิวต์[152] [153] [154] [155]อาร์กิวเมนต์ที่มีชื่อ [156]นิพจน์การจับคู่ [157]การส่งเสริมคุณสมบัติคอนสตรัคเตอร์ [158]ประเภทสหภาพ [159]ประเภทผสม [160]ประเภทผลตอบแทนคงที่ [161]ตัวดำเนินการ nullsafe, [78]ตัวดักจับที่ไม่จับ, [162]นิพจน์การโยน, [77]ส่วนขยาย JSON พร้อมใช้งานเสมอ [163]
Future release: 8.1 25 พฤศจิกายน 2564 ?? พฤศจิกายน 2567 สัญกรณ์ตามตัวอักษรจำนวนเต็มฐานแปดอย่างชัดเจน[164] การแจงนับ[165]
ตำนาน:
เวอร์ชั่นเก่า
รุ่นเก่ายังคงรักษา
รุ่นล่าสุด
เวอร์ชั่นพรีวิวล่าสุด
การเปิดตัวในอนาคต

เริ่มตั้งแต่วันที่ 28 มิถุนายน 2011 ทีมพัฒนา PHP ได้ใช้ไทม์ไลน์สำหรับการเปิดตัว PHP เวอร์ชันใหม่ [52]ภายใต้ระบบนี้ ควรมีการเปิดตัวอย่างน้อยหนึ่งครั้งทุกเดือน ปีละครั้งควรมีการเปิดตัวรุ่นย่อยซึ่งอาจรวมถึงคุณสมบัติใหม่ ทุกรุ่นย่อยควรได้รับการสนับสนุนอย่างน้อยสองปีด้วยการรักษาความปลอดภัยและการแก้ไขจุดบกพร่อง ตามด้วยการแก้ไขความปลอดภัยอย่างน้อยหนึ่งปีเท่านั้น รวมเป็นกระบวนการเผยแพร่สามปีสำหรับรุ่นย่อยทุกรุ่น ไม่มีคุณลักษณะใหม่ใด เว้นแต่จะมีขนาดเล็กและสมบูรณ์ในตัวเอง ที่จะนำมาใช้ในรุ่นย่อยในระหว่างกระบวนการเผยแพร่สามปี

มาสคอต

elePHPant มาสคอต PHP

มาสคอตของโครงการ PHP คือelePHPant ช้างสีน้ำเงินที่มีโลโก้ PHP ด้านข้าง ออกแบบโดย Vincent Pontier [166]ในปี 1998 [167]ตัวอักษร "PHP) ก่อตัวเป็นรูปช้างหากดูใน มุมข้าง" [168] elePHPant บางครั้งมีสีต่างกันเมื่ออยู่ในรูปแบบ ของเล่นตุ๊กตา

มาสคอตตัวนี้มีหลายรูปแบบในช่วงหลายปีที่ผ่านมา เฉพาะ elePHPants ที่อิงจากการออกแบบดั้งเดิมโดย Vincent Pontier เท่านั้นที่จะได้รับการพิจารณาอย่างเป็นทางการจากชุมชน [169]เหล่านี้เป็นของสะสมและบางอันหายากมาก [170]

ไวยากรณ์

แอปพลิเคชั่น "Hello World" ใน PHP 7.4 ที่ทำงานบนเซิร์ฟเวอร์การพัฒนา localhost

ต่อไปนี้"สวัสดีชาวโลก!" โปรแกรมเขียนด้วยโค้ด PHP ที่ฝังอยู่ในเอกสารHTML :

<!DOCTYPE html> 
<html> 
    <head> 
        <title>PHP "สวัสดี ชาวโลก!" โปรแกรม </title> 
    </head> 
    <body>
        <?php
            echo  '<p>สวัสดีชาวโลก!</p>' ;
        ?>
    </body> 
</html>

อย่างไรก็ตาม เนื่องจากไม่มีข้อกำหนดสำหรับโค้ด PHP ที่จะฝังใน HTML ซึ่งเป็นเวอร์ชันที่ง่ายที่สุดของHello, World! อาจเขียนแบบนี้ โดยละเว้นแท็กปิดตามที่ต้องการในไฟล์ที่มีโค้ด PHP แท้[171]?>

<?php 
    echo  'สวัสดีชาวโลก!' ; 
?>

ล่าม PHP รันโค้ด PHP ภายในตัวคั่นเท่านั้น สิ่งใดก็ตามที่อยู่นอกตัวคั่นจะไม่ถูกประมวลผลโดย PHP แม้ว่าข้อความที่ไม่ใช่ PHP จะยังคงอยู่ภายใต้โครงสร้างการควบคุมที่อธิบายไว้ในโค้ด PHP ตัวคั่นที่พบบ่อยที่สุดคือ<?phpการเปิดและปิดส่วน PHP แบบฟอร์มที่สั้นลงยังมีอยู่ ตัวคั่นแบบสั้นนี้ทำให้ไฟล์สคริปต์พกพาได้น้อยลง เนื่องจากการสนับสนุนสำหรับไฟล์เหล่านี้สามารถปิดใช้งานได้ในการกำหนดค่า PHP ในเครื่อง ดังนั้นจึงไม่สนับสนุน[172] [173]ตรงกันข้ามมีข้อเสนอแนะกับก้องแท็กสั้นไม่มี [174]ก่อนหน้า PHP 5.4.0 ไวยากรณ์สั้น ๆ นี้ใช้ได้กับ the . เท่านั้น?><?<?=echoshort_open_tagเปิดใช้งานการตั้งค่าการกำหนดค่าแล้ว ในขณะที่สำหรับ PHP 5.4.0 และใหม่กว่าจะพร้อมใช้งานเสมอ [175] [176] [172]จุดประสงค์ของตัวคั่นเหล่านี้คือการแยกโค้ด PHP ออกจากเนื้อหาที่ไม่ใช่ PHP เช่นโค้ดJavaScriptหรือมาร์กอัป HTML [177] ดังนั้น"สวัสดีชาวโลกที่สั้นที่สุด!" โปรแกรมที่เขียนด้วย PHP คือ:

<? = 'สวัสดีชาวโลก!' ;

รูปแบบแรกของตัวคั่น<?phpและในXHTMLและเอกสารXMLอื่นๆจะสร้างคำสั่งประมวลผล XML ที่มีรูปแบบอย่างถูกต้อง [178]ซึ่งหมายความว่าผลลัพธ์ของการรวมโค้ด PHP และมาร์กอัปอื่นๆ ในไฟล์ฝั่งเซิร์ฟเวอร์นั้นเป็น XML ที่มีรูปแบบที่ดี ?>

ตัวแปรที่จะมีคำนำหน้าด้วยสัญลักษณ์ดอลลาร์และประเภทไม่ต้องมีการระบุไว้ในล่วงหน้า PHP 5 แนะนำการประกาศประเภทที่อนุญาตให้ฟังก์ชันบังคับให้พารามิเตอร์เป็นวัตถุของคลาส อาร์เรย์ อินเทอร์เฟซ หรือฟังก์ชันการโทรกลับเฉพาะ อย่างไรก็ตาม ก่อน PHP 7 การประกาศประเภทไม่สามารถใช้กับประเภทสเกลาร์ เช่น จำนวนเต็มหรือสตริงได้ [66]

ด้านล่างนี้คือตัวอย่างวิธีการประกาศและเตรียมข้อมูลเบื้องต้นของตัวแปร PHP

<?php 
    $name  =  'จอห์น' ;   // ตัวแปรของประเภทสตริงที่ประกาศและเริ่มต้น
    $age  =  18 ;        // ตัวแปรของประเภทจำนวนเต็มถูกประกาศและเริ่มต้น
    $height  =  5.3 ;    // ตัวแปรประเภทคู่ถูกประกาศและเริ่มต้น
    echo  $ ชื่อ 'เป็น' $ ความสูง'สูง\n' ; // การต่อตัวแปรและสตริงecho " $name is $age years old." ; // การสอดแทรกตัวแปรเป็นสตริง?>      
      

ต่างจากชื่อฟังก์ชันและชื่อคลาส ชื่อตัวแปรจะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ทั้งสตริงแบบ double-quoted ("") และheredocให้ความสามารถในการสอดแทรกค่าของตัวแปรลงในสตริง[179] PHP ถือว่าการขึ้นบรรทัดใหม่เป็นช่องว่างในลักษณะของภาษารูปแบบอิสระและคำสั่งจะสิ้นสุดลงด้วยเครื่องหมายอัฒภาค[180] PHP มีไวยากรณ์ความคิดเห็นสามประเภท: /* */บล็อกเครื่องหมายและความคิดเห็นแบบอินไลน์//หรือ#ใช้สำหรับความคิดเห็นแบบบรรทัดเดียว[181]echoคำสั่งเป็นหนึ่งในสถานที่หลาย PHP ให้กับข้อความที่ส่งออก

ในแง่ของคำหลักและไวยากรณ์ภาษา PHP นั้นคล้ายกับรูปแบบ C ifเงื่อนไขforและwhileลูปและการส่งคืนฟังก์ชันจะคล้ายกันในไวยากรณ์ของภาษาเช่น C, C++, C#, Java และ Perl

ประเภทข้อมูล

PHP เป็นพิมพ์อย่างหลวมมันเก็บจำนวนเต็มในช่วงขึ้นอยู่กับแพลตฟอร์มไม่ว่าจะเป็น 32, 64 หรือ 128 บิตลงนาม จำนวนเต็มเทียบเท่ากับภาษา C ชนิดยาวจำนวนเต็มที่ไม่ได้ลงนามจะถูกแปลงเป็นค่าที่มีเครื่องหมายในบางสถานการณ์ ซึ่งเป็นลักษณะการทำงานที่แตกต่างจากภาษาโปรแกรมอื่นๆ[182]ตัวแปรจำนวนเต็มสามารถกำหนดใช้ทศนิยม (บวกและลบ), ฐานแปด , ฐานสิบหกและไบนารีสัญลักษณ์

จุดลอยตัวเลขจะถูกเก็บไว้ยังอยู่ในช่วงเฉพาะแพลตฟอร์ม พวกเขาสามารถจะระบุโดยใช้สัญกรณ์ลอยจุดหรือสองรูปแบบของสัญกรณ์วิทยาศาสตร์ [183] PHP มีชาวบูลีนชนิดที่คล้ายกับชนิดบูลีนพื้นเมืองในJavaและC ++ การใช้กฎการแปลงประเภทบูลีน ค่าที่ไม่ใช่ศูนย์จะถูกตีความว่าเป็นจริงและเป็นศูนย์เป็นเท็จ เช่นเดียวกับในPerlและ C++ [183]

ชนิดข้อมูล null แสดงถึงตัวแปรที่ไม่มีค่า NULLเป็นค่าเดียวที่อนุญาตสำหรับประเภทข้อมูลนี้ [183]

ตัวแปรของประเภท "ทรัพยากร" แสดงถึงการอ้างอิงถึงทรัพยากรจากแหล่งภายนอก โดยทั่วไปสิ่งเหล่านี้จะถูกสร้างขึ้นโดยฟังก์ชันจากส่วนขยายเฉพาะ และสามารถประมวลผลโดยฟังก์ชันจากส่วนขยายเดียวกันเท่านั้น ตัวอย่างรวมถึงทรัพยากรไฟล์ รูปภาพ และฐานข้อมูล [183]

อาร์เรย์สามารถมีองค์ประกอบประเภทใดก็ได้ที่ PHP สามารถจัดการได้ รวมถึงทรัพยากร อ็อบเจ็กต์ และแม้แต่อาร์เรย์อื่นๆ ลำดับจะถูกเก็บรักษาไว้ในรายการค่าและในแฮชที่มีทั้งคีย์และค่า และทั้งสองสามารถผสมกันได้ [183] PHP ยังรองรับstringsซึ่งสามารถใช้ได้กับ single quotes, double quotes, nowdoc หรือheredoc syntax [184]

มาตรฐาน PHP ห้องสมุด (SPL) ความพยายามที่จะแก้ปัญหาที่ได้มาตรฐานและการดำเนินการที่มีประสิทธิภาพการเชื่อมต่อการเข้าถึงข้อมูลและการเรียน [185]

ฟังก์ชั่น

PHP กำหนดอาร์เรย์ขนาดใหญ่ของฟังก์ชันในภาษาหลัก และยังมีอีกมากมายในส่วนขยายต่างๆ ฟังก์ชั่นเหล่านี้มีเอกสารดีในออนไลน์เอกสาร PHP [186]อย่างไรก็ตาม ไลบรารีในตัวมีรูปแบบการตั้งชื่อที่หลากหลายและความไม่สอดคล้องกันที่เกี่ยวข้อง ดังที่อธิบายไว้ในประวัติข้างต้น

นักพัฒนาอาจกำหนดฟังก์ชันที่กำหนดเอง:

ฟังก์ชั่น myAge ( int  $birthYear ) :  string 
{ 
    // คำนวณอายุโดยลบปีเกิดออกจากปีปัจจุบัน 
    $yearsOld  =  วันที่( 'Y' )  -  $birthYear ;

    // คืนค่าอายุในสตริงอธิบาย 
    ผลตอบแทน $ yearsOld  'ปี' . ( $yearsOld != 1 ? 's' : '' ); }       


ก้อง 'ผมอยู่'  myAge ( 1995 ) . ' เก่า.' ;   

ในปี 2564 ผลลัพธ์ของโปรแกรมตัวอย่างข้างต้นคือ 'ฉันอายุ 26 ปี'

แทนที่ฟังก์ชันพอยน์เตอร์ ฟังก์ชันใน PHP สามารถอ้างอิงได้ด้วยสตริงที่มีชื่อ ในลักษณะนี้ฟังก์ชั่น PHP ปกติสามารถนำมาใช้เช่นเป็นเรียกกลับหรือภายในตารางฟังก์ชั่น [187]ฟังก์ชั่นที่ผู้ใช้กำหนดอาจถูกสร้างขึ้นในเวลาใดก็ได้โดยไม่ต้องเป็นต้นแบบ [186] [187]ฟังก์ชันอาจถูกกำหนดไว้ภายในบล็อคโค้ด อนุญาตให้มีการตัดสินใจขณะทำงานว่าควรกำหนดฟังก์ชันหรือไม่ มีfunction_existsฟังก์ชันที่กำหนดว่าฟังก์ชันที่มีชื่อที่กำหนดนั้นถูกกำหนดไว้แล้วหรือไม่ การเรียกใช้ฟังก์ชันต้องใช้วงเล็บ ยกเว้นคอนสตรัคเตอร์คลาสศูนย์อาร์กิวเมนต์ฟังก์ชันที่เรียกด้วยโอเปอเรเตอร์ PHP newซึ่งในกรณีนี้วงเล็บจะเป็นทางเลือก

จนถึง PHP 5.3 ไม่มีการสนับสนุนฟังก์ชันที่ไม่ระบุชื่อและการปิดใน PHP ในขณะที่create_function()มีอยู่ตั้งแต่ PHP 4.0.1 มันเป็นเพียงเสื้อคลุมบาง ๆeval()ที่ช่วยให้ฟังก์ชั่น PHP ปกติถูกสร้างขึ้นระหว่างการทำงานของโปรแกรม [188] PHP 5.3 เพิ่มไวยากรณ์เพื่อกำหนดฟังก์ชันที่ไม่ระบุชื่อหรือ " การปิด " [189]ซึ่งสามารถจับตัวแปรจากขอบเขตโดยรอบ เพิ่มไวยากรณ์ลูกศรชวเลขใน PHP 7.4: [190]

ฟังก์ชัน getAdder ( $x )  { 
    return  fn ( $y )  =>  $x  +  $y ; 
}

$adder  =  getAdder ( 8 ); 
ก้อง $adder ( 2 );  // พิมพ์ "10"

ในตัวอย่างข้างต้นgetAdder()ฟังก์ชันจะสร้างการปิดโดยใช้อาร์กิวเมนต์ที่ส่งผ่าน$x(คีย์เวิร์ดuseนำเข้าตัวแปรจากบริบทของคำศัพท์) ซึ่งรับอาร์กิวเมนต์เพิ่มเติม$yและส่งคืนการปิดที่สร้างขึ้นไปยังผู้โทร ฟังก์ชันดังกล่าวเป็นอ็อบเจ็กต์ระดับเฟิร์สคลาส หมายความว่าสามารถเก็บไว้ในตัวแปร ส่งต่อเป็นพารามิเตอร์ไปยังฟังก์ชันอื่นๆ เป็นต้น[191]

ผิดปกติสำหรับภาษาที่พิมพ์แบบไดนามิก PHP รองรับการประกาศประเภทในพารามิเตอร์ของฟังก์ชัน ซึ่งบังคับใช้เมื่อรันไทม์ สิ่งนี้ได้รับการสนับสนุนสำหรับคลาสและอินเทอร์เฟซตั้งแต่ PHP 5.0 สำหรับอาร์เรย์ตั้งแต่ PHP 5.1 สำหรับ "callables" ตั้งแต่ PHP 5.4 และประเภทสเกลาร์ (จำนวนเต็ม float สตริงและบูลีน) ตั้งแต่ PHP 7.0 [66] PHP 7.0 ยังมีการประกาศประเภทสำหรับประเภทการส่งคืนฟังก์ชัน โดยแสดงโดยการวางชื่อประเภทหลังรายการพารามิเตอร์ นำหน้าด้วยโคลอน[65]ตัวอย่างเช่นgetAdderฟังก์ชันจากตัวอย่างก่อนหน้านี้สามารถใส่คำอธิบายประกอบด้วยประเภทดังกล่าวใน PHP 7:

ฟังก์ชัน getAdder ( int  $x ) :  ปิด
{ 
    return  fn ( int  $y ) :  int  =>  $x  +  $y ; 
}

$adder  =  getAdder ( 8 ); 
ก้อง $adder ( 2 );  // พิมพ์ "10" 
echo  $adder ( null );  // ส่งข้อยกเว้นเนื่องจากส่งประเภทที่ไม่ถูกต้อง
$adder  =  getAdder ([]);  // ก็จะโยนข้อยกเว้น

โดยค่าเริ่มต้น การประกาศประเภทสเกลาร์เป็นไปตามหลักการพิมพ์ที่ไม่รัดกุม ตัวอย่างเช่น หากประเภทของพารามิเตอร์คือint, PHP จะไม่เพียงแต่อนุญาตให้ส่งผ่านสตริงตัวเลข, ทุ่นหรือบูลีนที่แปลงได้ไปยังฟังก์ชันนั้น, และจะแปลงค่าเหล่านี้ด้วย [66]อย่างไรก็ตาม PHP 7 มีโหมด "การพิมพ์อย่างเข้มงวด" ซึ่งเมื่อใช้แล้ว จะไม่อนุญาตการแปลงดังกล่าวสำหรับการเรียกใช้ฟังก์ชันและส่งคืนภายในไฟล์ [66]

วัตถุ PHP

เพิ่มฟังก์ชันการเขียนโปรแกรมเชิงวัตถุพื้นฐานใน PHP 3 และปรับปรุงใน PHP 4 [9]สิ่งนี้ทำให้ PHP สามารถเข้าใจสิ่งที่เป็นนามธรรมมากขึ้น ทำให้งานสร้างสรรค์ง่ายขึ้นสำหรับโปรแกรมเมอร์ที่ใช้ภาษา การจัดการวัตถุถูกเขียนใหม่ทั้งหมดสำหรับ PHP 5 ขยายชุดคุณลักษณะและเพิ่มประสิทธิภาพ[192]ในรุ่นก่อนหน้า PHP, วัตถุถูกจัดการเช่นค่าประเภท [192]ข้อเสียของวิธีนี้คือโค้ดต้องใช้ตัวแปร "การอ้างอิง" ของ PHP อย่างหนักหากต้องการแก้ไขวัตถุที่ถูกส่งผ่านแทนที่จะสร้างสำเนา ในแนวทางใหม่ อ็อบเจ็กต์ถูกอ้างอิงโดยhandleไม่ใช่ตามค่า

PHP 5 แนะนำส่วนตัวและการป้องกันตัวแปรสมาชิกและวิธีการพร้อมกับคลาสนามธรรม , เรียนสุดท้าย , วิธีการที่เป็นนามธรรมและวิธีสุดท้ายนอกจากนี้ยังแนะนำวิธีมาตรฐานในการประกาศconstructorsและdestructorsคล้ายกับภาษาเชิงวัตถุอื่นๆ เช่นC++และรูปแบบการจัดการข้อยกเว้นมาตรฐานนอกจากนี้ PHP 5 เพิ่มอินเทอร์เฟซและอนุญาตให้ใช้อินเทอร์เฟซหลายตัว มีอินเทอร์เฟซพิเศษที่ช่วยให้อ็อบเจ็กต์โต้ตอบกับระบบรันไทม์ได้ออบเจ็กต์ที่ใช้ ArrayAccess สามารถใช้ได้กับarray syntax and objects implementing Iterator or IteratorAggregate can be used with the foreach language construct. There is no virtual table feature in the engine, so static variables are bound with a name instead of a reference at compile time.[193]

If the developer creates a copy of an object using the reserved word clone, the Zend engine will check whether a __clone() method has been defined. If not, it will call a default __clone() which will copy the object's properties. If a __clone() method is defined, then it will be responsible for setting the necessary properties in the created object. For convenience, the engine will supply a function that imports the properties of the source object, so the programmer can start with a by-value replica of the source object and only override properties that need to be changed.[194]

The visibility of PHP properties and methods is defined using the keywords public, private, and protected. The default is public, if only var is used; var is a synonym for public. Items declared public can be accessed everywhere. protected limits access to inherited classes (and to the class that defines the item). private limits visibility only to the class that defines the item.[195] Objects of the same type have access to each other's private and protected members even though they are not the same instance.

Example

The following is a basic example of object-oriented programming in PHP 8:

<?php

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";
    });
}

// Output of program:
// Students:
// Hello, my name is Alice, I learn Computer Science
// Hello, my name is Bob, I learn Computer Science
// Hello, my name is Charlie, I learn Business Studies
// Teachers:
// Hello, my name is Dan, I teach Computer Science, Information Security
// Hello, my name is Erin, I teach Computer Science, 3D Graphics Programming
// Hello, my name is Frankie, I teach Online Marketing, Business Studies, E-commerce

Implementations

The only complete PHP implementation is the original, known simply as PHP. It is the most widely used and is powered by the Zend Engine. To disambiguate it from other implementations, it is sometimes unofficially called "Zend PHP". The Zend Engine compiles PHP source code on-the-fly into an internal format that it can execute, thus it works as an interpreter.[196][197] It is also the "reference implementation" of PHP, as PHP has no formal specification, and so the semantics of Zend PHP define the semantics of PHP. Due to the complex and nuanced semantics of PHP, defined by how Zend works, it is difficult for competing implementations to offer complete compatibility.

PHP's single-request-per-script-execution model, and the fact that the Zend Engine is an interpreter, leads to inefficiency; as a result, various products have been developed to help improve PHP performance. In order to speed up execution time and not have to compile the PHP source code every time the web page is accessed, PHP scripts can also be deployed in the PHP engine's internal format by using an opcode cache, which works by caching the compiled form of a PHP script (opcodes) in shared memory to avoid the overhead of parsing and compiling the code every time the script runs. An opcode cache, Zend Opcache, is built into PHP since version 5.5.[198] Another example of a widely used opcode cache is the Alternative PHP Cache (APC), which is available as a PECL extension.[199]

While Zend PHP is still the most popular implementation, several other implementations have been developed. Some of these are compilers or support JIT compilation, and hence offer performance benefits over Zend PHP at the expense of lacking full PHP compatibility. Alternative implementations include the following:

  • HHVM (HipHop Virtual Machine) – developed at Facebook and available as open source, it converts PHP code into a high-level bytecode (commonly known as an intermediate language), which is then translated into x86-64 machine code dynamically at runtime by a just-in-time (JIT) compiler, resulting in up to 6× performance improvements.[200] However, since version 7.2 Zend has outperformed HHVM,[201] and HHVM 3.24 is the last version to officially support PHP.[202]
  • Parrot – a virtual machine designed to run dynamic languages efficiently; Pipp transforms the PHP source code into the Parrot intermediate representation, which is then translated into the Parrot's bytecode and executed by the virtual machine.
  • PeachPie – a second-generation compiler to .NET Common Intermediate Language (CIL) bytecode, built on the Roslyn platform; successor of Phalanger, sharing several architectural components
  • Phalanger – compiles PHP into Common Intermediate Language (CIL) bytecode; predecessor of PeachPie
  • Quercus – compiles PHP into Java bytecode
  • HipHop – developed at Facebook and available as open source, it transforms the PHP scripts into C++ code and then compiles the resulting code, reducing the server load up to 50%. In early 2013, Facebook deprecated it in favor of HHVM due to multiple reasons, including deployment difficulties and lack of support for the whole PHP language, including the create_function() and eval() constructs.[203]

Licensing

PHP is free software released under the PHP License, which stipulates that:[204]

Products derived from this software may not be called "PHP", nor may "PHP" appear in their name, without prior written permission from [email protected]. You may indicate that your software works in conjunction with PHP by saying "Foo for PHP" instead of calling it "PHP Foo" or "phpfoo".

This restriction on use of "PHP" makes the PHP License incompatible with the General Public License (GPL), while the Zend License is incompatible due to an advertising clause similar to that of the original BSD license.[205]

Development and community

PHP includes various free and open-source libraries in its source distribution, or uses them in resulting PHP binary builds. PHP is fundamentally an Internet-aware system with built-in modules for accessing File Transfer Protocol (FTP) servers and many database servers, including PostgreSQL, MySQL, Microsoft SQL Server and SQLite (which is an embedded database), LDAP servers, and others. Numerous functions familiar to C programmers, such as those in the stdio family, are available in standard PHP builds.[206]

PHP allows developers to write extensions in C to add functionality to the PHP language. PHP extensions can be compiled statically into PHP or loaded dynamically at runtime. Numerous extensions have been written to add support for the Windows API, process management on Unix-like operating systems, multibyte strings (Unicode), cURL, and several popular compression formats. Other PHP features made available through extensions include integration with IRC, dynamic generation of images and Adobe Flash content, PHP Data Objects (PDO) as an abstraction layer used for accessing databases,[207][208][209][210][211][212][213] and even speech synthesis. Some of the language's core functions, such as those dealing with strings and arrays, are also implemented as extensions.[214] The PHP Extension Community Library (PECL) project is a repository for extensions to the PHP language.[215]

Some other projects, such as Zephir, provide the ability for PHP extensions to be created in a high-level language and compiled into native PHP extensions. Such an approach, instead of writing PHP extensions directly in C, simplifies the development of extensions and reduces the time required for programming and testing.[216]

By December 2018 the PHP Group consisted of ten people: Thies C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, and Andrei Zmievski.[217]

Zend Technologies provides a PHP Certification based on PHP 7[218] exam (and previously based on PHP 5.5) for programmers to become certified PHP developers.

Installation and configuration

Example output of the phpinfo() function in PHP 7.1

There are two primary ways for adding support for PHP to a web server – as a native web server module, or as a CGI executable. PHP has a direct module interface called Server Application Programming Interface (SAPI), which is supported by many web servers including Apache HTTP Server, Microsoft IIS, Netscape (now defunct) and iPlanet. Some other web servers, such as OmniHTTPd, support the Internet Server Application Programming Interface (ISAPI), which is a Microsoft's web server module interface. If PHP has no module support for a web server, it can always be used as a Common Gateway Interface (CGI) or FastCGI processor; in that case, the web server is configured to use PHP's CGI executable to process all requests to PHP files.[219]

PHP-FPM (FastCGI Process Manager) is an alternative FastCGI implementation for PHP, bundled with the official PHP distribution since version 5.3.3.[220] When compared to the older FastCGI implementation, it contains some additional features, mostly useful for heavily loaded web servers.[221]

When using PHP for command-line scripting, a PHP command-line interface (CLI) executable is needed. PHP supports a CLI server application programming interface (SAPI) since PHP 4.3.0.[222] The main focus of this SAPI is developing shell applications using PHP. There are quite a few differences between the CLI SAPI and other SAPIs, although they do share many of the same behaviors.[223]

PHP has a direct module interface called SAPI for different web servers;[224] in case of PHP 5 and Apache 2.0 on Windows, it is provided in form of a DLL file called php5apache2.dll,[225] 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.

There are different kinds of SAPIs for various web server extensions. For example, in addition to those listed above, other SAPIs for the PHP language include the Common Gateway Interface (CGI) and command-line interface (CLI).[224][226]

PHP can also be used for writing desktop graphical user interface (GUI) applications, by using the PHP-GTK extension. PHP-GTK is not included in the official PHP distribution,[219] and as an extension it can be used only with PHP versions 5.1.0 and newer. The most common way of installing PHP-GTK is compiling it from the source code.[227]

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.[230][231] Configuration file php.ini is searched for in different locations, depending on the way PHP is used.[232] The configuration file is split into various sections,[233] while some of the configuration options can be also set within the web server configuration.[234]

Use

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.[235] 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.[13]

Dynamic web page: example of server-side scripting (PHP and MySQL)

Originally designed to create dynamic web pages, PHP now focuses mainly on server-side scripting,[236] 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,[237] and mod_perl. 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.[238] 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++.[239][240][241][242][243][244][245] 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.[246][247] 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.[248]

PHP received mixed reviews due to lacking support for multithreading at the core language level,[249] though using threads is made possible by the "pthreads" PECL extension.[250][251]

A command line interface, php-cli, and two ActiveX Windows Script Host scripting engines for PHP have been produced.

Popularity and usage statistics

PHP is used for Web content management systems including MediaWiki,[252] WordPress,[253] Joomla,[254] Drupal,[255] Moodle,[256] eZ Publish, eZ Platform, and SilverStripe.[257]

Websites using PHP include Facebook,[258] Digg,[259] Dailymotion,[260] and Tumblr.[261]

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.[262]

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 are using that version.[263]

Security

In 2019, 11% of all vulnerabilities listed by the National Vulnerability Database were linked to PHP;[264] 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).[265] 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,[266] but its inclusion into a release has been rejected several times in the past.[267][268]

There are advanced protection patches such as Suhosin and Hardening-Patch, especially designed for web hosting environments.[269]

Historically, old versions of PHP had some configuration parameters and default values for such runtime settings that made some PHP applications prone to security issues. Among these, magic_quotes_gpc and register_globals[270] configuration directives were the best known; the latter made any URL parameters become PHP variables, opening a path for serious security vulnerabilities by allowing an attacker to set the value of any uninitialized global variable and interfere with the execution of a PHP script. Support for "magic quotes" and "register globals" settings has been deprecated since PHP 5.3.0, and removed from PHP 5.4.0.[271]

Another example for the potential runtime-settings vulnerability comes from failing to disable PHP execution (for example by using the engine configuration directive)[272] for the directory where uploaded files are stored; enabling it can result in execution of malicious code embedded within the uploaded files.[273][274][275] The best practice is to either locate the image directory outside of the document root available to the web server and serve it via intermediary script, or disable PHP execution for the directory which stores the uploaded files.

Also, enabling the dynamic loading of PHP extensions (via enable_dl configuration directive)[276] in a shared web hosting environment can lead to security issues.[277][278]

Implied type conversions that result in different values being treated as equal, sometimes against the programmer's intent, can lead to security issues. For example, the result of the comparison '0e1234' == '0' is true, 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,[279] Typo3[280] and phpBB[281] when MD5 password hashes were compared. The recommended way is to use hash_equals() (for timing attack safety), strcmp or the identity operator (===), as '0e1234' === '0' results in false.[282]

In a 2013 analysis of over 170,000 website defacements, published by Zone-H, the most frequently (53%) used technique was exploitation of file inclusion vulnerability, mostly related to insecure usage of the PHP language constructs include, require, and allow_url_fopen.[283][284]

As of April 2021, W3Techs reports that 64% of websites using PHP, use versions 7.2 or older (which are no longer supported by The PHP Development Team) with 35% of all PHP websites using version 5.6 or older.[285]

Version 5 is still used by 24.5% of all the websites (September 2021).[286] It is highly recommended to migrate to PHP version 7 or 8 and use random_int() instead of rand() or mt_rand(). There are two attacks that can be performed over PHP entropy sources: "Seed Attack" and "State recovery attack". With current GPU technologies an attacker can perform up to 2^30 MD5 calculations per second with a $250 GPU, while with an additional $500 can reach up to 2^32 calculations.[287] In combination with "Birthday attack" this can lead to a serious security vulnerabilities.

See also

References

  1. ^ a b Lerdorf, Rasmus (June 8, 1995). "Announce: Personal Home Page Tools (PHP Tools)". Retrieved 7 June 2011.
  2. ^ a b Lerdorf, Rasmus (2007-04-26). "PHP on Hormones – history of PHP presentation by Rasmus Lerdorf given at the MySQL Conference in Santa Clara, California". The Conversations Network. Retrieved 2009-12-11.
  3. ^ "Version 8.0.11". 23 September 2021. Retrieved 24 September 2021.
  4. ^ "PHP 8.1.0 Beta 1 available for testing". 22 July 2021. Retrieved 29 July 2021.
  5. ^ "PHP: Function arguments - Manual". secure.php.net.
  6. ^ Stogov, Dmitry (2015-12-04). "It's not a secret that some #PHP7 optimization ideas came from HHVM, LuaJIT and V8". Twitter.
  7. ^ "PHP: Hypertext Preprocessor". www.php.net. Retrieved 2020-02-12.
  8. ^ a b "History of PHP". php.net.
  9. ^ a b c d e f g h i "History of PHP and related projects". The PHP Group. Retrieved 2008-02-25.
  10. ^ PHP Manual: Preface, www.php.net.
  11. ^ "Introduction: What can PHP do?". PHP Manual. Retrieved 2009-03-05.
  12. ^ helicopter: Port of node-ar-drone which allows user to control a Parrot AR Drone over PHP: jolicode/php-ar-drone, JoliCode, 2019-01-11, retrieved 2019-02-23
  13. ^ a b "Embedding PHP in HTML". O'Reilly. 2001-05-03. Retrieved 2008-02-25.
  14. ^ Jackson, Joab (2014-07-31). "PHP gets a formal specification, at last". Computerworld. IDG.
  15. ^ "Usage statistics of PHP for websites". W3Techs - World Wide Web Technology Surveys. W3Techs. 26 April 2021. Retrieved 26 April 2021.
  16. ^ Lerdorf, Rasmus (2012-07-20). "I wonder why people keep writing that PHP was ever written in Perl. It never was. #php". Twitter. Retrieved 2014-09-04.
  17. ^ Lerdorf, Rasmus (2007-04-26). "PHP on Hormones" (mp3). The Conversations Network. Retrieved 2009-06-22.
  18. ^ Lerdorf, Rasmus (1995-06-08). "Announce: Personal Home Page Tools (PHP Tools)". Newsgroupcomp.infosystems.www.authoring.cgi. Retrieved 2006-09-17.
  19. ^ Lerdorf, Rasmus (2007). "Slide 3". slides for 'PHP on Hormones' talk. The PHP Group. Retrieved 2009-06-22.
  20. ^ "Rasmus Lerdorf, Senior Technical Yahoo: PHP, Behind the Mic". 2003-11-19. Archived from the original on 2013-07-28.
  21. ^ "Problems with PHP". Retrieved 20 December 2010.
  22. ^ "php.internals: Re: Function name consistency". news.php.net. 2013-12-28. Retrieved 2014-02-09.
  23. ^ Rasmus Lerdorf (Dec 16, 2013). "Re: Flexible function naming". Newsgroupphp.internals. Retrieved December 26, 2013.
  24. ^ "PHP – Acronym Meaning Vote". PHP.net. Archived from the original on August 15, 2000.
  25. ^ "Zend Engine version 2.0: Feature Overview and Design". Zend Technologies Ltd. Archived from the original on 2006-07-19. Retrieved 2006-09-17.
  26. ^ "php.net 2007 news archive". The PHP Group. 2007-07-13. Retrieved 2008-02-22.
  27. ^ Kerner, Sean Michael (2008-02-01). "PHP 4 is Dead—Long Live PHP 5". InternetNews. Archived from the original on 2018-08-06. Retrieved 2018-12-16.
  28. ^ Trachtenberg, Adam (2004-07-15). "Why PHP 5 Rocks!". O'Reilly. Retrieved 2008-02-22.
  29. ^ "Late Static Binding in PHP". Digital Sandwich. 2006-02-23. Retrieved 2008-03-25.
  30. ^ "Static Keyword". The PHP Group. Retrieved 2008-03-25.
  31. ^ "GoPHP5". Archived from the original on 2011-07-17.
  32. ^ GoPHP5. "PHP projects join forces to Go PHP 5" (PDF). GoPHP5 Press Release. Archived from the original (PDF) on 2009-12-10. Retrieved 2008-02-23.
  33. ^ "GoPHP5". GoPHP5. Archived from the original on 2011-04-27. Retrieved 2008-02-22.
  34. ^ "PHP Installation and Configuration". php.net. Retrieved 2013-10-29.
  35. ^ "PHP for Windows: Binaries and sources releases (5.3)". php.net. Retrieved 2013-10-29.
  36. ^ "PHP for Windows: Binaries and sources releases (5.4)". php.net. Retrieved 2013-10-29.
  37. ^ "PHP for Windows: Binaries and sources releases (5.5)". php.net. Retrieved 2013-10-29.
  38. ^ "PHP: Supported Versions".
  39. ^ "Types: Strings (PHP Manual)". PHP.net. Retrieved 2013-09-22.
  40. ^ "Details of the String Type (PHP Manual)". PHP.net. Retrieved 2013-09-22.
  41. ^ Andrei Zmievski (2005-08-10). "PHP Unicode support design document" (Mailing list). Retrieved 2014-02-09.
  42. ^ "PHP 5.5 or 6.0". Retrieved 2014-02-09.
  43. ^ Andrei Zmievski (2011-04-22). "The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6". Retrieved 2014-02-09.
  44. ^ Rasmus Lerdorf (2010-03-11). "PHP 6" (Mailing list). Retrieved 2014-02-07.
  45. ^ "The Neverending Muppet Debate of PHP 6 v PHP 7". Archived from the original on 2015-11-19. Retrieved 2015-11-19.
  46. ^ "RFC: Name of Next Release of PHP". php.net. 2014-07-07. Retrieved 2014-07-15.
  47. ^ "Re: [PHP-DEV] [VOTE][RFC] Name of Next Release of PHP (again)". 2014-07-30. Retrieved 2014-07-30.
  48. ^ "phpng: Refactored PHP Engine with Big Performance Improvement". news.php.net.
  49. ^ "PHP: rfc:phpng". php.net. Retrieved 16 December 2014.
  50. ^ a b "PHP: phpng". php.net. Retrieved 2014-07-15.
  51. ^ "Merge branch 'ZendEngine3'". github.com. 2014-12-05. Retrieved 2014-12-05.
  52. ^ a b c "PHP: Release Process". 2011-06-20. Retrieved 2013-10-06.
  53. ^ a b "PHP RFC: Exceptions in the engine (for PHP 7)". php.net. Retrieved 2015-05-21.
  54. ^ a b "PHP RFC: Uniform Variable Syntax". php.net. 2014-05-31. Retrieved 2014-07-30.
  55. ^ "Online PHP shell | 150+ versions + stats + vld + hhvm".
  56. ^ "PHP RFC: Fix "foreach" behavior". php.net. Retrieved 2015-05-21.
  57. ^ "PHP RFC: Constructor behaviour of internal classes". php.net. Retrieved 2015-05-21.
  58. ^ "PHP RFC: Removal of dead or not yet PHP7 ported SAPIs and extensions". php.net. Retrieved 2015-05-21.
  59. ^ "PHP RFC: Fix list() behavior inconsistency". php.net. Retrieved 2015-05-21.
  60. ^ "PHP RFC: Remove alternative PHP tags". php.net. Retrieved 2015-05-21.
  61. ^ "PHP RFC: Make defining multiple default cases in a switch a syntax error". php.net. Retrieved 2015-05-21.
  62. ^ "PHP RFC: Remove hex support in numeric strings". php.net. Retrieved 2015-05-21.
  63. ^ a b "PHP RFC: Integer Semantics". php.net. Retrieved 2015-05-21. Making NaN and Infinity always become zero when cast to integer means more cross-platform consistency, and is also less surprising than what is currently produces
  64. ^ "PHP RFC: ZPP Failure on Overflow". php.net. Retrieved 2015-05-21.
  65. ^ a b c "RFC: Return Types". php.net. 2015-01-27. Retrieved 2015-01-28.
  66. ^ a b c d e f "RFC: Scalar Type Declarations". php.net. 2015-03-16. Retrieved 2015-03-17.
  67. ^ a b c d e f g Brent. "What's new in PHP 8". Stitcher. Retrieved 22 September 2020.
  68. ^ "PHP 8 Released". PHP. Retrieved 27 November 2020.
  69. ^ a b "PHP: rfc:jit". wiki.php.net. Retrieved 2019-04-05.
  70. ^ Brent. "PHP 8: JIT performance in real-life web applications". Stitcher.io. Retrieved 4 October 2020.
  71. ^ Rethams, Derick. "PHP 8: A Quick Look at JIT".
  72. ^ a b Popov, Nikita. ""What's new in PHP 8.0?" Nikita Popov". PHP fwdays. Retrieved 4 October 2020.
  73. ^ Daniele, Carlo (25 May 2020). "What's New in PHP 8 (Features, Improvements, and the JIT Compiler)". Kinsta. Retrieved 24 December 2020.
  74. ^ Redmond, Paul. "Match Expression is Coming to PHP 8". Laravel News. Retrieved 4 October 2020.
  75. ^ "PHP 8.0: Match Expressions". PHP Watch. Retrieved 4 October 2020.
  76. ^ Barnes, Eric. "PHP 8 is now Released!". Laravel News. Retrieved 24 December 2020.
  77. ^ a b "PHP RFC: throw expression". wiki.php.net. Retrieved 14 August 2020.
  78. ^ a b "PHP RFC: Nullsafe operator". wiki.php.net. Retrieved 14 August 2020.
  79. ^ a b "PHP: rfc:weakrefs". wiki.php.net. Retrieved 2019-04-05.
  80. ^ Merchant, Amit (13 June 2020). "These new string functions are coming in PHP 8". Amit Merchant. Retrieved 4 October 2020.
  81. ^ Popov, Nikita. "Call for participation: Annotating internal function argument and return types". Externals. Retrieved 19 November 2020.
  82. ^ a b c d e f g h i j k l "Unsupported Branches". php.net. Retrieved 2019-07-31.
  83. ^ "PHP 4.0.0 Released". Retrieved 25 October 2020.
  84. ^ a b c d "PHP: PHP 4 ChangeLog". The PHP Group. 2008-01-03. Retrieved 2008-02-22.
  85. ^ "PHP 4.1.0 Release Announcement". Retrieved 25 October 2020.
  86. ^ "PHP 4.2.0 Release Announcement". Retrieved 25 October 2020.
  87. ^ "PHP 4.3.0 Release Announcement". Retrieved 25 October 2020.
  88. ^ "Using PHP from the command line". PHP Manual. The PHP Group. Retrieved 2009-09-11.
  89. ^ "PHP 4.4.0 Release Announcement". Retrieved 25 October 2020.
  90. ^ "PHP 4.4.0 Release Announcement". PHP Mannual. The PHP Group. Retrieved 2013-11-24.
  91. ^ "PHP 5.0.0 Released!". Retrieved 25 October 2020.
  92. ^ a b c "PHP: PHP 5 ChangeLog". The PHP Group. 2007-11-08. Retrieved 2008-02-22.
  93. ^ "PHP 5.1.0 Release Announcement". Retrieved 25 October 2020.
  94. ^ "PHP manual: PDO". The PHP Group. 2011-11-15. Retrieved 2011-11-15.
  95. ^ "PHP 5.2.0 Release Announcement". Retrieved 25 October 2020.
  96. ^ "PHP 5.3.0 Release Announcement". Retrieved 25 October 2020.
  97. ^ "PHP 5.4.0 Release Announcement". Retrieved 25 October 2020.
  98. ^ "Built-in web server". Retrieved March 26, 2012.
  99. ^ "PHP 5.5.0 Release Announcement". Retrieved 25 October 2020.
  100. ^ a b c d "Supported Versions". php.net. Retrieved 2017-12-13.
  101. ^ "PHP 5.5.0 changes". php.net. Retrieved 2015-03-03.
  102. ^ "PHP 5.6.0 Release Announcement". Retrieved 25 October 2020.
  103. ^ "Migrating from PHP 5.5.x to PHP 5.6.x". php.net. Retrieved 2014-03-24.
  104. ^ "Resetting PHP 6". There have been books on the shelves purporting to cover PHP 6 since at least 2008. But, in March 2010, the PHP 6 release is not out – in fact, it is not even close to out. Recent events suggest that PHP 6 will not be released before 2011 – if, indeed, it is released at all.
  105. ^ "PHP 7 moves full speed ahead". 2014-10-31. Recent versions of PHP have been part of the 5.x release series, but there will be no PHP 6. "We're going to skip [version] 6, because years ago, we had plans for a 6, but those plans were very different from what we're doing now," Gutmans said. Going right to version 7 avoids confusion.
  106. ^ "News Archive – 2018: PHP 7.2.9 Released". php.net. 2018-08-16. Retrieved 2018-08-16.
  107. ^ "PHP: rfc:size_t_and_int64_next". php.net. Retrieved 16 December 2014.
  108. ^ "PHP: rfc:abstract_syntax_tree". php.net. Retrieved 16 December 2014.
  109. ^ "PHP: rfc:closure_apply". php.net. Retrieved 16 December 2014.
  110. ^ "PHP: rfc:integer_semantics". php.net. Retrieved 16 December 2014.
  111. ^ "PHP: rfc:isset_ternary". php.net. Retrieved 16 December 2014.
  112. ^ "RFC: Unicode Codepoint Escape Syntax". 2014-11-24. Retrieved 2014-12-19.
  113. ^ "Combined Comparison (Spaceship) Operator". php.net. Retrieved 2015-05-21.
  114. ^ "PHP RFC: Generator Delegation". php.net. Retrieved 2015-05-21.
  115. ^ "PHP RFC: Anonymous Classes". php.net. Retrieved 2015-05-21.
  116. ^ "PHP RFC: Easy User-land CSPRNG". php.net. Retrieved 2015-05-21.
  117. ^ "PHP RFC: Group Use Declarations". php.net. Retrieved 2015-05-21.
  118. ^ "PHP: rfc:void_return_type". php.net. 2015-11-09. Retrieved 2015-11-14.
  119. ^ "PHP: rfc:class_constant_visibility". php.net. 2015-10-27. Retrieved 2015-12-08.
  120. ^ "PHP: rfc:object-typehint". wiki.php.net.
  121. ^ "PHP: rfc:libsodium". wiki.php.net.
  122. ^ "PHP: rfc:allow-abstract-function-override". wiki.php.net.
  123. ^ "PHP: rfc:parameter-no-type-variance". wiki.php.net.
  124. ^ "PHP: todo:php73". wiki.php.net.
  125. ^ "PHP: rfc:flexible_heredoc_nowdoc_syntaxes". wiki.php.net.
  126. ^ "PHP: rfc:list_reference_assignment". wiki.php.net.
  127. ^ "PHP: rfc:pcre2-migration". wiki.php.net.
  128. ^ "PHP: hrtime – Manual". php.net.
  129. ^ "PHP 7.4.0 Released!". php.net. Retrieved 2019-11-28.
  130. ^ "PHP: rfc:typed_properties_v2". wiki.php.net. Retrieved 2019-04-04.
  131. ^ "PHP: rfc:preload". wiki.php.net. Retrieved 2019-04-04.
  132. ^ "PHP: rfc:null_coalesce_equal_operator". wiki.php.net. Retrieved 2019-04-04.
  133. ^ "PHP: rfc:improve-openssl-random-pseudo-bytes". wiki.php.net. Retrieved 2019-04-04.
  134. ^ "PHP: rfc:ffi". wiki.php.net. Retrieved 2019-04-05.
  135. ^ "PHP: rfc:permanent_hash_ext". wiki.php.net. Retrieved 2019-04-05.
  136. ^ "PHP: rfc:password_registry". wiki.php.net. Retrieved 2019-04-05.
  137. ^ "PHP: rfc:mb_str_split". wiki.php.net. Retrieved 2019-04-05.
  138. ^ "PHP: rfc:reference_reflection". wiki.php.net. Retrieved 2019-04-05.
  139. ^ "PHP: rfc:deprecate-and-remove-ext-wddx". wiki.php.net. Retrieved 2019-04-05.
  140. ^ "PHP: rfc:custom_object_serialization". wiki.php.net. Retrieved 2019-04-05.
  141. ^ "PHP: todo:php80". wiki.php.net. Retrieved 2020-06-16.
  142. ^ "PHP: rfc:negative_array_index". wiki.php.net. Retrieved 2019-04-05.
  143. ^ "PHP RFC: Validation for abstract trait methods". wiki.php.net. Retrieved 14 August 2020.
  144. ^ "PHP RFC: Saner string to number comparisons". wiki.php.net. Retrieved 14 August 2020.
  145. ^ "PHP RFC: Saner numeric strings". wiki.php.net. Retrieved 14 August 2020.
  146. ^ "PHP RFC: Stricter type checks for arithmetic/bitwise operators". wiki.php.net. Retrieved 14 August 2020.
  147. ^ "PHP RFC: Reclassifying engine warnings". wiki.php.net. Retrieved 14 August 2020.
  148. ^ "PHP: rfc:consistent_type_errors". wiki.php.net. Retrieved 2019-04-05.
  149. ^ "PHP: rfc:lsp_errors". wiki.php.net. Retrieved 2019-05-26.
  150. ^ "PHP RFC: Locale-independent float to string cast". wiki.php.net. Retrieved 14 August 2020.
  151. ^ "PHP RFC: Variable Syntax Tweaks". wiki.php.net. Retrieved 14 August 2020.
  152. ^ "PHP RFC: Attributes V2". wiki.php.net. Retrieved 14 August 2020.
  153. ^ "PHP RFC: Attribute Amendments". wiki.php.net. Retrieved 14 August 2020.
  154. ^ "PHP RFC: Shorter Attribute Syntax". wiki.php.net. Retrieved 2020-06-20.
  155. ^ "PHP RFC: Shorter Attribute Syntax Change". wiki.php.net. Retrieved 14 August 2020.
  156. ^ "PHP RFC: Named Arguments". wiki.php.net. Retrieved 14 August 2020.
  157. ^ "PHP RFC: Match expression v2". wiki.php.net. Retrieved 14 August 2020.
  158. ^ "PHP RFC: Constructor Property Promotion". wiki.php.net. Retrieved 14 August 2020.
  159. ^ "PHP RFC: Union Types 2.0". wiki.php.net. Retrieved 14 August 2020.
  160. ^ "PHP RFC: Mixed Type v2". wiki.php.net. Retrieved 14 August 2020.
  161. ^ "PHP RFC: Static return type". wiki.php.net. Retrieved 14 August 2020.
  162. ^ "PHP RFC: non-capturing catches". wiki.php.net. Retrieved 14 August 2020.
  163. ^ Andre, Tyson. "PHP RFC: Always available JSON extension". PHP. Retrieved 25 October 2020.
  164. ^ "PHP RFC: Explicit octal integer literal notation". wiki.php.net. Retrieved 2020-11-25.
  165. ^ "PHP RFC: Enumerations". wiki.php.net. Retrieved 2021-03-25.
  166. ^ "PHP: ElePHPant". 4 Oct 2014. Retrieved 4 Oct 2014.
  167. ^ "Redirecting…". wwphp-fb.github.io.
  168. ^ "The PHP Mascot's Birth - Creator Of The elePHPant Vincent Pontier Reveals The True Story!". 7php.com. 2014-01-06.
  169. ^ "PHP: ElePHPant".
  170. ^ "A Field Guide to Elephpants".
  171. ^ "tags – Manual". php.net. Retrieved 2014-02-17.
  172. ^ a b "PHP: rfc:shortags". php.net. 2008-04-03. Retrieved 2014-05-08.
  173. ^ "PHP: Basic syntax". The PHP Group. Retrieved 2008-02-22.
  174. ^ "Basic Coding Standard". PHP Framework Interoperability Group. Retrieved 2016-01-03.
  175. ^ "echo – Manual". php.net. Retrieved 2014-02-17.
  176. ^ "Description of core php.ini directives – Manual". php.net. 2002-03-17. Retrieved 2014-02-17.
  177. ^ "Your first PHP-enabled page". The PHP Group. Retrieved 2008-02-25.
  178. ^ Bray, Tim; et al. (26 November 2008). "Processing Instructions". Extensible Markup Language (XML) 1.0 (Fifth Edition). W3C. Retrieved 2009-06-18.
  179. ^ "Variables". The PHP Group. Retrieved 2008-03-16.
  180. ^ "Instruction separation". The PHP Group. Retrieved 2008-03-16.
  181. ^ "Comments". The PHP Group. Retrieved 2008-03-16.
  182. ^ "Integers in PHP, running with scissors, and portability". MySQL Performance Blog. March 27, 2007. Retrieved 2007-03-28.
  183. ^ a b c d e "Types". The PHP Group. Retrieved 2008-03-16.
  184. ^ "Strings". The PHP Group. Retrieved 2008-03-21.
  185. ^ "SPL – StandardPHPLibrary". PHP.net. March 16, 2009. Retrieved 2009-03-16.
  186. ^ a b "User-defined functions (PHP manual)". php.net. 2014-07-04. Retrieved 2014-07-07.
  187. ^ a b "Variable functions (PHP manual)". php.net. 2014-07-04. Retrieved 2014-07-07.
  188. ^ "create_function() (PHP manual)". php.net. 2014-07-04. Retrieved 2014-07-07.
  189. ^ "Anonymous functions (PHP manual)". php.net. 2014-07-04. Retrieved 2014-07-07.
  190. ^ "Arrow Functions (PHP manual)". php.net. Retrieved 2021-01-25.
  191. ^ Christian Seiler; Dmitry Stogov (2008-07-01). "Request for Comments: Lambda functions and closures". php.net. Retrieved 2014-07-07.
  192. ^ a b "PHP 5 Object References". mjtsai.com. Retrieved 2008-03-16.
  193. ^ "Classes and Objects (PHP 5)". The PHP Group. Retrieved 2008-03-16.
  194. ^ "Object cloning". The PHP Group. Retrieved 2008-03-16.
  195. ^ "Visibility (PHP Manual)". theserverpages.com. 2005-05-19. Retrieved 2010-08-26.
  196. ^ "How do computer languages work?". Retrieved 2009-11-04.
  197. ^ Gilmore, W. Jason (2006-01-23). Beginning PHP and MySQL 5: From Novice to Professional. Apress. p. 43. ISBN 1590595521.
  198. ^ "[VOTE] Integrating Zend Optimizer+ into the PHP distribution". news.php.net. Retrieved 2013-03-08.
  199. ^ "Alternative PHP Cache". PHP.net. Retrieved 2013-09-21.
  200. ^ "We are the 98.5% (and the 16%) « HipHop Virtual Machine". hhvm.com. December 2013. Retrieved 2014-02-23.
  201. ^ "The Definitive PHP 5.6, 7.0, 7.1, 7.2 & 7.3 Benchmarks (2019)". 2019-01-14. Retrieved 2019-04-19.
  202. ^ Krill, Paul (2017-09-20). "Forget PHP! Facebook's HHVM engine switches to Hack instead". InfoWorld. Retrieved 2019-02-06.
  203. ^ "Announcement on GitHub removing HPHPc support". Retrieved 2013-05-24.
  204. ^ "The PHP License, version 3.01". Retrieved 2010-05-20.
  205. ^ "GPL-Incompatible, Free Software Licenses". Various Licenses and Comments about Them. Free Software Foundation. Retrieved 2011-01-03.
  206. ^ "PHP: Function and Method listing – Manual". The PHP Group. Retrieved 2015-01-14.
  207. ^ "Introduction – Manual". php.net. 2013-06-07. Retrieved 2013-06-13.
  208. ^ Darryl Patterson (5 August 2004). "Simplify Business Logic with PHP DataObjects — O'Reilly Media". ibm.com. Retrieved 16 December 2014.
  209. ^ "IBM — United States". Retrieved 16 December 2014.
  210. ^ "Five common PHP database problems". ibm.com. 2006-08-01. Retrieved 2013-06-13.
  211. ^ "IBM Redbooks — Developing PHP Applications for IBM Data Servers". redbooks.ibm.com. Retrieved 16 December 2014.
  212. ^ "php[architect] Magazine - The Journal for PHP Programmers". www.phparch.com.
  213. ^ Krill, Paul (19 October 2005). "PHP catching on at enterprises, vying with Java". InfoWorld. Archived from the original on 13 July 2014.
  214. ^ "Cross Reference: /PHP_5_4/ext/standard/". php.net. Archived from the original on 16 March 2012. Retrieved 16 December 2014.
  215. ^ "Developing Custom PHP Extensions". devnewz.com. 2002-09-09. Archived from the original on 2008-02-18. Retrieved 2008-02-25.
  216. ^ "Why Zephir?". zephir-lang.com. 2015-10-20. Retrieved 2015-12-14.
  217. ^ "PHP Credits". Retrieved 2018-12-16.
  218. ^ "Learn PHP Via PHP Training and PHP Certification". www.zend.com. Retrieved 2020-11-16.
  219. ^ a b "General Installation Considerations". php.net. Retrieved 2013-09-22.
  220. ^ "News Archive: PHP 5.3.3 Released!". php.net. 2010-07-22.
  221. ^ "FastCGI Process Manager (FPM)". php.net. Retrieved 2013-09-22.
  222. ^ "Command line usage: Introduction". php.net. Retrieved 2013-09-22.
  223. ^ "Command line usage: Differences to other SAPIs". php.net. Retrieved 2013-09-22.
  224. ^ a b "General Installation Considerations". php.net. Retrieved 2013-09-22.
  225. ^ "PHP: Apache 2.x on Microsoft Windows". php.net. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  226. ^ "Command line usage: Introduction". php.net. Retrieved 2013-09-22.
  227. ^ "Installing PHP-GTK 2". php.net. Retrieved 2013-09-22.
  228. ^ "AWS SDK for PHP". aws.amazon.com. Retrieved 2014-03-06.
  229. ^ "Windows Azure SDK for PHP — Interoperability Bridges and Labs Center". interoperabilitybridges.com. Archived from the original on 2014-03-20. Retrieved 2014-03-06.
  230. ^ "Runtime configuration: Table of contents". php.net. Retrieved 2013-09-22.
  231. ^ "php.ini directives: List of php.ini directives". php.net. Retrieved 2013-09-22.
  232. ^ "Runtime configuration: The configuration file". PHP.net. Retrieved 2013-09-22.
  233. ^ "php.ini directives: List of php.ini sections". PHP.net. Retrieved 2013-09-22.
  234. ^ "Runtime configuration: Where a configuration setting may be set". PHP.net. Retrieved 2013-09-22.
  235. ^ "PHP Manual Image Processing and GD;". php.net. Retrieved 2011-04-09.
  236. ^ "PHP Server-Side Scripting Language". Indiana University. 2007-04-04. Archived from the original on 2016-01-21. Retrieved 2008-02-25.
  237. ^ "JavaServer Pages Technology — JavaServer Pages Comparing Methods for Server-Side Dynamic Content White Paper". Sun Microsystems. Retrieved 2008-02-25.
  238. ^ "Five simple ways to tune your LAMP application". 2011-01-25.
  239. ^ "PHP at the core: Extension structure". PHP.net. Retrieved 2013-09-22.
  240. ^ "PHP at the core: The "counter" Extension – A Continuing Example". PHP.net. Retrieved 2013-09-22.
  241. ^ "Extension Writing Part I: Introduction to PHP and Zend". Zend Technologies. 2005-03-01. Archived from the original on 2013-09-24. Retrieved 2013-09-22.
  242. ^ "Extension Writing Part II: Parameters, Arrays, and ZVALs". Zend Technologies. 2005-06-06. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  243. ^ "Extension Writing Part II: Parameters, Arrays, and ZVALs (continued)". Zend Technologies. 2005-06-06. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  244. ^ "Extension Writing Part III: Resources". Zend Technologies. 2006-05-12. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  245. ^ "Wrapping C++ Classes in a PHP Extension". Zend Technologies. 2009-04-22. Archived from the original on 2013-09-20. Retrieved 2013-09-22.
  246. ^ "Extending PHP with C++?". Stack Overflow. Retrieved 2013-09-22.
  247. ^ "How can I use C++ code to interact with PHP?". Stack Overflow. Retrieved 2013-09-22.
  248. ^ Golemon, Sara (2006). Extending and Embedding PHP. ISBN 978-0-672-32704-9.
  249. ^ "Bug Request #46919: Multi threading". PHP.net. Retrieved 2013-09-22.
  250. ^ "pthreads: Introduction (PHP Manual)". PHP.net. Retrieved 2013-09-22.
  251. ^ "PECL :: Package :: pthreads". pecl.php.net. Retrieved 2014-02-09.
  252. ^ "Manual:Installation requirements#PHP". MediaWiki. 2010-01-25. Retrieved 2010-02-26. PHP is the programming language in which MediaWiki is written [...]
  253. ^ "About WordPress". Retrieved 2010-02-26. WordPress was [...] built on PHP
  254. ^ Kempkens, Alex. "Joomla! — Content Management System to build websites & apps".
  255. ^ "PHP and Drupal". Drupal.org. Retrieved 2010-06-13.
  256. ^ "About". Moodle.org. Retrieved 2009-12-20.
  257. ^ "Server requirements of SilverStripe". Archived from the original on 28 November 2014. Retrieved 13 October 2014. SilverStripe requires PHP 5.3.2+
  258. ^ "PHP and Facebook | Facebook". Blog.facebook.com. Retrieved 2009-07-29.
  259. ^ "PHP and Digg". O'Reilly. Retrieved 2010-06-13.
  260. ^ "PHP 7 deployment at Dailymotion". Dailymotion engineering blog. 3 October 2016.
  261. ^ "PHP 7 at Tumblr". Tumblr Engineering. 4 November 2016.
  262. ^ Ide, Andy (2013-01-31). "PHP just grows & grows". Retrieved 2013-04-01.
  263. ^ "Usage Statistics and Market Share of PHP for Websites, March 2021". w3techs.com. Retrieved 2021-03-28.
  264. ^ "National Vulnerability Database (NVD) Search Vulnerabilities Statistics". Retrieved 2019-11-22.
  265. ^ "PHP Taint Mode RFC".
  266. ^ "Developer Meeting Notes, Nov. 2005".
  267. ^ "Taint mode decision, November 2007". Archived from the original on 2009-02-26.
  268. ^ "Hardened-PHP Project". 2008-08-15. Archived from the original on 2019-02-24. Retrieved 2019-08-22.
  269. ^ "Security: Using Register Globals". PHP Manual. PHP.net. Retrieved 2013-09-22.
  270. ^ "Magic Quotes". PHP Manual. PHP.net. Retrieved 2014-01-17.
  271. ^ "'engine' configuration directive". PHP: Runtime Configuration. PHP.net. Retrieved 2014-02-13.
  272. ^ "PHP Security Exploit With GIF Images". 2007-06-22. Archived from the original on 2013-09-27. Retrieved 2013-09-22.
  273. ^ "PHP security exploit with GIF images". PHP Classes blog. 2007-06-20. Retrieved 2013-09-22.
  274. ^ "Passing Malicious PHP Through getimagesize()". 2007-06-04. Archived from the original on 2013-09-21. Retrieved 2013-09-22.
  275. ^ "'enable_dl' configuration directive". PHP: Runtime Configuration. PHP.net. Retrieved 2014-02-13.
  276. ^ "PHP function reference: dl()". PHP.net. Retrieved 2013-09-22.
  277. ^ "My host won't fix their Trojan". WebHosting Talk. Retrieved 2013-09-22.
  278. ^ Raz0r. "Simple Machines Forum <= 2.0.3 Admin Password Reset".
  279. ^ Nibble Security. "TYPO3-SA-2010-020, TYPO3-SA-2010-022 EXPLAINED".
  280. ^ "Криптостойкость и небезопасное сравнение". Ahack.ru (in Russian).
  281. ^ "Comparison operators". PHP.net.
  282. ^ Krawczyk, Pawel (2013). "Most common attacks on web applications". IPSec.pl. Archived from the original on 2015-04-15. Retrieved 2015-04-15.
  283. ^ Krawczyk, Pawel (2013). "So what are the "most critical" application flaws? On new OWASP Top 10". IPSec.pl. Retrieved 2015-04-15.
  284. ^ "Usage Statistics and Market Share of PHP for Websites, December 2020". w3techs.com. Retrieved 2020-12-08.
  285. ^ "Usage statistics of PHP Version 5 for websites".
  286. ^ "Randomness Attacks Against PHP Applications".

Further reading

Listen to this article (35 minutes)
Spoken Wikipedia icon
This audio file was created from a revision of this article dated 23 November 2011 (2011-11-23), and does not reflect subsequent edits.

External links