PHP

Z Wikipédie, voľnej encyklopédie
Prejsť na navigáciu Prejsť na vyhľadávanie

PHP
PHP-logo.svg
ParadigmaMultiparadigma : imperatívna , funkčná , objektovo orientovaná , procedurálna , reflexívna
NavrholRasmus Lerdorf
VývojárVývojový tím PHP, Zend Technologies
Prvýkrát sa objavil8. júna 1995 ; pred 26 rokmi [1] [2] (1995-06-08)
Stabilné uvoľnenie
8.1.0 [3] Edit this on Wikidata / 25. novembra 2021 ; pred 6 dňami (25 November 2021)
Ukážka vydania
8.1.0 Beta 1 [4] Edit this on Wikidata / 22. júla 2021 ; pred 4 mesiacmi (22 July 2021)
Disciplína v písaníDynamický , slabý

od verzie 7.0:

Postupné [5]
Implementačný jazykC (primárne; niektoré komponenty C++ )
OSUnixové , Windows , macOS , IBM i , OpenVMS
LicenciaLicencia PHP (väčšina motora Zend pod licenciou Zend Engine License )
Prípony názvov súborov.php, .phar, .phtml, .pht,.phps
webové stránkywww .php .net Edit this at Wikidata
Hlavné implementácie
Zend Engine , HHVM , PeachPie , Quercus , Parrot
Ovplyvnený
Perl , HTML , C , C++ , Java [ citácia ] , Tcl , [2] JavaScript , Hack [6]
Ovplyvnený
Hack , JSP , ASP

PHP je univerzálny skriptovací jazyk zameraný na vývoj webových aplikácií . [7] Pôvodne ho vytvoril dánsko-kanadský programátor Rasmus Lerdorf v roku 1994. [8] Referenčnú implementáciu PHP teraz vyrába The PHP Group. [9] PHP pôvodne znamenalo Personal Home Page , [8] ale teraz znamená rekurzívny inicializmus PHP: Hypertext Preprocessor . [10]

PHP kód je zvyčajne spracovaný na webovom serveri PHP interpretom implementovaným ako modul , démon alebo ako spustiteľný súbor Common Gateway Interface (CGI). Na webovom serveri by výsledok interpretovaného a spusteného kódu PHP – čo môže byť akýkoľvek typ údajov, ako sú generované HTML alebo binárne obrazové údaje – tvoril celú odpoveď HTTP alebo jej časť . Rôzne systémy webových šablón, systémy na správu webového obsahu a webové rámceexistujú, ktoré možno použiť na organizáciu alebo uľahčenie generovania tejto odpovede. Okrem toho možno PHP použiť na mnohé programovacie úlohy mimo webového kontextu, ako sú samostatné grafické aplikácie [11] a ovládanie robotických dronov . [12] PHP kód je možné spustiť aj priamo z príkazového riadku .

Štandardný interpret PHP, poháňaný Zend Engine , je bezplatný softvér vydaný pod licenciou PHP . PHP bolo široko portované a môže byť nasadené na väčšine webových serverov na rôznych operačných systémoch a platformách . [13]

Jazyk PHP sa až do roku 2014 vyvíjal bez písomnej formálnej špecifikácie alebo štandardu, pričom pôvodná implementácia fungovala ako de facto štandard, ktorý mali ostatné implementácie nasledovať. Od roku 2014 sa pracuje na vytvorení formálnej špecifikácie PHP. [14]

W3Techs uvádza, že od apríla 2021 „PHP používa 79,2 % všetkých webových stránok, ktorých programovací jazyk na strane servera poznáme.“ [15] Najpoužívanejšou verziou je PHP verzia 7.4, potom 7.3, ktorá končí 6. decembra 2021 podporu.

História

Rasmus Lerdorf , tvorca PHP; a Andi Gutmans a Zeev Suraski , tvorcovia Zend Engine

Skorá história

PHP vývoj začal v roku 1994, kedy Rasmus Lerdorf napísal niekoľko Common Gateway Interface (CGI) programov v C , [16] [17] , ktorý sa používa na udržanie jeho osobné domovskú stránku . Rozšíril ich na prácu s webovými formulármi a na komunikáciu s databázami a túto implementáciu nazval „Personal Home Page/Forms Interpreter“ alebo PHP/FI.

PHP/FI možno použiť na vytváranie jednoduchých, dynamických webových aplikácií . Na urýchlenie hlásenia chýb a zlepšenie kódu Lerdorf pôvodne ohlásil vydanie PHP/FI ako „Nástroje pre osobnú domovskú stránku (PHP Tools) verzie 1.0“ v diskusnej skupine Usenet comp.infosystems.www.authoring.cgi 8. júna 1995. . [1] [18] Táto verzia už mal základné funkcie, ktoré PHP má dnes. To zahŕňalo premenné podobné Perlu , prácu s formulármi a možnosť vložiť HTML . Syntax sa podobal tomu Perl , ale bolo jednoduchšie, obmedzený a menej konzistentné. [9]

Príklad skorej syntaxe PHP : [19]

<!-- include  / text / header . html -->

<! - getenv  HTTP_USER_AGENT -> 
<! - ak  substr  $ exec_result  Mozille -> 
  Hej ,  tie   pomocou  Netscape ! < P > 
<! - endif ->

<! - SQL  databázy  vyberte  *  z  tabuľky  , kde  užívateľ = '$ username' -> 
<! - ifless  $ NumEntries  1 -> 
  Je nám ľúto ,  že  záznam  nie je  ani  neexistuje < p > 
<! - endif  exit -> 
  Vítame  <! - $ user ! -> < p > 
  Môžete  mať  <! - $ index : 0 ->  kreditov  odišiel  do  vášho  účtu <.p >

<!-- include  / text / footer . html -->

Skoré PHP nebolo zamýšľané ako nový programovací jazyk a rástlo organicky, pričom Lerdorf s odstupom času poznamenal: „Neviem, ako to zastaviť, nikdy nebolo v úmysle napísať programovací jazyk [...] Mám absolútne netuším, ako napísať programovací jazyk, len som pridával ďalší logický krok na ceste." [20] Začal sa formovať vývojový tím a po mesiacoch práce a beta testovaní oficiálne vydal PHP/FI 2 v novembri 1997.

Skutočnosť, že PHP nebolo pôvodne navrhnuté, ale bolo vyvinuté organicky, viedlo k nejednotnému pomenovaniu funkcií a nejednotnému usporiadaniu ich parametrov. [21] V niektorých prípadoch boli názvy funkcií zvolené tak, aby zodpovedali knižniciam nižšej úrovne, ktoré PHP „zabalilo“, [22] zatiaľ čo v niektorých veľmi skorých verziách PHP sa dĺžka názvov funkcií používala interne ako hašovacia funkcia. , takže názvy boli zvolené na zlepšenie distribúcie hodnôt hash . [23]

PHP 3 a 4

Toto je príklad PHP kódu pre redakčný systém WordPress .

Zeev Suraski a Andi Gutmans prepísali syntaktický analyzátor v roku 1997 a vytvorili základ PHP 3, pričom zmenili názov jazyka na rekurzívny akronym PHP: Hypertext Preprocessor . [9] [24] Potom sa začalo verejné testovanie PHP 3 a oficiálne spustenie prišlo v júni 1998. Suraski a Gutmans potom začali s novým prepisom jadra PHP a v roku 1999 vytvorili Zend Engine . [25] Založili tiež Zend Technológie v Ramat Gan , Izrael . [9]

22. mája 2000 bolo vydané PHP 4, poháňané Zend Engine 1.0. [9] Do augusta 2008 dosiahla táto vetva verziu 4.4.9. PHP 4 už nie je vo vývoji a ani sa neplánuje vydanie žiadnych bezpečnostných aktualizácií. [26] [27]

PHP 5

1. júla 2004 bolo vydané PHP 5, poháňané novým Zend Engine II. [9] PHP 5 obsahovalo nové funkcie, ako je vylepšená podpora objektovo orientovaného programovania , rozšírenie PHP Data Objects (PDO) (ktoré definuje ľahké a konzistentné rozhranie pre prístup k databázam) a mnohé vylepšenia výkonu. [28] V roku 2008 sa PHP 5 stalo jedinou stabilnou verziou vo vývoji. Neskorá statická väzba v predchádzajúcich verziách PHP chýbala a bola pridaná vo verzii 5.3. [29] [30]

Mnoho významných projektov s otvoreným zdrojovým kódom prestalo podporovať PHP 4 v novom kóde od 5. februára 2008 kvôli iniciatíve GoPHP5 [31], ktorú poskytlo konzorcium vývojárov PHP propagujúcich prechod z PHP 4 na PHP 5. [32 ] [33]

Postupom času sa interpreti PHP stali dostupnými na väčšine existujúcich 32-bitových a 64-bitových operačných systémov, buď ich zostavením zo zdrojového kódu PHP, alebo použitím vopred zostavených binárnych súborov. [34] Pre verzie PHP 5.3 a 5.4 boli jedinými dostupnými binárnymi distribúciami Microsoft Windows 32-bitové zostavy IA-32 , [35] [36] vyžadujúce režim 32-bitovej kompatibility Windows pri používaní Internet Information Services (IIS) na 64 -bitová platforma Windows. PHP verzia 5.5 sprístupnila 64-bitové x86-64 zostavy pre Microsoft Windows. [37]

Oficiálna bezpečnostná podpora pre PHP 5.6 skončila 31. decembra 2018. [38]

PHP 6 a Unicode

PHP získalo zmiešané recenzie kvôli nedostatku natívnej podpory Unicode na úrovni základného jazyka. [39] [40] V roku 2005 bol iniciovaný projekt vedený Andrei Zmievskim s cieľom priniesť natívnu podporu Unicode do celého PHP, vložením knižnice International Components for Unicode (ICU) a interným reprezentovaním textových reťazcov ako UTF-16 . [41] Keďže by to spôsobilo veľké zmeny vo vnútri jazyka aj v používateľskom kóde, plánovalo sa vydať túto verziu ako verziu 6.0 jazyka spolu s ďalšími hlavnými funkciami, ktoré boli vtedy vo vývoji. [42]

Nedostatok vývojárov, ktorí rozumeli potrebným zmenám, a problémy s výkonom vyplývajúce z prevodu na az UTF-16, ktoré sa vo webovom kontexte používa len zriedka, však viedli k oneskoreniam projektu. [43] V dôsledku toho bolo v roku 2009 vytvorené vydanie PHP 5.3 s mnohými funkciami, ktoré nie sú Unicode, prenesenými z PHP 6, najmä mennými priestormi. V marci 2010 bol projekt vo svojej súčasnej podobe oficiálne opustený a bolo pripravené vydanie PHP 5.4 obsahujúce väčšinu zostávajúcich funkcií, ktoré nie sú Unicode z PHP 6, ako sú vlastnosti a opätovné viazanie uzáveru. [44] Pôvodné nádeje boli, že sa vytvorí nový plán integrácie Unicode, ale do roku 2014 nebol žiadny prijatý.

PHP 7

Počas rokov 2014 a 2015 bola vyvinutá nová hlavná verzia PHP, PHP 7. Číslovanie tejto verzie vyvolalo diskusiu medzi internými vývojármi. [45] Zatiaľ čo experiment PHP 6 Unicode nebol nikdy vydaný, niekoľko článkov a názvov kníh odkazovalo na názov PHP 6, čo by mohlo spôsobiť zmätok, ak by nové vydanie opätovne použilo názov. [46] Po hlasovaní bol zvolený názov PHP 7. [47]

Základom PHP 7 je vetva PHP, ktorá bola pôvodne nazvaná PHP budúcej generácie ( phpng ). Napísali ho Dmitrij Stogov, Xinchen Hui a Nikita Popov [48] a jeho cieľom bolo optimalizovať výkon PHP refaktorovaním Zend Engine pri zachovaní takmer úplnej jazykovej kompatibility. [49] Do 14. júla 2014 benchmarky založené na WordPress , ktoré slúžili ako hlavná sada benchmarkov pre projekt phpng, vykazovali takmer 100% nárast výkonu. Zmeny v phpng uľahčujú zlepšenie výkonu v budúcich verziách, pretože kompaktnejšie dátové štruktúry a ďalšie zmeny sa považujú za vhodnejšie pre úspešnú migráciu na kompilátor just-in-time (JIT).[50] Kvôli významným zmenám bol prepracovaný Zend Engine nazvaný Zend Engine 3 , ktorý nahrádza Zend Engine 2 používaný v PHP 5. [51]

Kvôli veľkým interným zmenám v phpng musí dostať nové hlavné číslo verzie PHP, a nie menšie vydanie PHP 5, podľa procesu vydávania PHP. [52] Hlavné verzie PHP majú povolené prelomiť spätnú kompatibilitu kódu, a preto PHP 7 predstavovalo príležitosť na ďalšie vylepšenia nad rámec phpng, ktoré vyžadujú prerušenia spätnej kompatibility. Išlo najmä o tieto zmeny:

  • Mnohé fatálne alebo obnoviteľné staršie chybové mechanizmy PHP boli nahradené modernými objektovo orientovanými výnimkami . [53]
  • Syntax pre premennú dereferencing bol prepracovaný, aby vnútorne konzistentné a úplné, čo umožňuje použitie operátorov ->, [], (), {}a ::, s ľubovoľnými zmysluplné ľavej strane výrazov. [54]
  • Podpora pre staršie metódy konštruktora v štýle PHP 4 bola zastaraná. [55]
  • Správanie foreachvyhlásenia sa zmenilo tak, aby bolo predvídateľnejšie. [56]
  • Konštruktory pre niekoľko tried zabudovaných do PHP, ktoré pri zlyhaní vracali hodnotu null, boli zmenené tak, aby namiesto toho vyvolali výnimku kvôli konzistencii. [57]
  • Z jadra PHP bolo odstránených niekoľko neudržiavaných alebo zastaraných serverových aplikačných programovacích rozhraní (SAPI) a rozšírení, najmä staršie mysqlrozšírenie. [58]
  • Správanie list()operátora bolo zmenené, aby sa odstránila podpora reťazcov. [59]
  • Podpora bola odobratá pre staršie ASP štýlu oddeľovača <%a %>a <script language="php"> ... </script>. [60]
  • Opravený bol omyl, ktorý umožnil, aby príkaz switch mal viacero defaultklauzúl. [61]
  • Podpora pre hexadecimálne čísla v niektorých implicitných prevodoch z reťazcov na číselné typy bola odstránená. [62]
  • Na ľavej-shift a pravým smeny operátorov boli zmenené, aby sa správali konzistentne naprieč platformami. [63]
  • Prevody medzi číslami s pohyblivou rádovou čiarkou a celými číslami sa zmenili (napr. nekonečno sa zmenilo na nulu) a implementovali sa konzistentnejšie naprieč platformami. [63] [64]

PHP 7 tiež obsahovalo nové jazykové funkcie. Predovšetkým zaviedol deklarácie návratových typov pre funkcie [65], ktoré dopĺňajú existujúce deklarácie typov parametrov, a podporu pre skalárne typy (celé číslo, float, reťazec a boolean) v deklaráciách parametrov a návratových typov. [66]

PHP 8

PHP 8 bolo vydané 26. novembra 2020. PHP 8 je hlavná verzia a má prelomové zmeny oproti predchádzajúcim verziám. [67] [68] Nové funkcie a významné zmeny zahŕňajú:

Kompilácia v pravý čas

Just-in-time kompilácia je podporovaná v PHP 8. [69]

Kompilátor JIT PHP 8 môže poskytnúť podstatné vylepšenia výkonu pre niektoré prípady použitia, [70] [71], zatiaľ čo vývojár PHP Nikita Popov uviedol, že vylepšenia výkonu pre väčšinu webových stránok budú menej podstatné ako upgrade z PHP 5 na PHP 7. [72] Podstatné zlepšenia sa očakávajú skôr pre operácie matematického typu ako pre bežné prípady použitia pri vývoji webu. [72] Okrem toho kompilátor JIT poskytuje budúci potenciál na presun nejakého kódu z C do PHP kvôli zlepšeniu výkonu pre niektoré prípady použitia. [73]

Pridanie zhodného výrazu

PHP 8 zaviedlo matchvýraz. [74] Výraz zhody je koncepčne podobný switchpríkazu a pre niektoré prípady použitia je kompaktnejší. [75] Keďže matchide o výraz, jeho výsledok možno zachytiť do premennej alebo vrátiť z funkcie. [76]

Napíšte zmeny a doplnky

PHP 8 zaviedlo zjednocovacie typy, nový staticnávratový typ a nový mixedtyp. [67]

V PHP 8 boli pridané „atribúty“, v iných programovacích jazykoch často označované ako „anotácie“, ktoré umožňujú pridávanie metadát do tried. [67]

throwsa zmenilo z výroku na výraz. [77] To umožňuje vyvolať výnimky na miestach, ktoré predtým nebolo možné. [67]

Zmeny a doplnky syntaxe

PHP 8 obsahuje zmeny, ktoré umožňujú alternatívne, stručnejšie alebo konzistentnejšie syntaxe v mnohých scenároch. Napríklad operátor nullsafe je podobný operátoru null coalescing ?? , ale používa sa pri volaní metód. [78] Nasledujúci útržok kódu nevyvolá chybu, ak getBirthday()vráti hodnotu null:

$human_readable_date  =  $user -> getBirthday () ?-> diffForHumans ();

Propagácia vlastnosti konštruktora bola pridaná ako „ syntaktický cukor “, čo umožňuje automatické nastavenie vlastností triedy pri odovzdaní parametrov do konštruktora triedy . [67] Toto znižuje množstvo štandardného kódu, ktorý sa musí napísať.

Medzi ďalšie menšie zmeny patrí podpora pre použitie ::classna objektoch, ktorá slúži ako alternatíva pre použitie get_class(); [67] neulovenie úlovkov v pokusných blokoch; vylepšenia variabilnej syntaxe na vyriešenie nezrovnalostí; podpora pre pomenované argumenty; a podpora pre koncové čiarky v zoznamoch parametrov, ktorá pridáva konzistentnosť s podporou koncových čiarok v iných kontextoch, ako napríklad v poliach.

Štandardné zmeny a doplnky knižnice

  • V PHP 8 boli pridané slabé mapy. A WeakMapobsahuje referencie na objekty, ale tieto referencie nezabraňujú tomu, aby sa takéto objekty zbierali do odpadu . [79] Toto môže poskytnúť vylepšenia výkonu v scenároch, kde sa údaje ukladajú do vyrovnávacej pamäte ; toto je obzvlášť dôležité pre ORM . [67]
  • Rôzne úpravy rozhraní, ako napríklad pridanie podpory na vytváranie DateTimeobjektov z rozhraní a pridanie Stringablerozhrania, ktoré možno použiť na napovedanie typu.
  • Rôzne nové funkcie vrátane str_contains(), str_starts_with() a str_ends_with(); [80] fdiv(); get_debug_type(); a get_resource_id()
  • Implementácia objektu token_get_all()

Ďalšie zmeny

  • Typové anotácie boli pridané aj do samotného zdrojového kódu PHP v jazyku C, aby umožnili interným funkciám a metódam mať „úplné informácie o type v odraze“. [81]
  • Dedičnosť súkromnými metódami
  • Abstraktné metódy zlepšovania vlastností

História vydania

Verzia Dátum vydania Podporované do [82] Poznámky
Old version, no longer maintained: 1,0 8. júna 1995 Oficiálne nazývané „Nástroje osobnej domovskej stránky (PHP Tools)“. Toto je prvé použitie názvu „PHP“. [9]
Old version, no longer maintained: 2.0 1. novembra 1997 Oficiálne sa nazýva „PHP/FI 2.0“. Toto je prvé vydanie, ktoré by sa v skutočnosti dalo charakterizovať ako PHP, keďže ide o samostatný jazyk s mnohými funkciami, ktoré pretrvali až do súčasnosti.
Old version, no longer maintained: 3.0 6. júna 1998 20. októbra 2000 [82] Vývoj sa presúva od jednej osoby k viacerým vývojárom. Zeev Suraski a Andi Gutmans prepisujú základ pre túto verziu. [9]
Old version, no longer maintained: 4.0 22. mája 2000 [83] 23. júna 2001 [82] Pridaný pokročilejší dvojstupňový systém analýzy/spustenia analýzy značiek s názvom Zend engine. [84]
Old version, no longer maintained: 4.1 10. decembra 2001 [85] 12. marca 2002 [82] Predstavené "superglobals" ( $_GET, $_POST, $_SESSION, atď), [84]
Old version, no longer maintained: 4.2 22. apríla 2002 [86] 6. september 2002 [82] Vypnutá register_globalsv predvolenom nastavení. Dáta prijaté cez sieť sa už nevkladajú priamo do globálneho menného priestoru, čím sa uzatvárajú možné bezpečnostné diery v aplikáciách. [84]
Old version, no longer maintained: 4.3 27. decembra 2002 [87] 31. marca 2005 [82] Zavedené rozhranie príkazového riadka (CLI) na doplnenie CGI. [84] [88]
Old version, no longer maintained: 4.4 11. júla 2005 [89] 7. augusta 2008 [82] Opravená chyba poškodenia pamäte, ktorá vyžadovala prelomenie binárnej kompatibility s rozšíreniami kompilovanými proti verzii PHP 4.3.x. [90]
Old version, no longer maintained: 5.0 13. júla 2004 [91] 5. septembra 2005 [82] Zend Engine II s novým objektovým modelom. [92]
Old version, no longer maintained: 5.1 24. novembra 2005 [93] 24. augusta 2006 [82] Zlepšenie výkonu so zavedením premenných kompilátora v prepracovanom PHP Engine. [92] Pridané PHP Data Objects (PDO) ako konzistentné rozhranie pre prístup k databázam. [94]
Old version, no longer maintained: 5.2 2. novembra 2006 [95] 6. januára 2011 [82] V predvolenom nastavení je povolené rozšírenie filtra. Natívna podpora JSON . [92]
Old version, no longer maintained: 5.3 30. júna 2009 [96] 14. augusta 2014 [82] podpora menného priestoru ; neskoré statické väzby , skokový štítok (limited goto ), anonymné funkcie , uzávery , PHP archívy (phar), garbage collection pre kruhové referencie, vylepšená podpora Windows , sqlite3, mysqlnd ako náhrada za libmysql ako základná knižnica pre rozšírenia, ktoré pracujú s MySQL , fileinfo ako náhrada za mime_magic pre lepšiu podporu MIME , rozšírenie Internacionalizácia a ukončenie podpory rozšírenia ereg.
Old version, no longer maintained: 5.4 1. marca 2012 [97] 3. september 2015 [82] Podpora vlastností, podpora syntaxe krátkeho poľa. Odstránené položky: register_globals, safe_mode, allow_call_time_pass_reference, , a . Vstavaný webový server. [98] Niekoľko vylepšení existujúcich funkcií, výkonu a znížených požiadaviek na pamäť. session_register()session_unregister()session_is_registered()
Old version, no longer maintained: 5.5 20. júna 2013 [99] 10. júla 2016 [100] Podpora pre generátory , finallybloky na spracovanie výnimiek, OpCache (založené na Zend Optimizer+) pribalené v oficiálnej distribúcii. [101]
Old version, no longer maintained: 5.6 28. augusta 2014 [102] 31. december 2018 [100] Konštantné skalárne výrazy, variadic funkcie , rozbaľovanie argumentov, nový operátor umocňovania, rozšírenia usepríkazu pre funkcie a konštanty, nový phpdbgdebugger ako modul SAPI a ďalšie menšie vylepšenia. [103]
6.x Nevydané N/A Opustená verzia PHP, ktorá plánovala zahrnúť natívnu podporu Unicode. [104] [105]
Old version, no longer maintained: 7,0 3. december 2015 [106] 10. januára 2019 [52] Zend Engine 3 (vylepšenia výkonu [50] a podpora 64-bitových celých čísel v systéme Windows [107] ), jednotná syntax premenných, [54] kompilačný proces založený na AST , [108] pridané , [109] konzistencia bitového posunu naprieč platformami, [ 110] ( null coalesce ) operátor, [111] Unicode kódová syntax bodu escape , [112] deklarácie návratového typu, [65] deklarácie skalárneho typu (celé číslo, float, reťazec a boolean), [66] "vesmírna loď" trojcestné porovnanie operátor, [113] generátorClosure::call() ?? <=> delegovanie, [114] anonymné triedy , [115] jednoduchšie a konzistentnejšie dostupné CSPRNG API, [116] nahradenie mnohých zostávajúcich interných „chyb“ PHP modernejšími výnimkami , [53] a skrátená syntax na import viacerých položiek z menného priestoru . [117]
Old version, no longer maintained: 7.1 1. decembra 2016 1. december 2019 [100] void návratový typ , [118] modifikátory konštantnej viditeľnosti triedy [119]
Old version, no longer maintained: 7.2 30. novembra 2017 30. novembra 2020 [100] Deklarácia parametra objektu a návratového typu, [120] rozšírenie Libsodium, [121] prepísanie abstraktnej metódy, [122] rozšírenie typu parametra [123]
Older version, yet still maintained: 7.3 6. december 2018 [124] 6. decembra 2021 Flexibilná syntax Heredoc a Nowdoc, [125] podpora priradenia referencií a dekonštrukcie poľa pomocou list(), [126] podpora PCRE2, [127] funkcia hrtime() [128]
Older version, yet still maintained: 7.4 28. novembra 2019 [129] 28. novembra 2022 Typované vlastnosti 2.0, [130] predbežné načítanie, [131] operátor priradenia null- coalescing , [132] zlepšenie openssl_random_pseudo_bytes, [133] Slabé referencie, [79] FFI – rozhranie cudzích funkcií , [134] vždy dostupné rozšírenie hash, [135] register hash hesiel, [136] viacbajtové rozdelenie reťazcov, [137] reflexia pre referencie, [138] unbundle ext/wddx, [139] nový vlastný mechanizmus serializácie objektov [140]
Older version, yet still maintained: 8.0 26. novembra 2020 [141] 26. novembra 2023 Just-In-Time (JIT) kompilácia , [69] polia začínajúce negatívnym indexom, [142] prísnejšia/sémantika jazyka (overenie pre metódy abstraktných vlastností), [143] rozumnejšie porovnávanie reťazcov s číslami, [144] rozumnejšie numerické reťazce, [145] Chyba typu pri neplatných aritmetických/bitových operátoroch, [146] preklasifikovanie rôznych chýb motora, [147] konzistentné chyby typu pre interné funkcie, [148] závažná chyba pre nekompatibilné podpisy metód [149] ), pohyblivý znak nezávislý od lokality konverzia na reťazec, [150] vylepšenia syntaxe premenných, [151] atribúty,[152] [153] [154] [155] pomenované argumenty, [156] výraz zhody, [157] propagácia vlastnosti konštruktora, [158] zjednocovacie typy, [159] zmiešaný typ, [160] statický návratový typ, [161] Operátor nullsafe, [78] nezachytávajúce úlovky, [162] výraz throw, [77] rozšírenie JSON je vždy dostupné. [163]
Current stable version: 8.1 25. novembra 2021 25. novembra 2024 Explicitné oktalové celočíselné doslovné zápisy, [164] enumerácie, [165] vlastnosti len na čítanie, [166] prvotriedna volateľná syntax, [167] nové v inicializátoroch, [168] čisté typy priesečníkov, [169] nikdy nevrátiť typ, [170] obmedzenia konečnej triedy, [171] vlákna [172]
Legenda:
Stará verzia
Staršia verzia, stále udržiavaná
Najnovšia verzia
Najnovšia ukážková verzia
Budúce vydanie

Počnúc 28. júnom 2011 implementoval vývojový tím PHP časový plán vydania nových verzií PHP. [52] V rámci tohto systému by sa malo každý mesiac objaviť aspoň jedno vydanie. Raz za rok by sa malo objaviť menšie vydanie, ktoré môže obsahovať nové funkcie. Každé menšie vydanie by malo byť podporované aspoň dva roky s bezpečnostnými opravami a opravami chýb, po ktorých by mal nasledovať aspoň jeden rok iba bezpečnostných opráv, čo predstavuje celkovo trojročný proces vydávania pre každé menšie vydanie. Počas trojročného procesu vydania sa do menšieho vydania nezavedú žiadne nové funkcie, pokiaľ nie sú malé a samostatné.

maskot

Maskot elePHPant, PHP

Maskotom projektu PHP je elePHPant , modrý slon s logom PHP na boku, ktorý navrhol Vincent Pontier [173] v roku 1998. [174] „Písmená (PHP) vytvárali tvar slona, ​​ak sa naň pozerali bočný uhol." [175] Keď je slon vo forme plyšovej hračky, niekedy má inú farbu .

V priebehu rokov bolo vyrobených veľa variácií tohto maskota. Iba elePHPants založené na pôvodnom dizajne Vincenta Pontiera sú komunitou považované za oficiálne. [176] Sú zberateľské a niektoré z nich sú mimoriadne vzácne. [177]

Syntax

Aplikácia „Hello World“ v PHP 7.4 spustená na lokálnom vývojovom serveri

Nasledujúce "Ahoj, svet!" program je napísaný v PHP kóde vloženom do HTML dokumentu:

<!DOCTYPE html> 
< html > 
    < head > 
        < title > PHP "Ahoj, svet!" program </ title > 
    </ head > 
    < body >
        <?php
            echo  '<p>Ahoj, Svet!</p>' ;
        ?>
    </ body > 
</ html >

Keďže však neexistuje žiadna požiadavka na to, aby bol kód PHP vložený do HTML, najjednoduchšia verzia Hello, World! môže byť napísaný takto, s vynechaným záverečným tagom ako preferovaným v súboroch obsahujúcich čistý PHP kód [178]?>

<?php 
    echo  'Ahoj, svet!' ; 
?>

Interpret PHP vykonáva kód PHP iba ​​v rámci svojich oddeľovačov . Čokoľvek mimo jeho oddeľovačov nie je spracované PHP, hoci text, ktorý nie je PHP, stále podlieha riadiacim štruktúram popísaným v kóde PHP. Najbežnejšími oddeľovačmi sú <?phpotváranie a zatváranie sekcií PHP. Existuje aj skrátená forma . Tento krátky oddeľovač robí súbory skriptov menej prenosnými, pretože ich podporu je možné vypnúť v lokálnej konfigurácii PHP, a preto sa neodporúča. [179] [180] Naopak, neexistuje žiadne odporúčanie proti echo short tagu . [181] Pred PHP 5.4.0 táto krátka syntax pre funguje iba s?><?<?=echoshort_open_tagnastavenie konfigurácie povolené, zatiaľ čo pre PHP 5.4.0 a novšie je vždy dostupné. [182] [183] [179] Účelom všetkých týchto oddeľovačov je oddeliť kód PHP od obsahu, ktorý nie je PHP, ako je kód JavaScript alebo značka HTML. [184] Takže najkratšie "Ahoj, svet!" program napísaný v PHP je:

<? = 'Ahoj, Svet!' ;

Prvá forma oddeľovačov <?phpa , v XHTML a iných XML dokumentoch vytvára správne vytvorené inštrukcie na spracovanie XML. [185] To znamená, že výsledná zmes PHP kódu a iných značiek v súbore na strane servera je sama osebe dobre sformovaný XML. ?>

Pred premennými je symbol dolára a typ nie je potrebné špecifikovať vopred. PHP 5 zaviedlo deklarácie typu, ktoré umožňujú funkciám vynútiť, aby ich parametre boli objekty špecifickej triedy, polia, rozhrania alebo funkcie spätného volania . Pred PHP 7 sa však deklarácie typu nedali použiť so skalárnymi typmi, ako je celé číslo alebo reťazec. [66]

Nižšie je uvedený príklad, ako sa deklarujú a inicializujú premenné PHP.

<?php 
    $name  =  'John' ;   // deklarovaná a inicializovaná premenná typu string 
    $age  =  18 ;        // deklarovaná a inicializovaná premenná celočíselného typu 
    $height  =  5.3 ;    // premenná typu double je deklarovaná a inicializovaná 
    echo  $name  .  'je'  .  $výška  .  'som vysoký\n' ;  // zreťazenie premenných a reťazcov 
    echo  " $meno $vek rokov." ;  // interpolácia premenných do reťazca 
?>

Na rozdiel od názvov funkcií a tried sa v názvoch premenných rozlišujú veľké a malé písmená. Reťazce s dvojitými úvodzovkami ("") aj heredoc poskytujú možnosť interpolovať hodnotu premennej do reťazca. [186] PHP zaobchádza s novými riadkami ako s prázdnymi znakmi na spôsob jazyka voľného tvaru a príkazy sú ukončené bodkočiarkou. [187] PHP má tri typy syntaxe komentárov : /* */blokové značky a vložené komentáre; //alebo #sa používajú na jednoriadkové komentáre. [188] Príkaz echoje jednou z niekoľkých možností, ktoré PHP poskytuje na výstup textu.

Z hľadiska kľúčových slov a syntaxe jazyka je PHP podobné syntaxi štýlu C. ifpodmienky, fora whileslučky a vráti funkcie sú podobné v syntaxi jazykov, ako je C, C ++, C #, Java a Perl.

Typy údajov

PHP je voľne napísané . To ukladá celé čísla v rozmedzí závislé na platforme, a to buď ako 32, 64 alebo 128-bit podpísané celé číslo rovnajúce sa C-jazykové dlhé typu . Celé čísla bez znamienka sa v určitých situáciách skonvertujú na hodnoty so znamienkom, čo je odlišné správanie od mnohých iných programovacích jazykov. [189] Celočíselné premenné možno priradiť pomocou desiatkových (kladných a záporných), osmičkových , hexadecimálnych a binárnych zápisov.

Čísla s pohyblivou rádovou čiarkou sú tiež uložené v rozsahu špecifickom pre platformu. Môžu byť špecifikované pomocou zápisu s pohyblivou rádovou čiarkou alebo dvoch foriem vedeckého zápisu . [190] PHP má natívny boolovský typ, ktorý je podobný natívnym boolovským typom v jazykoch Java a C++ . Pomocou pravidiel konverzie typu Boolean sú nenulové hodnoty interpretované ako pravda a nula ako nepravda, ako v Perl a C++. [190]

Dátový typ null predstavuje premennú, ktorá nemá žiadnu hodnotu; NULLje jedinou povolenou hodnotou pre tento typ údajov. [190]

Premenné typu „zdroj“ predstavujú odkazy na zdroje z externých zdrojov. Tieto sú zvyčajne vytvorené funkciami z určitého rozšírenia a môžu byť spracované iba funkciami z rovnakého rozšírenia; príklady zahŕňajú prostriedky súborov, obrázkov a databáz. [190]

Polia môžu obsahovať prvky akéhokoľvek typu, ktoré PHP dokáže spracovať, vrátane zdrojov, objektov a dokonca aj iných polí. Poradie je zachované v zoznamoch hodnôt a v hashoch s kľúčmi aj hodnotami a tieto dva je možné prelínať. [190] PHP tiež podporuje reťazce , ktoré možno použiť s jednoduchými úvodzovkami, dvojitými úvodzovkami, syntaxou nowdoc alebo heredoc . [191]

Štandardné PHP Library (SPL) sa snaží riešiť obvyklé problémy a realizuje efektívny prístup k dátam rozhrania a tried. [192]

Funkcie

PHP definuje veľké množstvo funkcií v základnom jazyku a mnohé sú dostupné aj v rôznych rozšíreniach; tieto funkcie sú dobre zdokumentované v online dokumentácii PHP . [193] Avšak, vstavaný v knižnici má širokú škálu konvencie a pridružené nezrovnalosti, ako je popísané v histórii vyššie.

Vlastné funkcie môže definovať vývojár:

function  myAge ( int  $birthYear ) :  string 
{ 
    // vypočítajte vek odčítaním roku narodenia od aktuálneho roku. 
    $yearsStarý  =  dátum ( 'Y' )  -  $rok narodenia ;

    // vráti vek v popisnom reťazci. 
    návrat  $yearsOld  .  'rok'  .  ( $yearsOld  !=  1  ?  's' : '' ); 
}

echo  'Momentálne som'  .  môj vek ( 1995 )  .  'starý.' ;

V roku 2021 je výstupom vyššie uvedeného vzorového programu „Momentálne mám 26 rokov“.

Namiesto ukazovateľov funkcií možno na funkcie v PHP odkazovať reťazcom obsahujúcim ich názov. Týmto spôsobom je možné použiť bežné funkcie PHP, napríklad ako spätné volania alebo v rámci tabuliek funkcií . [194] Používateľom definované funkcie môžu byť vytvorené kedykoľvek bez toho, aby boli prototypované . [193] [194] Funkcie možno definovať vo vnútri blokov kódu, čo umožňuje rozhodovanie za chodu, či má byť funkcia definovaná alebo nie. Existuje function_existsfunkcia, ktorá určuje, či funkcia s daným názvom už bola definovaná. Volania funkcií musia používať zátvorky, s výnimkou konštruktora triedy s nulovým argumentomfunkcie volané pomocou operátora PHP new, v tomto prípade sú zátvorky voliteľné.

Až do PHP 5.3 v PHP neexistovala podpora pre anonymné funkcie a uzávery . Hoci create_function()existuje už od PHP 4.0.1, je to len tenký obal, eval()ktorý umožňuje vytvárať normálne funkcie PHP počas vykonávania programu. [195] PHP 5.3 pridalo syntax na definovanie anonymnej funkcie alebo " uzavretia " [196], ktorá dokáže zachytiť premenné z okolitého rozsahu. Syntax skrátenej šípky bola pridaná v PHP 7.4: [197]

function  getAdder ( $x )  { 
    return  fn ( $y )  =>  $x  +  $y ; 
}

$adder  =  getAdder ( 8 ); 
echo  $adder ( 2 );  // vytlačí "10"

Vo vyššie uvedenom príklade getAdder()funkcia vytvorí uzáver pomocou odovzdaného argumentu $x(kľúčové slovo useimportuje premennú z lexikálneho kontextu), ktorý prevezme ďalší argument $ya vráti vytvorený uzáver volajúcemu. Takáto funkcia je prvotriednym objektom, to znamená, že môže byť uložená v premennej, odovzdaná ako parameter iným funkciám atď. [198]

Neobvykle pre dynamicky typovaný jazyk PHP podporuje deklarácie typu na parametroch funkcií, ktoré sú vynútené za behu. Toto je podporované pre triedy a rozhrania od PHP 5.0, pre polia od PHP 5.1, pre "callables" od PHP 5.4 a skalárne (celé, float, string a boolean) typy od PHP 7.0. [66] PHP 7.0 má aj deklarácie typu pre návratové typy funkcií, vyjadrené umiestnením názvu typu za zoznam parametrov, pred ktorým je dvojbodka. [65] Napríklad getAdderfunkcia z predchádzajúceho príkladu by mohla byť anotovaná typmi, ako je napríklad v PHP 7:

function  getAdder ( int  $ x ) :  Uzavretie 
{ 
    return  fn ( int  $ y ) :  int  =>  $ x  +  $ y ; 
}

$adder  =  getAdder ( 8 ); 
echo  $adder ( 2 );  // vypíše "10" 
echo  $adder ( null );  // vyvolá výnimku, pretože bol 
zadaný nesprávny typ $adder  =  getAdder ([]);  // by tiež vyvolalo výnimku

V predvolenom nastavení sa deklarácie skalárneho typu riadia slabými princípmi typizácie. Ak je teda napríklad typ parametra int, PHP by umožnilo odovzdať tejto funkcii nielen celé čísla, ale aj konvertibilné číselné reťazce, plávajúce alebo booleovské hodnoty a previesť ich. [66] PHP 7 má však režim „striktného písania“, ktorý pri použití neumožňuje takéto konverzie pre volania funkcií a návraty v rámci súboru. [66]

PHP objekty

Základná funkcionalita objektovo orientovaného programovania bola pridaná v PHP 3 a vylepšená v PHP 4. [9] To umožnilo PHP získať ďalšiu abstrakciu, čo uľahčilo tvorivé úlohy programátorom používajúcim tento jazyk. Obsluha objektov bola úplne prepísaná pre PHP 5, čím sa rozšírila sada funkcií a zlepšil sa výkon. [199] V predchádzajúcich verziách PHP sa s objektmi zaobchádzalo ako s typmi hodnôt . [199] Nevýhodou tejto metódy bolo, že kód musel intenzívne využívať "referenčné" premenné PHP, ak chcel upraviť objekt, ktorý bol odovzdaný, namiesto toho, aby vytvoril jeho kópiu. V novom prístupe sa na objekty odkazuje handle , a nie hodnota.

PHP 5 zaviedlo súkromné ​​a chránené členské premenné a metódy spolu s abstraktnými triedami , finálnymi triedami , abstraktnými metódami a konečnými metódami . Zaviedol tiež štandardný spôsob deklarovania konštruktorov a deštruktorov podobný tomu v iných objektovo orientovaných jazykoch, ako je C++ , a štandardný model spracovania výnimiek . Okrem toho PHP 5 pridalo rozhrania a umožnilo implementáciu viacerých rozhraní. Existujú špeciálne rozhrania, ktoré umožňujú objektom interakciu s runtime systémom. Objekty implementujúce ArrayAccess možno použiť sSyntax poľa a objekty implementujúce Iterator alebo IteratorAggregate možno použiť s foreach konštruktom jazyka . V engine nie je žiadna funkcia virtuálnej tabuľky , takže statické premenné sú v čase kompilácie viazané názvom namiesto odkazu. [200]

Ak vývojár vytvorí kópiu objektu pomocou vyhradeného slova clone, Zend engine skontroluje, či __clone()bola definovaná metóda. Ak nie, zavolá predvolené nastavenie, __clone()ktoré skopíruje vlastnosti objektu. Ak je __clone()metóda definovaná, potom bude zodpovedná za nastavenie potrebných vlastností vo vytvorenom objekte. Pre pohodlie motor dodá funkciu, ktorá importuje vlastnosti zdrojového objektu, takže programátor môže začať s replikou zdrojového objektu podľa vedľajšej hodnoty a prepísať len vlastnosti, ktoré je potrebné zmeniť. [201]

Viditeľnosť vlastností a metód PHP je definovaná použitím kľúčových slov public , privatea protected. Predvolená hodnota je verejná, ak sa použije iba var ; varje synonymom pre public. Deklarované položky publicsú dostupné všade. protectedobmedzuje prístup k zdedeným triedam (a k triede, ktorá definuje položku). privateobmedzuje viditeľnosť iba na triedu, ktorá definuje položku. [202] Objekty rovnakého typu majú vzájomný prístup k súkromným a chráneným členom, aj keď nejde o rovnakú inštanciu.

Príklad

Nasleduje základný príklad objektovo orientovaného programovania v PHP 8:

<?php

abstraktná  trieda  Používateľ
{
    chránený  reťazec  $meno ;

    verejná  funkcia  __construct ( reťazec  $name )
    {
        // urobí prvé písmeno veľké a ostatné malé
        $this -> name  =  ucfirst ( strtolower ( $name ));
    }

    verejná  funkcia  pozdrav () :  reťazec
    {
        návrat  "Ahoj, volám sa "  .  $toto -> meno ;
    }

    abstraktné  úlohy verejnej  funkcie  () : string ; 
}

trieda  Študent  rozširuje  Užívateľ
{
    verejná  funkcia  __construct ( reťazec  $meno ,  súkromný  reťazec  $kurz )
    {
        rodič :: __construct ( $meno );
    }

     úloha verejnej funkcie  () : reťazec 
    {
        vrátiť  "učím sa"  .  $this -> kurz ;
    }
}

trieda  Učiteľ  rozširuje  Používateľ
{
    verejná  funkcia  __construct ( reťazec  $name ,  súkromné  pole  $teachingCourses )
    {
        rodič :: __construct ( $meno );
    }

     úloha verejnej funkcie  () : reťazec 
    {
        vrátiť  "učím"  .  implode ( ", " ,  $this -> výučbové kurzy );
    }
}

$students  =  [
    nový  študent ( "Alice" ,  "Informatika" ),
    nový  študent ( "BOB" ,  "Informatika" ),
    nový  študent ( "Charlie" ,  "Obchodné štúdiá" ),
];

$učitelia  =  [
    nový  učiteľ ( "Dan" ,  [ "Počítačová veda" ,  "Bezpečnosť informácií" ]),
    nový  učiteľ ( "Erin" ,  [ "Počítačová veda" ,  "Programovanie 3D grafiky" ]),
    nový  učiteľ ( "Frankie" ,  [ "Online marketing" ,  "Obchodné štúdiá" ,  "Elektronický obchod" ]),
];

foreach  ([ $students ,  $teachers ]  ako  $users )  {
    echo  $users [ 0 ] :: trieda  .  "s: \n " ;

    array_walk ( $users ,  funkcia  ( Používateľ  $user )  {
        echo  " { $user -> pozdrav () } , { $user -> job () } \n " ;
    });
}

// Výstup programu:
// Študenti:
// Dobrý deň, volám sa Alice a učím sa informatiku
// Dobrý deň, volám sa Bob, učím sa informatiku
// Dobrý deň, volám sa Charlie, učím sa obchodné štúdiá
// Učitelia:
// Dobrý deň, volám sa Dan, učím informatiku, informačnú bezpečnosť
// Dobrý deň, volám sa Erin, učím informatiku, programovanie 3D grafiky
// Dobrý deň, volám sa Frankie, učím online marketing, obchodné štúdiá, elektronický obchod

Implementácie

Jediná úplná implementácia PHP je originál, známy jednoducho ako PHP. Je najpoužívanejší a poháňa ho Zend Engine . Na odlíšenie od iných implementácií sa niekedy neoficiálne nazýva „Zend PHP“. Zend Engine kompiluje zdrojový kód PHP za chodu do interného formátu, ktorý dokáže spustiť, takže funguje ako tlmočník . [203] [204] Je to tiež „referenčná implementácia“ PHP, keďže PHP nemá žiadnu formálnu špecifikáciu, a tak sémantika Zend PHP definuje sémantiku PHP. Vzhľadom na komplexnú a nuansovanú sémantiku PHP definovanú tým, ako Zend funguje, je pre konkurenčné implementácie ťažké ponúknuť úplnú kompatibilitu.

Model PHP s jednou požiadavkou na skript a skutočnosť, že Zend Engine je interpret, vedie k neefektívnosti; v dôsledku toho boli vyvinuté rôzne produkty na zlepšenie výkonu PHP. Aby sa urýchlil čas vykonávania a nemusel sa kompilovať zdrojový kód PHP pri každom prístupe na webovú stránku, skripty PHP možno nasadiť aj v internom formáte motora PHP pomocou vyrovnávacej pamäte operačného kódu , ktorá funguje tak, že ukladá do vyrovnávacej pamäte kompilovanú formu súboru PHP skript (operačné kódy) v zdieľanej pamäti, aby sa predišlo réžii analýzy a kompilácie kódu pri každom spustení skriptu. Vyrovnávacia pamäť operačného kódu, Zend Opcache , je zabudovaná do PHP od verzie 5.5. [205]Ďalším príkladom široko používanej vyrovnávacej pamäte operačných kódov je alternatívna vyrovnávacia pamäť PHP (APC), ktorá je dostupná ako rozšírenie PECL . [206]

Zatiaľ čo Zend PHP je stále najobľúbenejšou implementáciou, bolo vyvinutých niekoľko ďalších implementácií. Niektoré z nich sú kompilátory alebo podporujú kompiláciu JIT , a preto ponúkajú výhody výkonu oproti Zend PHP na úkor chýbajúcej plnej kompatibility s PHP. Alternatívne implementácie zahŕňajú nasledujúce:

  • HHVM (HipHop Virtual Machine) – vyvinutý na Facebooku a dostupný ako open source, prevádza PHP kód na bajtový kód vysokej úrovne (bežne známy ako stredný jazyk ), ktorý je potom dynamicky preložený do x86-64 strojového kódu za behu programu. kompilátor just-in-time (JIT), výsledkom čoho je až 6× vylepšenie výkonu. [207] Od verzie 7.2 však Zend prekonal HHVM, [208] a HHVM 3.24 je poslednou verziou, ktorá oficiálne podporuje PHP. [209]
  • Parrot  – virtuálny stroj navrhnutý na efektívne spúšťanie dynamických jazykov; Pipp transformuje zdrojový kód PHP na prechodnú reprezentáciu Parrot , ktorá je potom preložená do bajtkódu Parrota a spustená virtuálnym strojom.
  • PeachPie – kompilátor druhej generácie pre . NET bytecode Common Intermediate Language (CIL), postavený na platforme Roslyn ; nástupca Phalangeru, ktorý zdieľa niekoľko architektonických komponentov
  • Phalanger  – kompiluje PHP do bajtového kódu Common Intermediate Language (CIL); predchodca PeachPie
  • Quercus  – kompiluje PHP do bajtkódu Java
  • HipHop  – vyvinutý na Facebooku a dostupný ako open source, transformuje PHP skripty do C++ kódu a následne skompiluje výsledný kód, čím zníži záťaž servera až o 50 %. Začiatkom roka 2013 ho Facebook zavrhol v prospech HHVM z viacerých dôvodov, vrátane ťažkostí s nasadením a nedostatočnej podpory pre celý jazyk PHP vrátane konštrukcií create_function()a eval(). [210]

Licencovanie

PHP je slobodný softvér vydaný pod licenciou PHP , ktorá stanovuje, že: [211]

Produkty odvodené od tohto softvéru sa bez predchádzajúceho písomného súhlasu [email protected] nesmú nazývať „PHP“, ani sa v ich názve nesmie objaviť „PHP“. Môžete naznačiť, že váš softvér funguje v spojení s PHP tak, že poviete „ Foo pre PHP“ namiesto toho, aby ste to nazývali „PHP Foo“ alebo „phpfoo“.

Toto obmedzenie používania „PHP“ spôsobuje, že licencia PHP nie je kompatibilná s licenciou General Public License (GPL), zatiaľ čo licencia Zend je nekompatibilná z dôvodu reklamnej klauzuly podobnej tej, ktorú má pôvodná licencia BSD . [212]

Vývoj a komunita

PHP vo svojej zdrojovej distribúcii zahŕňa rôzne bezplatné a open-source knižnice alebo ich používa vo výsledných binárnych zostavách PHP. PHP je v podstate internetový systém so vstavanými modulmi pre prístup k serverom File Transfer Protocol (FTP) a mnohým databázovým serverom, vrátane PostgreSQL , MySQL , Microsoft SQL Server a SQLite (čo je vstavaná databáza), LDAP serverom a ďalším. . V štandardných zostavách PHP je k dispozícii množstvo funkcií, ktoré poznajú programátori v jazyku C, ako napríklad funkcie z rodiny stdio . [213]

PHP umožňuje vývojárom písať rozšírenia v C na pridávanie funkcií do jazyka PHP. Rozšírenia PHP môžu byť kompilované staticky do PHP alebo načítané dynamicky za behu. Bolo napísaných množstvo rozšírení na pridanie podpory pre Windows API , správu procesov v operačných systémoch podobných Unixu , viacbajtové reťazce ( Unicode ), cURL a niekoľko populárnych kompresných formátov . Medzi ďalšie funkcie PHP sprístupnené prostredníctvom rozšírení patrí integrácia s IRC , dynamické generovanie obrázkov a obsahu Adobe Flash , dátové objekty PHP(PDO) ako abstraktná vrstva používaná na prístup k databázam, [214] [215] [216] [217] [218] [219] [220] a dokonca aj na syntézu reči . Niektoré zo základných funkcií jazyka, ako napríklad funkcie týkajúce sa reťazcov a polí, sú tiež implementované ako rozšírenia. [221] Projekt PHP Extension Community Library (PECL) je úložisko pre rozšírenia jazyka PHP. [222]

Niektoré ďalšie projekty, ako napríklad Zephir , poskytujú možnosť vytvárať rozšírenia PHP v jazyku vysokej úrovne a kompilovať ich do natívnych rozšírení PHP. Takýto prístup namiesto písania PHP rozšírení priamo v C zjednodušuje vývoj rozšírení a skracuje čas potrebný na programovanie a testovanie. [223]

V decembri 2018 sa skupina PHP skladala z desiatich ľudí: Thies C. Arntzen , Stig Bakken , Shane Caraveo , Andi Gutmans , Rasmus Lerdorf , Sam Ruby , Sascha Schumann , Zeev Suraski , Jim Winstead a Andrei Zmievski . [224]

Zend Technologies poskytuje certifikáciu PHP založenú na skúške PHP 7 [225] (a predtým založenú na PHP 5.5) pre programátorov, aby sa stali certifikovanými vývojármi PHP.

Inštalácia a konfigurácia

Príklad výstupu funkcie phpinfo() v PHP 7.1

Existujú dva hlavné spôsoby, ako pridať podporu pre PHP na webový server – ako natívny modul webového servera alebo ako spustiteľný súbor CGI. PHP má priame modulové rozhranie nazývané Server Application Programming Interface (SAPI), ktoré je podporované mnohými webovými servermi vrátane Apache HTTP Server , Microsoft IIS , iPlanet Web Server . Niektoré ďalšie webové servery, ako napríklad OmniHTTPd, podporujú rozhranie Internet Server Application Programming Interface (ISAPI), čo je rozhranie modulu webového servera od spoločnosti Microsoft . Ak PHP nemá podporu modulov pre webový server, dá sa vždy použiť ako Common Gateway Interface (CGI) alebo FastCGIprocesor; v takom prípade je webový server nakonfigurovaný tak, aby používal spustiteľný súbor CGI PHP na spracovanie všetkých požiadaviek na súbory PHP. [226]

PHP-FPM (FastCGI Process Manager) je alternatívna implementácia FastCGI pre PHP, ktorá je súčasťou oficiálnej distribúcie PHP od verzie 5.3.3. [227] V porovnaní so staršou implementáciou FastCGI obsahuje niektoré ďalšie funkcie, väčšinou užitočné pre vysoko zaťažené webové servery. [228]

Pri použití PHP na skriptovanie v príkazovom riadku je potrebný spustiteľný súbor rozhrania príkazového riadka (CLI) PHP . PHP podporuje CLI server application programming interface (SAPI) od PHP 4.3.0. [229] Hlavným zameraním tohto SAPI je vývoj aplikácií shell pomocou PHP. Existuje pomerne málo rozdielov medzi CLI SAPI a inými SAPI, hoci zdieľajú veľa rovnakých spôsobov správania. [230]

PHP má priame modulové rozhranie nazývané SAPI pre rôzne webové servery; [231] v prípade PHP 5 a Apache 2.0 na Windows sa poskytuje vo forme súboru DLL s názvom php5apache2.dll , [232] čo je modul, ktorý okrem iných funkcií poskytuje rozhranie medzi PHP a webovým serverom implementovaný vo forme, ktorej server rozumie. Tento formulár je známy ako SAPI.

Existujú rôzne druhy rozhraní SAPI pre rôzne rozšírenia webového servera. Napríklad okrem tých, ktoré sú uvedené vyššie, ďalšie SAPI pre jazyk PHP zahŕňajú Common Gateway Interface (CGI) a rozhranie príkazového riadka (CLI). [231] [233]

PHP možno použiť aj na písanie aplikácií grafického používateľského rozhrania (GUI) pre stolné počítače pomocou rozšírenia PHP-GTK . PHP-GTK nie je súčasťou oficiálnej distribúcie PHP, [226] a ako rozšírenie je možné ho použiť iba s verziou PHP 5.1.0 a novšou. Najbežnejším spôsobom inštalácie PHP-GTK je jeho kompilácia zo zdrojového kódu. [234]

Keď je PHP nainštalované a používané v cloudových prostrediach, poskytujú sa súpravy na vývoj softvéru (SDK) na používanie funkcií špecifických pre cloud. Napríklad:

Podporované sú početné možnosti konfigurácie, ktoré ovplyvňujú základné funkcie PHP aj rozšírenia. [237] [238] Konfiguračný súbor php.inisa hľadá na rôznych miestach v závislosti od spôsobu použitia PHP. [239] Konfiguračný súbor je rozdelený do rôznych sekcií, [240] pričom niektoré možnosti konfigurácie je možné nastaviť aj v rámci konfigurácie web servera. [241]

Použiť

Široký prehľad softvérového balíka LAMP, ktorý je tu zobrazený spolu s Squid

PHP je univerzálny skriptovací jazyk, ktorý je vhodný najmä pre vývoj webových aplikácií na strane servera , v takom prípade PHP vo všeobecnosti beží na webovom serveri . Akýkoľvek PHP kód v požadovanom súbore je spustený v PHP runtime, zvyčajne na vytvorenie dynamického obsahu webových stránok alebo dynamických obrázkov používaných na webových stránkach alebo inde. [242] Môže sa použiť aj na skriptovanie v príkazovom riadku a aplikácie grafického používateľského rozhrania (GUI) na strane klienta . PHP môže byť nasadené na väčšine webových serverov, mnohých operačných systémoch a platformách a môže byť použité s mnohými systémami správy relačných databáz (RDBMS). Väčšina poskytovateľov webhostingu podporuje PHP na použitie ich klientmi. Je k dispozícii bezplatne a skupina PHP poskytuje používateľom kompletný zdrojový kód na zostavenie, prispôsobenie a rozšírenie pre vlastné použitie. [13]

Dynamická webová stránka: príklad skriptovania na strane servera (PHP a MySQL)

Pôvodne navrhnutý pre vytváranie dynamických webových stránok , PHP sa teraz zameriava hlavne na skriptovanie na strane servera , [243] a je podobná ako u iných server-side skriptovací jazyky, ktoré poskytujú dynamický obsah z webového servera na klienta , ako je napríklad Microsoft , s ASP NET , Sun Microsystems ' JSP stránky , [244] a mod_perl. PHP tiež pritiahlo vývoj mnohých softvérových rámcov, ktoré poskytujú stavebné bloky a štruktúru dizajnu na podporu rýchleho vývoja aplikácií (RAD). Niektoré z nich zahŕňajú PRADO , CakePHP, Symfony , CodeIgniter , laravel , Yii Framework , Phalcon a Laminas , ponúkanie k dispozícii podobná ako u iných webových frameworkov .

LAMP architektúra sa stala populárnou v internetovom priemysle ako spôsob nasadenia webových aplikácií. [245] PHP sa bežne používa ako P v tomto balíku spolu s Linuxom , Apache a MySQL , aj keď P môže odkazovať aj na Python , Perl alebo nejaký mix týchto troch. Podobné balíčky, WAMP a MAMP , sú dostupné aj pre Windows a MacOS, pričom prvé písmeno predstavuje príslušný operačný systém. Hoci PHP aj Apache sú poskytované ako súčasť základnej inštalácie macOS, používatelia týchto balíkov hľadajú jednoduchší inštalačný mechanizmus, ktorý sa dá ľahšie aktualizovať.

Pre špecifické a pokročilejšie scenáre použitia ponúka PHP dobre definovaný a zdokumentovaný spôsob písania vlastných rozšírení v C alebo C++ . [246] [247] [248] [249] [250] [251] [252] Okrem rozšírenia samotného jazyka vo forme ďalších knižníc , rozšírenia poskytujú spôsob, ako zlepšiť rýchlosť vykonávania tam, kde je to kritické a existuje priestor pre vylepšenia pomocou skutočného kompilovaného jazyka . [253] [254] PHP tiež ponúka dobre definované spôsoby zabudovania do iných softvérových projektov. Takto možno PHP jednoducho použiť ako interný skriptovací jazykpre iný projekt, ktorý tiež poskytuje úzke prepojenie so špecifickými internými dátovými štruktúrami projektu . [255]

PHP získalo zmiešané recenzie kvôli chýbajúcej podpore pre multithreading na základnej jazykovej úrovni, [256] hoci používanie vlákien umožňuje rozšírenie PECL "pthreads" . [257] [258]

Rozhranie príkazového riadka, php-cli a dva skriptovacie nástroje ActiveX Windows Script Host pre PHP boli vytvorené.

Štatistiky popularity a používania

PHP sa používa pre systémy na správu webového obsahu vrátane MediaWiki , [259] WordPress , [260] Joomla , [261] Drupal , [262] Moodle , [263] eZ Publish , eZ Platform a SilverStripe . [264]

Webové stránky využívajúce PHP zahŕňajú Facebook , [265] Digg , [266] Dailymotion , [267] a Tumblr . [268]

K januáru 2013 sa PHP používalo na viac ako 240 miliónoch webových stránok (39 % z tých, ktoré boli vo vzorke) a bolo nainštalované na 2,1 miliónoch webových serverov . [269]

V marci 2021 sa PHP používal ako programovací jazyk na strane servera na 79,1 % webových stránok, čo je pokles z 83,5 % predtým, kde sa jazyk dal určiť, a PHP 7 je najpoužívanejšou verziou jazyka s 50,3 % všetkých webových stránok. webové stránky na webe používajú túto verziu. [270]

Zabezpečenie

V roku 2019 bolo 11 % všetkých zraniteľností uvedených v Národnej databáze zraniteľností spojených s PHP; [271] historicky asi 30% všetkých zraniteľností uvedených od roku 1996 v tejto databáze je spojených s PHP. Technické bezpečnostné chyby samotného jazyka alebo jeho základných knižníc nie sú časté (22 v roku 2009, približne 1 % z celkového počtu, hoci PHP sa vzťahuje na približne 20 % uvedených programov). [272] Uvedomujúc si, že programátori robia chyby, niektoré jazyky zahŕňajú kontrolu kazov, aby automaticky odhalili chýbajúcu validáciu vstupu, čo spôsobuje veľa problémov. Takáto funkcia sa vyvíja pre PHP, [273] ale jej zahrnutie do vydania bolo v minulosti niekoľkokrát zamietnuté.[274] [275]

Existujú pokročilé ochranné záplaty, ako sú Suhosin a Hardening -Patch, špeciálne navrhnuté pre prostredia webhostingu. [276]

Historicky, staré verzie PHP mali niektoré konfiguračné parametre a predvolené hodnoty pre také runtime nastavenia, vďaka ktorým boli niektoré PHP aplikácie náchylné na bezpečnostné problémy. Spomedzi týchto magic_quotes_gpca register_globals[277] konfiguračných direktív boli najznámejšie; ten spôsobil, že všetky parametre URL sa stali premennými PHP, čím sa otvorila cesta k vážnym bezpečnostným chybám tým, že útočník mohol nastaviť hodnotu akejkoľvek neinicializovanej globálnej premennej a zasahovať do vykonávania skriptu PHP. Podpora pre nastavenia „ magic quotes “ a „register globals“ bola od PHP 5.3.0 zastaraná a odstránená z PHP 5.4.0. [278]

Iný príklad potenciálnej zraniteľnosti nastavení runtime pochádza zo zlyhania pri zakázaní vykonávania PHP (napríklad použitím enginekonfiguračnej direktívy) [279] pre adresár, kde sú uložené nahrané súbory; jeho aktivácia môže viesť k spusteniu škodlivého kódu vloženého do nahrávaných súborov. [280] [281] [282] Najlepšou praxou je buď nájsť adresár s obrázkami mimo koreňového adresára dokumentu dostupného pre webový server a obslúžiť ho pomocou sprostredkujúceho skriptu, alebo zakázať spúšťanie PHP pre adresár, v ktorom sú uložené nahrané súbory.

Povolenie dynamického načítania rozšírení PHP (prostredníctvom enable_dlkonfiguračnej smernice) [283] v prostredí zdieľaného webhostingu môže viesť k bezpečnostným problémom. [284] [285]

Konverzie implicitných typov, ktoré vedú k tomu, že rôzne hodnoty sa považujú za rovnaké, niekedy proti zámeru programátora, môžu viesť k bezpečnostným problémom. Napríklad výsledok porovnania '0e1234' == '0'je true, pretože reťazce, ktoré možno analyzovať ako čísla, sa skonvertujú na čísla; v tomto prípade sa prvá porovnávaná hodnota považuje za vedecký zápis s hodnotou (0 × 10 1234 ), čo je nula. Chyby, ako je táto, viedli k chybám v autentifikácii vo fórach Simple Machines Forum , [286] Typo3 [287] a phpBB [288], keď sa porovnávali hash hesiel MD5 . Odporúčaný spôsob je použiť hash_equals() (pre bezpečnosť načasovania útoku ) alebo operátor identity ( ), výsledkom čoho je . [289]strcmp==='0e1234' === '0'false

V roku 2013 analýze viac ako 170.000 webových stránok defacements , vydané Zone-H , najčastejšie (53%) používa metóda bola zneužívanie zraniteľnosti začlenenie súboru , väčšinou v súvislosti s neistou použitie v PHP jazykových konštruktov include, requirea allow_url_fopen. [290] [291]

Od apríla 2021 W3Techs uvádza, že 64 % webových stránok používajúcich PHP používa verziu 7.2 alebo staršiu (ktoré už nie sú podporované vývojovým tímom PHP) a 35 % všetkých webových stránok PHP používa verziu 5.6 alebo staršiu. [292]

Verziu 5 stále používa 24,5 % všetkých webových stránok (september 2021). [293] Dôrazne sa odporúča migrovať na verziu PHP 7 alebo 8 a použiť random_int() namiesto rand() alebo mt_rand(). Existujú dva útoky, ktoré možno vykonať cez zdroje entropie PHP: "Seed Attack" a "State recovery attack". So súčasnými technológiami GPU môže útočník vykonať až 2^30 výpočtov MD5 za sekundu s GPU za 250 USD, zatiaľ čo s dodatočnými 500 USD môže dosiahnuť až 2^32 výpočtov. [294] V kombinácii s " narodeninovým útokom " to môže viesť k vážnym bezpečnostným chybám.

Pozri tiež

Referencie

  1. ^ a b Lerdorf, Rasmus (8. júna 1995). "Oznámiť: Nástroje osobnej domovskej stránky (nástroje PHP)" . Získané 7. júna 2011 .
  2. ^ a b Lerdorf, Rasmus (2007-04-26). „PHP o hormónoch – história prezentácie PHP od Rasmusa Lerdorfa na konferencii MySQL v Santa Clara v Kalifornii“ . Sieť konverzácií . Získané 2009-12-11 .
  3. ^ "Verzia 8.1.0" . 25. novembra 2021 . Získané 26. novembra 2021 .
  4. ^ "PHP 8.1.0 Beta 1 k dispozícii na testovanie" . 22. júla 2021 . Získané 29. júla 2021 .
  5. ^ "PHP: Argumenty funkcií - manuál" . secure.php.net .
  6. ^ Stogov, Dmitrij (2015-12-04). „Nie je tajomstvom, že niektoré nápady na optimalizáciu #PHP7 pochádzajú od HHVM, LuaJIT a V8“ . Twitter.
  7. ^ "PHP: Hypertextový predprocesor" . www.php.net . Získané 2020-02-12 .
  8. ^ a b "História PHP" . php.net .
  9. ^ a b c d e f g h i "História PHP a súvisiacich projektov" . Skupina PHP . Získané 25.02.2008 .
  10. ^ Príručka PHP: Predslov , www.php.net.
  11. ^ "Úvod: Čo dokáže PHP?" . PHP manuál . Získané 2009-03-05 .
  12. ^ helikoptéra: Port node-ar-drone, ktorý umožňuje užívateľovi ovládať Parrot AR Drone cez PHP: jolicode/php-ar-drone , JoliCode, 2019-01-11 , získané 2019-02-23
  13. ^ a b "Vloženie PHP do HTML" . O'Reilly. 2001-05-03 . Získané 25.02.2008 .
  14. ^ Jackson, Joab (2014-07-31). „PHP dostane konečne formálnu špecifikáciu“ . Počítačový svet . IDG .
  15. ^ "Štatistiky používania PHP pre webové stránky" . W3Techs - World Wide Web Technology Surveys . W3Techs. 26. apríla 2021 . Získané 26. apríla 2021 .
  16. ^ Lerdorf, Rasmus (20. 7. 2012). "Zaujímalo by ma, prečo ľudia stále píšu, že PHP bolo napísané v Perle. Nikdy nebolo. #php" . Twitter . Získané 2014-09-04 .
  17. ^ Lerdorf, Rasmus (2007-04-26). "PHP o hormónoch" (mp3) . Sieť konverzácií . Získané 22.06.2009 .
  18. ^ Lerdorf, Rasmus (1995-06-08). "Oznámiť: Nástroje osobnej domovskej stránky (nástroje PHP)" . Diskusná skupinacomp.infosystems.www.authoring.cgi . Získané 2006-09-17 .
  19. ^ Lerdorf, Rasmus (2007). "Snímka 3" . snímky pre diskusiu „PHP o hormónoch“ . Skupina PHP . Získané 22.06.2009 .
  20. ^ "Rasmus Lerdorf, Senior Technical Yahoo: PHP, Behind the Mic" . 2003-11-19. Archivované z originálu dňa 28.07.2013.
  21. ^ "Problémy s PHP" . Získané 20. decembra 2010 .
  22. ^ "php.internals: Re: Konzistencia názvu funkcie" . news.php.net . 2013-12-28 . Získané 2014-02-09 .
  23. ^ Rasmus Lerdorf (16. decembra 2013). "Re: Flexibilné pomenovanie funkcií" . Diskusná skupinaphp.internals . Získané 26. decembra 2013 .
  24. ^ "PHP – Hlasovanie o význame skratky" . PHP.net . Archivované z originálu 15. augusta 2000.
  25. ^ "Zend Engine verzia 2.0: Prehľad funkcií a dizajn" . Zend Technologies Ltd. Archivované z originálu dňa 2006-07-19 . Získané 2006-09-17 .
  26. ^ "archív noviniek php.net 2007" . Skupina PHP. 2007-07-13 . Získané 22.02.2008 .
  27. ^ Kerner, Sean Michael (2008-02-01). "PHP 4 je mŕtvy — nech žije PHP 5" . InternetNews. Archivované z originálu dňa 2018-08-06 . Získané 2018-12-16 .
  28. ^ Trachtenberg, Adam (2004-07-15). "Prečo PHP 5 Rocks!" . O'Reilly . Získané 22.02.2008 .
  29. ^ "Neskorá statická väzba v PHP" . Digitálny sendvič. 2006-02-23 . Získané 25.03.2008 .
  30. ^ "Statické kľúčové slovo" . Skupina PHP . Získané 25.03.2008 .
  31. ^ "GoPHP5" . Archivované z originálu dňa 2011-07-17.
  32. ^ GoPHP5. „Projekty PHP spájajú svoje sily, aby prešli na PHP 5“ (PDF) . Tlačová správa GoPHP5 . Archivované z originálu (PDF) dňa 2009-12-10 . Získané 23.02.2008 .
  33. ^ "GoPHP5" . GoPHP5. Archivované z originálu dňa 2011-04-27 . Získané 22.02.2008 .
  34. ^ "Inštalácia a konfigurácia PHP" . php.net . Získané 29. 10. 2013 .
  35. ^ "PHP pre Windows: Vydania binárnych súborov a zdrojov (5.3)" . php.net . Získané 29. 10. 2013 .
  36. ^ "PHP pre Windows: Vydania binárnych súborov a zdrojov (5.4)" . php.net . Získané 29. 10. 2013 .
  37. ^ "PHP pre Windows: Vydania binárnych súborov a zdrojov (5.5)" . php.net . Získané 29. 10. 2013 .
  38. ^ "PHP: Podporované verzie" .
  39. ^ "Typy: Reťazce (Manuál PHP)" . PHP.net . Získané 22.09.2013 .
  40. ^ "Podrobnosti o type reťazca (príručka PHP)" . PHP.net . Získané 22.09.2013 .
  41. ^ Andrej Zmievski (2005-08-10). "Dokument návrhu podpory PHP Unicode" (zoznam adresátov) . Získané 2014-02-09 .
  42. ^ "PHP 5.5 alebo 6.0" . Získané 2014-02-09 .
  43. ^ Andrej Zmievski (22. 4. 2011). „Dobrí, zlí a škaredí: Čo sa stalo s Unicode a PHP 6“ . Získané 2014-02-09 .
  44. ^ Rasmus Lerdorf (2010-03-11). "PHP 6" (zoznam adresátov) . Získané 2014-02-07 .
  45. ^ "Nekonečná bábková debata o PHP 6 v PHP 7" . Archivované z originálu dňa 2015-11-19 . Získané 2015-11-19 .
  46. ^ "RFC: Názov ďalšieho vydania PHP" . php.net . 7. 7. 2014 . Získané 2014-07-15 .
  47. ^ "Re: [PHP-DEV] [HLASOVANIE] [RFC] Názov ďalšieho vydania PHP (opäť)" . 2014-07-30 . Získané 2014-07-30 .
  48. ^ "phpng: Refaktorovaný PHP engine s veľkým zlepšením výkonu" . news.php.net .
  49. ^ "PHP: rfc:phpng" . php.net . Získané 16. decembra 2014 .
  50. ^ a b "PHP: phpng" . php.net . Získané 2014-07-15 .
  51. ^ "Zlúčiť vetvu 'ZendEngine3 ' " . github.com . 2014-12-05 . Získané 2014-12-05 .
  52. ^ a b c "PHP: Proces uvoľnenia" . 2011-06-20 . Získané 2013-10-06 .
  53. ^ a b "PHP RFC: Výnimky v motore (pre PHP 7)" . php.net . Získané 21.05.2015 .
  54. ^ a b "PHP RFC: Jednotná syntax premenných" . php.net . 2014-05-31 . Získané 2014-07-30 .
  55. ^ "Online PHP shell | 150+ verzií + štatistiky + vld + hhvm" .
  56. ^ „PHP RFC: Opravte správanie „foreach“ . php.net . Získané 21.05.2015 .
  57. ^ "PHP RFC: Správanie konštruktorov interných tried" . php.net . Získané 21.05.2015 .
  58. ^ "PHP RFC: Odstránenie mŕtvych alebo ešte neportovaných SAPI a rozšírení PHP7" . php.net . Získané 21.05.2015 .
  59. ^ "PHP RFC: Opravte nekonzistentnosť správania zoznamu()" . php.net . Získané 21.05.2015 .
  60. ^ "PHP RFC: Odstráňte alternatívne značky PHP" . php.net . Získané 21.05.2015 .
  61. ^ "PHP RFC: Z definovania viacerých predvolených prípadov v prepínači urobte chybu syntaxe" . php.net . Získané 21.05.2015 .
  62. ^ "PHP RFC: Odstráňte podporu hex v číselných reťazcoch" . php.net . Získané 21.05.2015 .
  63. ^ a b "PHP RFC: Integer Semantics" . php.net . Získané 21.05.2015 . To, že sa NaN a Infinity vždy stanú nulovými pri pretypovaní na celé číslo, znamená väčšiu konzistenciu medzi platformami a je tiež menej prekvapivé ako to, čo sa v súčasnosti vyrába.
  64. ^ "PHP RFC: Zlyhanie ZPP pri pretečení" . php.net . Získané 21.05.2015 .
  65. ^ a b c "RFC: Typy návratov" . php.net . 2015-01-27 . Získané 28.01.2015 .
  66. ^ a b c d e f "RFC: Deklarácie skalárneho typu" . php.net . 2015-03-16 . Získané 2015-03-17 .
  67. ^ a b c d e f g Brent. "Čo je nové v PHP 8" . Zošívačka . Získané 22. septembra 2020 .
  68. ^ "Vydané PHP 8" . PHP . Získané 27. novembra 2020 .
  69. ^ a b "PHP: rfc:jit" . wiki.php.net . Získané 2019-04-05 .
  70. ^ Brent. "PHP 8: Výkon JIT v reálnych webových aplikáciách" . Stitcher.io . Získané 4. októbra 2020 .
  71. ^ Rethams, Derick. "PHP 8: Rýchly pohľad na JIT" .
  72. ^ a b Popov, Nikita. " " Čo je nové v PHP 8.0?" Nikita Popov" . PHP niekoľko dní . Získané 4. októbra 2020 .
  73. ^ Daniele, Carlo (25. mája 2020). "Čo je nové v PHP 8 (funkcie, vylepšenia a kompilátor JIT)" . Kinsta . Získané 24. decembra 2020 .
  74. ^ Redmond, Paul. "Match Expression prichádza do PHP 8" . Laravel News . Získané 4. októbra 2020 .
  75. ^ "PHP 8.0: Zhoda výrazov" . PHP hodinky . Získané 4. októbra 2020 .
  76. ^ Barnes, Eric. "PHP 8 je teraz vydaný!" . Laravel News . Získané 24. decembra 2020 .
  77. ^ a b "PHP RFC: výraz vrhania" . wiki.php.net . Získané 14. augusta 2020 .
  78. ^ a b "PHP RFC: Operátor Nullsafe" . wiki.php.net . Získané 14. augusta 2020 .
  79. ^ a b "PHP: rfc:weakrefs" . wiki.php.net . Získané 2019-04-05 .
  80. ^ Obchodník, Amit (13. júna 2020). "Tieto nové reťazcové funkcie prichádzajú v PHP 8" . Amit Merchant . Získané 4. októbra 2020 .
  81. ^ Popov, Nikita. "Výzva na účasť: Anotovanie argumentov interných funkcií a návratových typov" . Vonkajšie . Získané 19. novembra 2020 .
  82. ^ a b c d e f g h i j k l "Nepodporované pobočky" . php.net . Získané 2019-07-31 .
  83. ^ "Vydané PHP 4.0.0" . Získané 25. októbra 2020 .
  84. ^ a b c d "PHP: PHP 4 ChangeLog" . Skupina PHP. 2008-01-03 . Získané 22.02.2008 .
  85. ^ "Oznámenie vydania PHP 4.1.0" . Získané 25. októbra 2020 .
  86. ^ "Oznámenie vydania PHP 4.2.0" . Získané 25. októbra 2020 .
  87. ^ "Oznámenie vydania PHP 4.3.0" . Získané 25. októbra 2020 .
  88. ^ "Používanie PHP z príkazového riadku" . PHP manuál . Skupina PHP . Získané 2009-09-11 .
  89. ^ "Oznámenie vydania PHP 4.4.0" . Získané 25. októbra 2020 .
  90. ^ "Oznámenie vydania PHP 4.4.0" . PHP manuál . Skupina PHP . Získané 24. 11. 2013 .
  91. ^ "Vydané PHP 5.0.0!" . Získané 25. októbra 2020 .
  92. ^ a b c "PHP: PHP 5 ChangeLog" . Skupina PHP. 2007-11-08 . Získané 22.02.2008 .
  93. ^ "Oznámenie vydania PHP 5.1.0" . Získané 25. októbra 2020 .
  94. ^ "Príručka PHP: CHOP" . Skupina PHP. 2011-11-15 . Získané 2011-11-15 .
  95. ^ "Oznámenie vydania PHP 5.2.0" . Získané 25. októbra 2020 .
  96. ^ "Oznámenie vydania PHP 5.3.0" . Získané 25. októbra 2020 .
  97. ^ "Oznámenie vydania PHP 5.4.0" . Získané 25. októbra 2020 .
  98. ^ "Vstavaný webový server" . Získané 26. marca 2012 .
  99. ^ "Oznámenie vydania PHP 5.5.0" . Získané 25. októbra 2020 .
  100. ^ a b c d "Podporované verzie" . php.net . Získané 2017-12-13 .
  101. ^ "Zmeny PHP 5.5.0" . php.net . Získané 2015-03-03 .
  102. ^ "Oznámenie vydania PHP 5.6.0" . Získané 25. októbra 2020 .
  103. ^ "Migrácia z PHP 5.5.x na PHP 5.6.x" . php.net . Získané 24. 3. 2014 .
  104. ^ "Resetovanie PHP 6" . Knihy o PHP 6 sú na pultoch prinajmenšom od roku 2008. V marci 2010 však vydanie PHP 6 nevyšlo – v skutočnosti ani zďaleka nevyšlo. Nedávne udalosti naznačujú, že PHP 6 nebude vydané skôr ako v roku 2011 – ak teda vôbec bude.
  105. ^ „PHP 7 ide plnou rýchlosťou vpred“ . 2014-10-31. Najnovšie verzie PHP boli súčasťou série vydaní 5.x, ale nebude tam žiadne PHP 6. „Preskočíme [verziu] 6, pretože pred rokmi sme mali plány na 6, ale tieto plány boli veľmi odlišné od toho, čo robíme teraz,“ povedal Gutmans. Prechod priamo na verziu 7 zabráni nejasnostiam.
  106. ^ „Archív noviniek – 2018: Vydané PHP 7.2.9“ . php.net . 2018-08-16 . Získané 2018-08-16 .
  107. ^ "PHP: rfc:size_t_and_int64_next" . php.net . Získané 16. decembra 2014 .
  108. ^ "PHP: rfc:strom_abstraktnej_syntaxe" . php.net . Získané 16. decembra 2014 .
  109. ^ "PHP: rfc:closure_apply" . php.net . Získané 16. decembra 2014 .
  110. ^ "PHP: rfc:integer_sémantika" . php.net . Získané 16. decembra 2014 .
  111. ^ "PHP: rfc:isset_ternary" . php.net . Získané 16. decembra 2014 .
  112. ^ "RFC: Unicode Codepoint Escape Syntax" . 2014-11-24 . Získané 2014-12-19 .
  113. ^ "Operátor kombinovaného porovnávania (vesmírnej lode)" . php.net . Získané 21.05.2015 .
  114. ^ "PHP RFC: Delegácia generátora" . php.net . Získané 21.05.2015 .
  115. ^ "PHP RFC: Anonymné triedy" . php.net . Získané 21.05.2015 .
  116. ^ "PHP RFC: CSPRNG s jednoduchým užívateľským prostredím" . php.net . Získané 21.05.2015 .
  117. ^ "PHP RFC: Vyhlásenia o skupinovom použití" . php.net . Získané 21.05.2015 .
  118. ^ "PHP: rfc:void_return_type" . php.net . 2015-11-09 . Získané 2015-11-14 .
  119. ^ "PHP: rfc:class_constant_visibility" . php.net . 2015-10-27 . Získané 2015-12-08 .
  120. ^ "PHP: rfc:object-typehint" . wiki.php.net .
  121. ^ "PHP: rfc:libsodium" . wiki.php.net .
  122. ^ "PHP: rfc:povoliť-abstraktnú-funkciu-prepísať" . 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: migrácia rfc:pcre2" . wiki.php.net .
  128. ^ "PHP: hrtime – manuál" . php.net .
  129. ^ "Vydané PHP 7.4.0!" . php.net . Získané 28. 11. 2019 .
  130. ^ "PHP: rfc:typed_properties_v2" . wiki.php.net . Získané 2019-04-04 .
  131. ^ "PHP: rfc:preload" . wiki.php.net . Získané 2019-04-04 .
  132. ^ "PHP: rfc:null_coalesce_equal_operator" . wiki.php.net . Získané 2019-04-04 .
  133. ^ "PHP: rfc:improve-openssl-random-pseudo-bytes" . wiki.php.net . Získané 2019-04-04 .
  134. ^ "PHP: rfc:ffi" . wiki.php.net . Získané 2019-04-05 .
  135. ^ "PHP: rfc:permanent_hash_ext" . wiki.php.net . Získané 2019-04-05 .
  136. ^ "PHP: rfc: register_hesla" . wiki.php.net . Získané 2019-04-05 .
  137. ^ "PHP: rfc:mb_str_split" . wiki.php.net . Získané 2019-04-05 .
  138. ^ "PHP: rfc:reference_reflection" . wiki.php.net . Získané 2019-04-05 .
  139. ^ "PHP: rfc:deprecate-and-remove-ext-wddx" . wiki.php.net . Získané 2019-04-05 .
  140. ^ "PHP: rfc:custom_object_serialization" . wiki.php.net . Získané 2019-04-05 .
  141. ^ "PHP: todo:php80" . wiki.php.net . Získané 2020-06-16 .
  142. ^ "PHP: rfc:negative_array_index" . wiki.php.net . Získané 2019-04-05 .
  143. ^ "PHP RFC: Validácia pre metódy abstraktných vlastností" . wiki.php.net . Získané 14. augusta 2020 .
  144. ^ "PHP RFC: Saner porovnania reťazcov s číslami" . wiki.php.net . Získané 14. augusta 2020 .
  145. ^ "PHP RFC: Saner numerické reťazce" . wiki.php.net . Získané 14. augusta 2020 .
  146. ^ "PHP RFC: Prísnejšie kontroly typu pre aritmetické/bitové operátory" . wiki.php.net . Získané 14. augusta 2020 .
  147. ^ "PHP RFC: Reklasifikácia varovaní motora" . wiki.php.net . Získané 14. augusta 2020 .
  148. ^ "PHP: rfc:consistent_type_errors" . wiki.php.net . Získané 2019-04-05 .
  149. ^ "PHP: rfc:lsp_errors" . wiki.php.net . Získané 26.05.2019 .
  150. ^ "PHP RFC: plávajúce na reťazec nezávislé od miestnych nastavení" . wiki.php.net . Získané 14. augusta 2020 .
  151. ^ "PHP RFC: Vylepšenia variabilnej syntaxe" . wiki.php.net . Získané 14. augusta 2020 .
  152. ^ "PHP RFC: Atribúty V2" . wiki.php.net . Získané 14. augusta 2020 .
  153. ^ "PHP RFC: Zmeny atribútov" . wiki.php.net . Získané 14. augusta 2020 .
  154. ^ "PHP RFC: Kratšia syntax atribútov" . wiki.php.net . Získané 20.06.2020 .
  155. ^ "PHP RFC: Zmena kratšej syntaxe atribútu" . wiki.php.net . Získané 14. augusta 2020 .
  156. ^ "PHP RFC: Pomenované argumenty" . wiki.php.net . Získané 14. augusta 2020 .
  157. ^ "PHP RFC: Zhoda výrazu v2" . wiki.php.net . Získané 14. augusta 2020 .
  158. ^ "PHP RFC: Propagácia majetku konštruktéra" . wiki.php.net . Získané 14. augusta 2020 .
  159. ^ "PHP RFC: Union Types 2.0" . wiki.php.net . Získané 14. augusta 2020 .
  160. ^ "PHP RFC: zmiešaný typ v2" . wiki.php.net . Získané 14. augusta 2020 .
  161. ^ "PHP RFC: Typ statického návratu" . wiki.php.net . Získané 14. augusta 2020 .
  162. ^ "PHP RFC: nezachytávajúce úlovky" . wiki.php.net . Získané 14. augusta 2020 .
  163. ^ Andre, Tyson. "PHP RFC: Vždy dostupné rozšírenie JSON" . PHP . Získané 25. októbra 2020 .
  164. ^ "PHP RFC: Explicitný osmičkový celočíselný doslovný zápis" . wiki.php.net . Získané 25. 11. 2020 .
  165. ^ "PHP RFC: Enumerácie" . wiki.php.net . Získané 25.03.2021 .
  166. ^ "PHP: rfc:readonly_properties_v2" . wiki.php.net . Získané 26. 11. 2021 .
  167. ^ "PHP: rfc:first_class_callable_syntax" . wiki.php.net . Získané 26. 11. 2021 .
  168. ^ "PHP: rfc:new_in_initializers" . wiki.php.net . Získané 26. 11. 2021 .
  169. ^ "PHP: rfc:pure-intersection-types" . wiki.php.net . Získané 26. 11. 2021 .
  170. ^ "PHP: rfc:noreturn_type" . wiki.php.net . Získané 26. 11. 2021 .
  171. ^ "PHP: rfc:final_class_const" . wiki.php.net . Získané 26. 11. 2021 .
  172. ^ "PHP: rfc:vlákna" . wiki.php.net . Získané 26. 11. 2021 .
  173. ^ "PHP: ElePHPant" . 4. októbra 2014 . Získané 4. októbra 2014 .
  174. ^ "Presmerovanie..." . wwphp-fb.github.io .
  175. ^ "Narodenie maskota PHP - Tvorca slona Vincent Pontier odhaľuje skutočný príbeh!" . 7php.com . 2014-01-06.
  176. ^ "PHP: ElePHPant" .
  177. ^ "Poľný sprievodca pre slony" .
  178. ^ "štítky – manuál" . php.net . Získané 2014-02-17 .
  179. ^ a b "PHP: rfc:shortags" . php.net . 2008-04-03 . Získané 2014-05-08 .
  180. ^ "PHP: Základná syntax" . Skupina PHP . Získané 22.02.2008 .
  181. ^ "Základný štandard kódovania" . PHP Framework Interoperability Group . Získané 2016-01-03 .
  182. ^ "echo – manuál" . php.net . Získané 2014-02-17 .
  183. ^ "Popis základných smerníc php.ini – manuál" . php.net . 2002-03-17 . Získané 2014-02-17 .
  184. ^ "Vaša prvá stránka s podporou PHP" . Skupina PHP . Získané 25.02.2008 .
  185. ^ Bray, Tim; a kol. (26. novembra 2008). "Pokyny na spracovanie" . Extensible Markup Language (XML) 1.0 (piate vydanie) . W3C . Získané 2009-06-18 .
  186. ^ "Premenné" . Skupina PHP . Získané 2008-03-16 .
  187. ^ "Oddelenie pokynov" . Skupina PHP . Získané 2008-03-16 .
  188. ^ "Komentáre" . Skupina PHP . Získané 2008-03-16 .
  189. ^ "Celé čísla v PHP, beh s nožnicami a prenosnosť" . Blog o výkone MySQL. 27. marca 2007 . Získané 28.03.2007 .
  190. ^ a b c d e "Typy" . Skupina PHP . Získané 2008-03-16 .
  191. ^ "Struny" . Skupina PHP . Získané 21.03.2008 .
  192. ^ "SPL – StandardPHPLibrary" . PHP.net . 16. marca 2009 . Získané 2009-03-16 .
  193. ^ a b "Funkcie definované používateľom (príručka PHP)" . php.net . 2014-07-04 . Získané 2014-07-07 .
  194. ^ a b "Premenné funkcie (príručka PHP)" . php.net . 2014-07-04 . Získané 2014-07-07 .
  195. ^ "create_function() (príručka PHP)" . php.net . 2014-07-04 . Získané 2014-07-07 .
  196. ^ "Anonymné funkcie (príručka PHP)" . php.net . 2014-07-04 . Získané 2014-07-07 .
  197. ^ "Funkcie šípok (príručka PHP)" . php.net . Získané 25.01.2021 .
  198. ^ Christian Seiler; Dmitrij Stogov (2008-07-01). "Žiadosť o pripomienky: Funkcie lambda a uzávery" . php.net . Získané 2014-07-07 .
  199. ^ a b "Referencie objektov PHP 5" . mjtsai.com . Získané 2008-03-16 .
  200. ^ "Triedy a objekty (PHP 5)" . Skupina PHP . Získané 2008-03-16 .
  201. ^ "Klonovanie objektov" . Skupina PHP . Získané 2008-03-16 .
  202. ^ "Viditeľnosť (príručka PHP)" . theserverpages.com . 2005-05-19 . Získané 26. 8. 2010 .
  203. ^ "Ako fungujú počítačové jazyky?" . Získané 2009-11-04 .
  204. ^ Gilmore, W. Jason (2006-01-23). Začiatok PHP a MySQL 5: Od nováčika po profesionála . Apress. p. 43 . ISBN 1590595521.
  205. ^ "[HLASOVAŤ] Integrácia Zend Optimizer+ do distribúcie PHP" . news.php.net . Získané 2013-03-08 .
  206. ^ "Alternatívna vyrovnávacia pamäť PHP" . PHP.net . Získané 21.09.2013 .
  207. ^ „Sme 98,5 % (a 16 %) « HipHop virtuálny stroj “ . hhvm.com . decembra 2013 . Získané 23.02.2014 .
  208. ^ "Konečné benchmarky PHP 5.6, 7.0, 7.1, 7.2 a 7.3 (2019)" . 2019-01-14 . Získané 2019-04-19 .
  209. ^ Krill, Paul (20.09.2017). "Zabudnite na PHP! HHVM engine Facebooku sa namiesto toho prepne na Hack" . InfoWorld . Získané 2019-02-06 .
  210. ^ „Oznámenie o odstránení podpory HPHPc GitHub“ . Získané 24.05.2013 .
  211. ^ "Licencia PHP, verzia 3.01" . Získané 20.05.2010 .
  212. ^ "GPL-nekompatibilné, licencie na slobodný softvér" . Rôzne licencie a komentáre k nim . Nadácia slobodného softvéru . Získané 2011-01-03 .
  213. ^ "PHP: Zoznam funkcií a metód – príručka" . Skupina PHP . Získané 2015-01-14 .
  214. ^ „Úvod – príručka“ . php.net . 2013-06-07 . Získané 2013-06-13 .
  215. ^ Darryl Patterson (5. august 2004). "Zjednodušte obchodnú logiku pomocou PHP DataObjects — O'Reilly Media" . ibm.com . Získané 16. decembra 2014 .
  216. ^ "IBM – Spojené štáty americké" . Získané 16. decembra 2014 .
  217. ^ "Päť bežných problémov s databázou PHP" . ibm.com . 2006-08-01 . Získané 2013-06-13 .
  218. ^ "Červené knihy IBM — Vývoj aplikácií PHP pre dátové servery IBM" . redbooks.ibm.com . Získané 16. decembra 2014 .
  219. ^ „Časopis php[architect] – Žurnál pre programátorov PHP“ . www.phparch.com .
  220. ^ Krill, Paul (19. októbra 2005). „PHP sa udomácňuje v podnikoch, súperí s Java“ . InfoWorld . Archivované z originálu 13. júla 2014.
  221. ^ "Krížový odkaz: /PHP_5_4/ext/standard/" . php.net . Archivované z originálu 16. marca 2012 . Získané 16. decembra 2014 .
  222. ^ „Vývoj vlastných rozšírení PHP“ . devnewz.com . 2002-09-09. Archivované z originálu dňa 2008-02-18 . Získané 25.02.2008 .
  223. ^ "Prečo Zephir?" . zephir-lang.com . 2015-10-20 . Získané 2015-12-14 .
  224. ^ "PHP kredity" . Získané 2018-12-16 .
  225. ^ „Naučte sa PHP prostredníctvom školenia PHP a certifikácie PHP“ . www.zend.com . Získané 16. 11. 2020 .
  226. ^ a b "Všeobecné úvahy o inštalácii" . php.net . Získané 22.09.2013 .
  227. ^ "Archív noviniek: Vydané PHP 5.3.3!" . php.net . 2010-07-22.
  228. ^ "FastCGI Process Manager (FPM)" . php.net . Získané 22.09.2013 .
  229. ^ "Použitie príkazového riadku: Úvod" . php.net . Získané 22.09.2013 .
  230. ^ "Použitie príkazového riadku: Rozdiely od iných SAPI" . php.net . Získané 22.09.2013 .
  231. ^ a b "Všeobecné úvahy o inštalácii" . php.net . Získané 22.09.2013 .
  232. ^ "PHP: Apache 2.x v systéme Microsoft Windows" . php.net . Archivované z originálu dňa 2013-09-26 . Získané 22.09.2013 .
  233. ^ "Použitie príkazového riadku: Úvod" . php.net . Získané 22.09.2013 .
  234. ^ "Inštalácia PHP-GTK 2" . php.net . Získané 22.09.2013 .
  235. ^ "AWS SDK pre PHP" . aws.amazon.com . Získané 2014-03-06 .
  236. ^ "Windows Azure SDK pre PHP — Interoperability Bridges and Labs Center" . interoperabilitybridges.com . Archivované z originálu dňa 2014-03-20 . Získané 2014-03-06 .
  237. ^ "Konfigurácia runtime: Obsah" . php.net . Získané 22.09.2013 .
  238. ^ "Direktívy php.ini: Zoznam direktív php.ini" . php.net . Získané 22.09.2013 .
  239. ^ "Konfigurácia runtime: Konfiguračný súbor" . PHP.net . Získané 22.09.2013 .
  240. ^ "Smernice php.ini: Zoznam sekcií php.ini" . PHP.net . Získané 22.09.2013 .
  241. ^ "Konfigurácia runtime: Kde je možné nastaviť konfiguračné nastavenie" . PHP.net . Získané 22.09.2013 .
  242. ^ "Manuálne spracovanie obrazu PHP a GD;" . php.net . Získané 2011-04-09 .
  243. ^ "Skriptovací jazyk PHP na strane servera" . Indiana University . 2007-04-04. Archivované z originálu dňa 2016-01-21 . Získané 25.02.2008 .
  244. ^ „Technológia JavaServer Pages — Porovnanie metód JavaServer Pages pre dokument White Paper o dynamickom obsahu na strane servera“ . Sun Microsystems . Získané 25.02.2008 .
  245. ^ „Päť jednoduchých spôsobov, ako vyladiť aplikáciu LAMP“ . 2011-01-25.
  246. ^ „PHP v jadre: Štruktúra rozšírenia“ . PHP.net . Získané 22.09.2013 .
  247. ^ „PHP v jadre: Rozšírenie „counter“ – pokračujúci príklad“ . PHP.net . Získané 22.09.2013 .
  248. ^ "Písanie rozšírení I. časť: Úvod do PHP a Zend" . Zend Technologies . 2005-03-01. Archivované z