PHP

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 2 octombrie 2022; verificările necesită 7 modificări .
PHP
Clasa de limba multi- paradigma , orientat pe obiecte , imperativ
Aparut in 8 iunie 1995 [5] [6]
Autor Rasmus Lerdorf [3]
Dezvoltator Rasmus Lerdorf [1] , Andy Gutmans [1] , PHP Group [d] , Zend Technologies [2] și Zeev Sourasky
Extensie de fișier .php[7]
Eliberare
A fost influențat C++ , Perl [8] , C [8] , Java [8] , Tcl [9] , HTML și JavaScript
Licență Licență PHP [10]
Site-ul web php.net
OS Sistem de operare asemănător Unix și Microsoft Windows
 Fișiere media la Wikimedia Commons

PHP ( /pi:.eɪtʃ.pi:/ engleză  PHP: Hypertext Preprocessor  - "PHP: hypertext preprocessor "; inițial PHP / FI (Personal Home Page / Form Interpreter), iar mai târziu numit Personal Home Page Tools [11]  - " Instrumente pentru crearea de pagini web personale") este un limbaj de scripting de uz general asemănător C [12] care este utilizat intens pentru dezvoltarea aplicațiilor web. În prezent, este susținut de marea majoritate a furnizorilor de găzduire și este una dintre limbile principale folosite pentru a crea site-uri web dinamice [13] .

Limbajul și interpretul său ( Zend Engine ) sunt dezvoltate de un grup de entuziaști ca parte a unui proiect open source [14] . Proiectul este distribuit sub propria licență , care este incompatibilă cu GNU GPL .

Domeniul de aplicare

În domeniul programării web, în ​​special pe partea serverului, PHP este unul dintre limbajele de scripting populare (împreună cu JSP , Perl și limbajele utilizate în ASP.NET ).

Popularitatea în domeniul construirii de site-uri web este determinată de prezența unui set mare de instrumente încorporate și module suplimentare pentru dezvoltarea aplicațiilor web [15] . Principalele sunt:

Folosit de sute de mii de dezvoltatori începând cu anii 2010; Conform clasamentului TIOBE bazat pe datele motoarelor de căutare, în mai 2016 PHP se afla pe locul 6 în rândul limbajelor de programare [13] .

Inclus în LAMP  - un set comun de software pentru crearea și găzduirea site- urilor web ( Linux , Apache , MySQL , PHP), precum și LEMP - un set la fel de comun de software ( Linux , Nginx , MySql , PHP).

Site-urile care folosesc PHP includ Facebook , Wikipedia , Yahoo! , Baidu .

Caracteristici suplimentare

Limba acceptă automat cookie-uri HTTP în conformitate cu standardele Netscape. Acest lucru vă permite să setați și să citiți segmente mici de date din partea clientului. Lucrul cu Cookie-uri este organizat prin sesiuni (sesiuni). Sesiunile au data de expirare (dupa expirare, datele sunt sterse), in sesiuni se pot stoca si edita diferite tipuri de date, inclusiv cele serializate - trecute prin serialize (procesul se intampla automat), obiecte PHP.

Crearea aplicațiilor GUI

PHP nu se concentrează pe crearea de aplicații desktop, dar este nevoie de crearea de interfețe pentru configurarea serverelor, execuție continuă, depanare script-uri (scripturi), gestionarea serverelor locale și de testare etc. Din această cauză au apărut soluții la această problemă.

Extensii

Utilizarea principală a extensiilor este de a adăuga biblioteci de interfață utilizator (biblioteci UI).

Extensiile sunt împărțite în mod convențional în trei grupuri:

  • Extensii PHP: WxPHP ( Windows , Linux , macOS ), Winbinder ( Windows );
  • wrapper-uri care folosesc funcții de sistem folosind instrumente FFI: Win32Std, Tk;
  • wrapper-uri pentru utilizarea interfeței liniei de comandă: PHP-UI, PHP-XCB.

Extensiile, cum ar fi un wrapper bidirecțional, au fost dezvoltate pentru utilizarea altor limbi atunci când scrieți extensii PHP și invers. De exemplu, PSV Component Library este un proiect format din trei subproiecte:

  • PHP4Delphi implementează conexiuni PHP la programele scrise în Delphi folosind WinAPI ; dezvoltat din 1999, dar neactualizat din 2009, datorită căruia au apărut filiale;
  • Cadru de dezvoltare a extensiilor PHP - un instrument pentru crearea extensiilor PHP, componentele VCL sunt o parte integrantă a PHP4Delphi, ale căror componente de bază sunt necesare pentru a crea aplicații;
  • php4Applications este o extensie pentru utilizarea PHP în alte limbi, bazată pe PHP4Delphi, care oferă acces la macrocomenzi și simplifică utilizarea PHP prin eliminarea necesității de a crea un wrapper.
Medii de dezvoltare (IDE)

Există, de asemenea, un loc pentru medii de dezvoltare cu drepturi depline pentru GUI PHP:

  • DevPHP

Un pionier în această categorie este studioul DevPHP-IDE, care a folosit Kylix ( Delphi ) ca coloană vertebrală a interfeței și php- cli pentru a construi programe personalizate.

Include un editor de cod, mai multe instrumente și un vizualizator HTML vizual.

A fost introdus pentru prima dată în 2002, acum are 3 versiuni stabile, dar dezvoltarea nu continuă - s-a oprit din cauza morții dezvoltatorului principal într-un accident de mașină.

  • CodeGear Rad Studio (extensie)

După DevPHP IDE a apărut o extensie - un set de componente pentru CodeGear Rad Studio 2009 bazat pe php4delphi cu unele îmbunătățiri (element web, inspector, debugger), suportul acesteia a durat patru versiuni, a doua dintre care a fost inclusă în extensia plătită Rad Studio 2010 : a existat o oportunitate de a utiliza scripturi, componente web de stil, de a vizualiza stiluri și pagini web înainte de a construi programul, a rula un server local, a crea programul ca o aplicație autonomă și a depana codul. Odată cu lansarea Delphi XE, extensia a fost numită RADPHP Xe. Mai mult, studioul în sine a devenit cunoscut sub numele de Embarcadero Delphi, iar lucrările la această extensie au fost suspendate pe termen nelimitat.

  • DevelStudio (RAD)

În 2009, pe baza php4delphi, a început dezvoltarea unui mediu pentru crearea de aplicații grafice PHP, căruia i s-a alăturat ulterior Rostislav Romanov. Mediul se numea PHP DevelStudio, prima versiune publicată a fost 0.1.7. DevelStudio avea un număr mic de componente în caseta de instrumente și rula pe PHP 4 învechit. În a doua versiune, DevelStudio a primit suport pentru PHP 5. Au fost adăugate fluxuri și au fost făcute multe modificări și îmbunătățiri. Codul de asamblare al programelor a devenit închis, versiunile anterioare ale programului și mesajele de pe forum au fost eliminate pentru a preveni intrușii.

A doua versiune a DevelStudio a primit, de asemenea, un set de componente AlphaControls, drept urmare a fost folosită pentru a crea malware datorită simplității și clarității sale. Antivirusurile populare la acea vreme (MacAffee, AVG , Avira ) au început să recunoască orice programe compilate în DevelStudio ca viruși.

După ceva timp, autorul AlphaControls a depus o plângere la dezvoltatorii DevelStudio, iar setul de componente a fost complet eliminat din mediu, cu toate acestea, a fost păstrat într-o versiune deja existentă, care de data aceasta nu a putut fi eliminată de pe forum. .

La momentul anului 2012, a fost lansată cea mai recentă versiune a mediului - 3.0.2, unde a apărut un nou set de componente, inclusiv browserul Chromium în loc de IE , care a atras atenția dezvoltatorilor web și utilizatorilor mediului Algorithm. La acea vreme, compilarea programelor în algoritm era plătită, așa că DevelStudio, ca mediu de dezvoltare nou și gratuit, a atras cea mai mare parte a audienței spre sine.

În 2014, au început primele încercări de refacere a mediului, de data aceasta din partea comunității . La sfârșitul anului 2018, codul sursă a fost restaurat și este disponibil pe GitHub .

În 2019, comunitatea l-a abordat pe creatorul DevelStudio pentru a schimba politica de distribuție a mediului, făcându-l disponibil pentru actualizare și editare. Din cauza reclamațiilor legate de lipsa de link-uri către bibliotecile utilizate (DCEF, PHP4Delphi, TSizeCtrl, SynEdit), forumul a fost eliminat, iar una dintre paginile care descriu mediul a fost redirecționată către pagina principală a site-ului. De acum înainte, DevelStudio este deținut oficial de comunitate.

  • DevelNext (DN)

În paralel cu aceasta, dezvoltatorul principal DevelStudio a început să creeze o „reîncarnare” a mediului anterior. El a luat ca bază biblioteca grafică JavaFX , rezultând un mediu complet nou, cu suport CSS , dar fără suport complet pentru biblioteca Zend PHP  - proiectul a fost bazat pe propriul limbaj jPHP. Caracteristicile sale sunt, lucru pe JVM , compilator JIT , suport Unicode , multithreading și o bibliotecă standard orientată pe obiecte.

În cea de-a 16-a versiune, mediul DevelNext a primit suport pentru php 7 și, în paralel cu acesta, jPHP a fost extins de un pasionat de dezvoltare sub sistemul de operare Android .

În acest moment, autorul și entuziaștii lucrează la versiunea 2020 (anterior a 17-a).

  • PHPQt

În 2015, Alexander Kazantsev a început să studieze algoritmii de dezvoltare a interfeței și a creat extensia php_qml, care a făcut posibilă utilizarea widget-urilor din biblioteca QT, dar a funcționat doar sub Windows.

Cu aceasta, a început dezvoltarea PHPQt, primele versiuni nu au acordat prea multă atenție din partea dezvoltatorilor web, așa că autorul a început să îmbunătățească extensia în profunzime.

Pe 28 iulie 2015 a fost publicată prima versiune a compilatorului de proiect, la acea vreme era un simplu executor de script (script) care atașa cod php la stub (cum ar fi DevelStudio), și avea o dependență de API-ul Windows, la în această etapă aproape toate widget-urile au fost suportate și multithreading, a existat o optimizare ușoară a codului php. Din acel moment, motorul a fost numit PQEngine,

Pe 3 august 2016, a fost lansată cea de-a cincea versiune a compilatorului de aplicații (PqBuilder), care a trecut la baza PlastiQ și avea suport pentru cel mai recent, la acel moment, php 7, proiectele au primit un compilator mai complet și nu mai necesitau prezența PqEngine.dll lângă fișierul executabil, în schimb. Aceste biblioteci vizuale au început să fie adăugate dinamic - ca fișiere și nu cusute în PQEngine.dll. Acest pas a fost făcut pentru compatibilitate cu alte sisteme și bibliotecile Qt originale.

Odată cu apariția celei de-a șasea versiuni, proiectul a devenit o adăugare la mediul Qt Studio, iar compilatorul a devenit doar un optimizator de cod înainte de asamblarea finală a programului. A apărut un editor de interfață cu drepturi depline, indicii în editorul de cod și a început să fie creată documentația. Din acel moment, au făcut un anunț despre crearea mediului PqStudio, dar dezvoltarea acestuia nu a mers departe.

  • WinForms PHP

În 2018 a apărut un proiect care combină capabilitățile Windows Forms (.NET Framework) și PHP 7. Dezvoltarea lui este încă în curs de desfășurare într-un ritm lent.[ când? ] . În acest moment, aproape totul este disponibil în motor[ ce? ] funcții pentru POO. Mediul este în curs de dezvoltare privată. Executabilul implicit vine cu php7ts.dll.

Conectarea PHP la un proiect

Există și extensii pentru utilizarea inversă - conectarea PHP la un proiect într-un alt limbaj de programare: Phalanger (C#, php de la 5.4 la 7), Peachpie] (C#, php 7), PHP4Delphi (Lazarus, Delphi, C#, C, C++). , php 5.6, JPHP (Java, php 7.0), PHPly (Python, php 5.6)

Istorie

În 1994, programatorul danez Rasmus Lerdorf a dezvoltat în C [16] un set de script-uri CGI care să țină cont de vizitatorii CV -ului său online , care procesează șabloane de documente HTML . Lerdorf a numit setul Personal Home Page Tools (Instrumente pentru o pagină de pornire personală ). În curând funcționalitatea nu a mai fost suficientă, iar Lerdorf a dezvoltat un nou interpret de șablon PHP/FI ( English Personal Home Page / Forms Interpreter  - „personal home page / form interpreter”) [17] .  

Pe 8 iunie 1995, a fost lansată versiunea 1.0 a Personal Home Page (PHP Tools) - prima lansare publică.

În 1997, după o lungă testare beta , a fost lansată a doua versiune a handler-ului scrisă în C  - PHP/FI 2.0. A fost folosit de aproximativ 1% (aproximativ 50 de mii) din toate domeniile de internet din lume [11] .

PHP 3.0 a suferit o revizuire semnificativă care definește aspectul și stilul modern al limbajului de programare. În 1997, doi programatori israelieni, Andy Gutmans și Zeev Suraski , au rescris complet codul interpretului. PHP 3.0 a fost lansat oficial în iunie 1998 [11] .

Unul dintre punctele forte ale PHP 3.0 a fost capacitatea de a extinde nucleul cu module suplimentare. Ulterior, interfața de scriere a extensiilor a atras mulți dezvoltatori terți către PHP care lucrează la modulele lor, ceea ce a făcut posibil ca PHP să lucreze cu un număr mare de baze de date , protocoale și să accepte un număr mare de API -uri . Un număr mare de dezvoltatori a dus la dezvoltarea rapidă a limbajului și la creșterea rapidă a popularității sale. Începând cu această versiune , acronimul php înseamnă „PHP: hypertext Preprocessor”, în loc de „Personal Home Page” depreciată.

Până în iarna lui 1998, aproape imediat după lansarea oficială a PHP 3.0, Andy Gutmans și Zeev Suraski au început să reproceseze nucleul PHP. Obiectivele au inclus creșterea performanței aplicațiilor complexe și îmbunătățirea modularității bazei de cod PHP. Noul motor, numit Zend Engine , a făcut față cu succes sarcinilor și a fost introdus pentru prima dată la mijlocul anului 1999 . PHP 4.0 , bazat pe acest motor și care aduce cu el un set de caracteristici suplimentare, a fost lansat oficial în mai 2000 . În plus față de îmbunătățirile de performanță, PHP 4.0 a avut câteva alte inovații cheie, cum ar fi suport pentru sesiune, tamponarea ieșirilor , modalități mai sigure de a gestiona intrarea utilizatorului și câteva constructe noi de limbaj.

A cincea versiune de PHP a fost lansată de dezvoltatori pe 13 iulie 2004 . Modificările includ o actualizare a nucleului Zend ( Zend Engine 2 ), care a crescut semnificativ eficiența interpretului . Introducerea suportului pentru limbajul de marcare XML . Funcțiile OOP au fost complet reproiectate și sunt foarte asemănătoare cu modelul folosit în Java . În special, a fost introdus un destructor , membri și metode publice, private și protejate , membri finali și metode, interfețe și clonarea obiectelor. Versiunile ulterioare au introdus , de asemenea, spații de nume , închideri și o serie de modificări destul de serioase, comparabile cantitativ și calitativ cu cele care au apărut în timpul tranziției la PHP 5.0.

Cea de-a șasea versiune a PHP este în dezvoltare din octombrie 2006 [18] . Au fost făcute multe inovații [19] [20] , cum ar fi eliminarea expresiilor regulate POSIX și a superglobalelor „lungi” din nucleu și eliminarea directivelor safe_mode , magic_quotes_gpc și register_globals din fișierul de configurare php.ini. Una dintre principalele inovații trebuia să fie suportul pentru Unicode [21] . Cu toate acestea, în martie 2010 , dezvoltarea PHP6 a fost considerată nepromițătoare [22] din cauza dificultăților cu suportul Unicode. Codul sursă PHP6 a fost mutat în , iar versiunea 5.4 a devenit linia principală de dezvoltare.

PHP 7

În 2014 a avut loc un vot, în urma căruia următoarea versiune s-a numit PHP 7 [23] . Lansarea noii versiuni a fost planificată la mijlocul lunii octombrie 2015 [24] . În martie 2015, Zend a lansat un infografic care prezintă principalele inovații în PHP 7 [25] .

Pe 3 decembrie 2015 a fost anunțată versiunea PHP 7.0.0 [26] .

Noua versiune se bazează pe o ramură experimentală a PHP, care a fost inițial numită phpng ( PHP Next Generation „next generation”) și a fost dezvoltată cu accent pe creșterea performanței și reducerea consumului de memorie [27] . Noua versiune adaugă posibilitatea de a specifica tipul de date returnate de la funcție [28] , a adăugat control de tip pentru date [29] , precum și noi operatori.  

Pe 13 iunie 2019, a fost lansat PHP 7.4. Proprietățile tipizate și funcțiile de săgeată au fost adăugate la nucleu, precum și covarianța de tip returnare mărginită și contravarianța tipului de argument [30] .

PHP 8

Versiunea PHP 8.0 a fost lansată pe 26 noiembrie 2020 [31] . Principalele inovații au fost [32] : suport pentru tipuri de uniuni [33] , compilarea JIT [34] și atribute (cunoscute și sub denumirea de adnotări), de asemenea, comutatorul „construcție” a fost înlocuit cu o „expresie” de potrivire și a fost un nou operator Nullsafe adăugat.

Pe 9 iulie 2020, Dale Hirt , Manager de proiect PHP  la Microsoft, a lansat un mesaj [35] într-o listă de corespondență în care afirmă că, după lansarea PHP 8.0, Microsoft nu va mai sprijini dezvoltarea acestui limbaj de programare pentru Windows [36] . Specialiștii Microsoft compilau versiuni binare ale interpretului pentru Windows și le testau securitatea. Comunitatea de dezvoltatori PHP a raportat că vor lua toate măsurile necesare pentru a găsi o opțiune alternativă de organizare a suportului pentru PHP 8.0 și o versiune ulterioară pentru Windows în viitorul apropiat, de exemplu, pe cont propriu [37] . php.internals

Sintaxă

Sintaxa PHP este similară cu cea a limbajului C. Unele elemente, cum ar fi tablourile asociative și bucla foreach, sunt împrumutate din Perl .

Analiza lexicală a PHP se face prin utilitarul re2c [38] [39] , care generează lexeri rapid și ușor de încorporat.

Pentru a scrie un script simplu, nu este nevoie să descrii nicio variabilă, module utilizate etc. Orice script poate începe direct cu <?php.

Cel mai simplu program Hello world din PHP arată astfel:

<?php echo „Bună, lume!” ; ?>

De asemenea, este posibilă o versiune mai scurtă a șirului de ieșire:

<?= 'Bună, lume!' ?>

Eticheta de vizualizare de deschidere este <?=folosită pentru a scurta constructele folosite pentru a afișa o linie.

PHP execută cod care se află în interiorul delimitatorilor, cum ar fi <?php ?>. Orice lucru în afara limitelor este scos neschimbat. Acesta este folosit în principal pentru a insera cod PHP într-un document HTML, astfel:

< html > < cap > < titlu > Testarea PHP </ title > </ head > < body > <?php echo 'Hello world!'; ?> </ body > </ html >

Pe lângă delimitatori <?php ?>, este permisă (dar recunoscută ca învechită și practic nefolosită) utilizarea unei versiuni abreviate <? ?>. În plus, înainte de versiunea 7.0, ASP <% %> și <script language="php"> </script>. Funcționarea comenzilor rapide este definită în fișierul de configurare php .ini .

Numele variabilelor încep cu simbolul $, tipul variabilei nu trebuie declarat. Numele de variabile și constante sunt sensibile la majuscule și minuscule. Numele claselor, metodelor clasei și funcțiilor nu fac distincție între majuscule și minuscule. Variabilele sunt procesate în șiruri duble ghilimele și șiruri heredoc ( șiruri create cu operatorul <<<). Variabilele din șiruri cuprinse între ghilimele simple și nowdoc nu sunt analizate.

Instrucțiunile sunt separate prin punct și virgulă ( ;), cu excepția unor cazuri după declararea constructelor și buclelor if/else.

Variabilele pot fi transmise unei funcții atât prin valoare, cât și prin referință (se folosește semnul &).

PHP acceptă trei tipuri de comentarii: stil C (delimitat /* */), C++ (începând cu //și continuând până la sfârșitul liniei) și shell UNIX (cu #până la sfârșitul liniei).

Tipuri de date

PHP este un limbaj de programare tip dinamic care nu necesită specificarea unui tip la declararea variabilelor, precum și declararea variabilei în sine.

Tipurile de date scalare includ:

Tipurile non-scalare includ:

  • matrice _
  • obiect _
  • resursă externă (resursă)
  • valoare nedefinită (nulă)

Intervalul de numere întregi (int) în PHP depinde de platformă (pentru o arhitectură pe 32 de biți, intervalul numărului nu depășește int32_t, adică de la -2 147 483 648 la 2 147 483 647). Numerele pot fi specificate în sisteme de numere zecimale, octale și hexazecimale . Gama de numere reale (float) depinde și de platformă (pentru o arhitectură pe 32 de biți, intervalul vă permite să operați cu numere de la ±1,7×10 −308 la ±1,7×10 +308 ).

PHP oferă dezvoltatorilor un tip boolean care poate lua doar două valori true("adevărat") și false("fals"). Când este convertit într-un boolean, numărul 0, șirul gol, zero din șirul „0” nullși matricea goală sunt considerate egale false. Toate celelalte valori sunt convertite automat în true.

Tipul special null este pentru variabile fără o valoare definită. Singura valoare de acest tip este un literal null. Tipul null acceptă variabile neinițializate, variabile inițializate cu o constantă null, precum și variabile șterse folosind unset().

Legăturile către resurse externe sunt de tip resursă. Variabilele de acest tip, de regulă, sunt un descriptor care vă permite să gestionați obiecte externe, cum ar fi fișiere, imagini dinamice, tabele de baze de date rezultate etc. Pe măsură ce limbajul se dezvoltă, biblioteca standard este perfecționată treptat și resursele sunt înlocuite cu obiecte. . Astfel, se plănuiește să scape complet de acest tip.

Matricele (matrice) acceptă chei numerice și șir și sunt eterogene . Matricele pot conține valori de orice tip, inclusiv alte matrice. Se păstrează ordinea elementelor și cheile acestora. Nu este în întregime corect să apelați matrice php, de fapt, cel mai probabil este un hash ordonat . Comportamentul neașteptat este posibil atunci când se utilizează o buclă forcu un contor în loc de foreach. Deci, de exemplu, atunci când sortați o matrice cu indici numerici după funcții din biblioteca standard, cheile sunt și ele sortate.

Tastând

Limbajul permite tastarea argumentelor, valorile returnate ale funcțiilor și metodelor de clasă , precum și, începând cu versiunea 7.4, tastarea câmpurilor de clasă . Activarea modului strict dezactivează conversiile implicite de tip în aceste secțiuni de cod, ceea ce aduce comportamentul limbii mai aproape de limbile cu tastare puternică .

Tipurile int, string, float, bool, arraysau objectsunt definiții valide ale unui tip de argument, câmp de clasă sau valoare returnată. De asemenea, este permisă utilizarea numelor de clase sau interfețe pentru a defini o implementare specifică. Utilizarea resourcepentru definirea tipului nu este permisă, iar indicarea nulleste posibilă cu restricții: Numai în cadrul definiției tipului sumei , de exemplu int|null(sau ?int).

PHP modern implementează suport de bază pentru tipurile de date algebrice și permite utilizarea atât a conjuncției , cât și a disjuncției la definirea unui tip. Limbajul nu permite aliasuri de tip , dar oferă mai multe implementări încorporate care sunt denumite „pseudotipuri” în PHP. Un termen similar în limbaj este aplicat oricărei definiții de tip care nu este independentă, aplicabilă unei valori, dar este implementată doar ca instrucțiune de verificare a tipului în Zend VM.

Pseudotipurile includ:

  • amestecat orice tip
  • iterabil (matrice sau orice obiect care implementează interfața iteratorului ).
  • apelabil ( funcție anonimă , șir sau matrice) [40]
  • tip de returnare void , ceea ce înseamnă că nu se întoarce din funcție
  • nu returnați niciodată tipul care indică faptul că aplicația este întreruptă
  • self este un tip care se referă la clasa în care a fost folosit acest tip (puteți folosi aliasurile părinte sau static, dar acesta din urmă este doar ca returnare)
  • tip fals (partea bool), care poate fi folosit doar ca unul dintre elementele așa-numitului tip union , de ex.int|false

Pe lângă verificările de tip, „pseudotipurile” încorporate pot implementa o logică suplimentară de verificare. De exemplu, callableun tip poate fi reprezentat:

  • un șir care trebuie să conțină numele funcției;
  • o matrice în care zero și primele elemente sunt șiruri de caractere (interpretat ca numele unei funcții de clasă statică);
  • o matrice în care elementul zero este un obiect, iar primul este un șir (interpretat ca o metodă asupra obiectului).

Funcții

PHP acceptă atât declararea funcțiilor numite, cât și a funcțiilor anonime de primă clasă , de exemplu:

// Declarația unei funcții numite funcția get_hello_world () : șir { return 'Hello World!' ; } // Declarație anonimă a funcției $getHelloWorld = function () : string { return 'Hello World!' ; }; // Sintaxă scurtă $getHelloWorld = fn () : string => 'Bună lume!' ;

Este de remarcat faptul că, în cazul funcțiilor anonime, diferența nu este doar în diferențele vizuale, ci și în modul în care sunt surprinse variabilele contextului extern. Orice formă „scurtă” de notație este o închidere , în timp ce o notație lungă pentru a implementa o închidere necesită specificarea explicită a variabilelor în interiorul operatorului usedintr-un context extern pentru a le capta:

$variable = „Bună lume!” ; // Folosind instrucțiunea use function () use ( $variabilă ) : șir { return $variabilă ; }; // Alternativă, folosind sintaxa fn () scurtă : șir => $variabilă ;

Accesarea variabilelor și funcțiilor

Variabilele sunt accesate folosind simbolul $urmat de numele variabilei. Această construcție poate fi folosită și pentru a crea variabile și funcții dinamice. [41] De exemplu:

$a = 'Eu sunt un' ; // Scrie valoarea în $a echo $a ; // Variabila de ieșire $a $b = 'a' ; echo $$b ; // Afișează variabila $a (în plus $ înainte de variabila $b) echo $ { 'a' }; // Variabila de ieșire $a nume_funcție (); // Apelați funcția nume_funcție $c = 'nume_funcție' ; $c (); //Apelați funcția nume_funcție $d = 'ClassName' ; $obj = nou ClassName ; // Creați un obiect din clasa ClassName $obj = new $d (); // Creați un obiect din clasa ClassName $obj -> b ; // Accesarea proprietății b a obiectului $obj -> c (); // Apelați metoda c() a obiectului $obj -> $b ; // Accesarea proprietății a a obiectului deoarece $b = 'a' $obj -> $c (); // Apelați metoda function_name() a obiectului deoarece $c = 'function_name'

În PHP echo, printdeși arată ca funcții, primul este un operator [42] iar cel de-al doilea este o expresie (adică printreturnează o valoare, spre deosebire de echo). Puteți omite parantezele când le utilizați.

Superglobali

Matricele superglobale în PHP sunt matrice predefinite care au un domeniu global fără a utiliza directiva .  Cele mai multe dintre aceste matrice conțin datele de intrare ale solicitării utilizatorului ( parametri de solicitare GET , câmpuri de formular când sunt trimise prin metoda POST , cookie -uri etc.). global

Toate superglobale, cu excepția $GLOBALSși $_REQUEST, au omologi depreciate cu nume lungi care sunt disponibile până la versiunea 5.3. x (deoarece 5.4.0 au fost eliminate). Astfel, invocările lui $_GET['year']și $HTTP_GET_VARS['year']sunt identice (cu excepția domeniului de aplicare: tablourile cu nume „lungi” nu sunt superglobale).

$GLOBALS O matrice cu toate variabilele globale (inclusiv pe cele ale utilizatorului). $_SERVER(analog pentru învechit - $HTTP_SERVER_VARS) Conține variabile de mediu pe care sistemul de operare le transmite serverului. $_ENV(gura $HTTP_ENV_VARS) Variabile de mediu curente ( ing.  Variabile de mediu ). Setul lor este specific platformei pe care rulează scriptul. $_GET(gura $HTTP_GET_VARS) Conține parametrii cererii GET transmise în URI după semnul întrebării „ ?„. $_POST(gura $HTTP_POST_VARS) O matrice asociativă de valori ale câmpurilor de formular HTML atunci când este trimisă folosind metoda POST. Indicii de elemente corespund valorii unei proprietăți a nameobiectelor (butoane, formulare, butoane radio, casete de selectare etc.) din formularul HTML. $_FILES(gura $HTTP_POST_FILES) O matrice asociativă cu informații despre fișierele trimise prin metoda POST. Fiecare element are un index care este identic cu valoarea atributului „nume” de pe formular și, la rândul său, este, de asemenea, o matrice cu următoarele elemente:
  • ['name'] este numele original al fișierului de pe computerul utilizatorului.
  • ['type']este tipul MIME al fișierului  specificat de agentul utilizator . PHP nu îl verifică și, prin urmare, nu există nicio garanție că tipul specificat este corect.
  • ['size'] — dimensiunea fișierului în octeți.
  • ['tmp_name'] — calea completă către fișierul din folderul temporar. Fișierul trebuie mutat de acolo folosind move_uploaded_file. PHP șterge singur fișierele încărcate din folderul temporar.
  • ['error'] - cod de eroare. Dacă fișierul a fost încărcat cu succes, atunci acest element va fi egal cu 0 ( UPLOAD_ERR_OK).
$_COOKIE(gura $HTTP_COOKIE_VARS) O matrice asociativă cu valori cookie transmise de agentul utilizator . $_REQUEST Conține elemente din tablouri $_GET, $_POST, $_COOKIE. Începând cu PHP 4.1, acesta include $_FILES. $_SESSION(gura $HTTP_SESSION_VARS) Conține date de sesiune.

Programare orientată pe obiecte

Cuvântul cheie classa fost rezervat în a treia versiune a limbii. În cea de-a patra versiune, a devenit posibil să se creeze clase și obiecte pe baza acestora. Cu toate acestea, principiile POO au fost acceptate doar parțial, de exemplu, toți membrii (variabilele și metodele) erau publici. În plus, crearea obiectelor a fost costisitoare și lentă.

PHP are suport complet OOP începând cu versiunea 5 . Lucrul cu clasele a fost optimizat și acum un astfel de cod funcționează destul de repede.

O clasă în PHP este declarată cu class. Metodele și proprietățile clasei pot fi publice ( public, implicit), protejate ( protected) și ascunse ( private). PHP acceptă toate cele trei mecanisme OOP majore - încapsulare , polimorfism de subtip și moștenire (clasa părinte este specificată cu un cuvânt cheie extendsdupă numele clasei). Interfețele sunt acceptate (cartografiate cu implements). Este permisă declararea metodelor și claselor finale , abstracte . Moștenirea multiplă a claselor nu este acceptată, totuși o clasă poate implementa mai multe interfețe. Cuvântul cheie este folosit pentru a accesa metodele clasei părinte parent.

Începând cu versiunea 5.4.0 , moștenirea multiplă poate fi implementată folosind mecanismul de trăsătură .  Caracteristicile sunt similare cu mixin -urile , cu excepția faptului că nu pot fi instanțiate direct . Reutilizarea codului constă în utilizarea codului caracteristic în mai multe clase. Este permisă utilizarea mai multor funcții într-o clasă. Mecanismul caracteristicilor are un mijloc de rezolvare a conflictelor de nume. Când programul este rulat, codul caracteristicii va fi „compilat” în codul clasei care îl conține.  

Clasele în PHP au un număr de metode „magice” ( de exemplu, metode magice )  , începând cu două caractere de subliniere - un constructor ( , în versiunile anterioare versiunii 5.0, constructorul era o metodă cu același nume ca și clasa) și un destructor ( ), precum și metodele de citire ( ) și scriere ( ), pliere ( ) și extindere ( ), clonare ( ), etc. Aceste metode sunt un instrument destul de flexibil: prin redefinirea lor, puteți obține o schimbare semnificativă în comportamentul obiect. __construct()__destruct()__get()__set()__sleep()__wakeup()__clone()

Toate funcțiile membre sunt implementate ca virtuale și, prin urmare, toate sunt metode.

Instanțele unei clase sunt create folosind cuvântul cheie new, proprietățile și metodele unui obiect sunt accesate folosind operatorul ->. Variabila este folosită pentru a accesa membrii unei clase din metodele acesteia $this.

clasa C1 extinde C2 implementeaza I1 , I2 { private $a ; protejat $b ; function public __construct ( $a , $b ) { parinte :: __construct ( $a , $b ); $acest -> a = $a ; $acest -> b = $b ; } public function plus () { return $this -> a + $this -> b ; } /* ............... */ } $d = nou C1 ( 1 , 2 ); echo $d -> plus (); // 3

Începând cu PHP 5, obiectele sunt transmise prin referință:

clasa A { public $culoare = 'rosu' ; } $a = nouA ( ); echo $a -> culoare ; // roșu $b = $a ; $b -> culoare = 'albastru' ; echo $a -> culoare ; // albastru

„Paamayim Nekudotayim” ( ebraică : פעמיים נקודתיים) sau pur și simplu „colon dublu”. Folosind acest token , programatorul poate accesa constante, proprietăți statice sau supraîncărcate sau metode ale clasei. Când se referă la aceste elemente din afara clasei, programatorul trebuie să folosească numele clasei. „Paamayim Nekudotayim” la prima vedere poate părea o expresie ciudată pentru un colon dublu. Cu toate acestea, în timpul creării Zend Engine versiunea 0.5 (care a fost inclusă în PHP3), Andi și Zeev au ales această notație [43] . „Paamayim Nekudotayim” înseamnă cu adevărat „colon dublu” (literal: „colon dublu”) în ebraică. Această notație nu s-a schimbat niciodată în timpul dezvoltării PHP [44] .

class MyClass { public const CONST_VALUE = 'Valoare constantă' ; } // Folosind :: în afara declarației de clasă echo MyClass :: CONST_VALUE ;

Caracteristicile interpretului

Scripturile PHP sunt de obicei procesate de interpret într-o ordine care asigură că aplicația dezvoltată este multiplatformă :

  1. analiza lexicală a codului sursă și generarea de simboluri ,
  2. analiza sintactică a lexemelor primite,
  3. generarea unui opcode pentru o mașină virtuală (un fel de bytecode ),
  4. optimizare (de exemplu DCE ),
  5. executarea codului operațional de către interpret (fără a crea un fișier executabil ) sau compilarea JIT a rezultatului cu execuția ulterioară (un semnal special este necesar în setările interpretului pentru a activa JIT).

Anterior, pentru a crește performanța aplicațiilor, a fost posibil să se folosească un software special , așa-numitele acceleratoare . Principiul funcționării lor este de a stoca în memoria cache bytecode odată generat în memorie și/sau pe disc , astfel, etapele 1-3 sunt excluse din procesul de aplicare, ceea ce duce, în general, la o accelerare semnificativă. Începând cu versiunea 5.5, unul dintre acceleratori, opcache , a fost încorporat în nucleu, astfel încât soluțiile terțe nu mai sunt populare.

O caracteristică importantă este că dezvoltatorul nu trebuie să-și facă griji cu privire la alocarea și eliberarea memoriei. Nucleul PHP implementează facilități pentru gestionarea automată a memoriei; toată memoria alocată este returnată sistemului după terminarea scriptului [45] .

Extensii

Interpretul constă dintr-un nucleu și pluginuri , „extensii” , care sunt biblioteci dinamice . Extensiile vă permit să completați caracteristicile de bază ale limbii, oferind capabilități de lucru cu baze de date , socket -uri, grafică dinamică , biblioteci criptografice , documente PDF și altele asemenea. Oricine își poate dezvolta propria extensie și o poate conecta. Există un număr mare de extensii, atât standard, cât și create de companii terțe și entuziaști, dar doar câteva zeci de extensii bine dovedite sunt incluse în pachetul standard. Multe extensii sunt disponibile în depozitul PECL .

Începând cu versiunea 7.4.0, la PHP a fost adăugat suport FFI, ceea ce simplifică foarte mult interacțiunea cu bibliotecile scrise în orice altă limbă (inclusiv API-ul furnizat de sistemul de operare). Această nouă funcționalitate, la rândul său, a oferit o alternativă la scrierea extensiilor. Astfel, folosind FFI poți scrie cod în PHP și interacționa cu orice biblioteci din sistem care furnizează cdecl, fastcallsau stdcall ABI .

Setări

Interpretul PHP are un fișier de configurare special  - php.ini, care conține multe setări, modificări care afectează comportamentul interpretului [46] . Este posibil să dezactivați utilizarea unui număr de funcții, să modificați limitele RAM utilizată de script, timpul de execuție, dimensiunea fișierelor descărcate, să configurați înregistrarea erorilor, să lucrați cu sesiuni și servicii de e-mail, să conectați extensii suplimentare și mult mai mult. Este posibil să împărțiți un fișier de configurare mare în părți. De exemplu, este o practică obișnuită să puneți setările de extensie în fișiere separate. Opțiunile interpretorului pot fi suprascrise în fișierele de configurare a serverului HTTP (de exemplu, .htaccessîn Apache ) sau în scriptul în sine în timpul execuției folosind comanda ini_set[47] .

Moduri de pornire a interpretului (SAPI)

SAPI este un strat de abstractizare extern conceput pentru a încorpora un interpret în alte aplicații și este responsabil de funcționarea acestuia (pornire, oprire, trecere de scripturi pentru execuție, acces la date externe). Există mai multe SAPI-uri principale care definesc modul în care PHP poate fi rulat și utilizat:

  1. Ca modul pentru serverul web (de exemplu, pentru modulul Apachemod_php ). În acest caz, interpretul PHP rulează în mediul procesului serverului web. Serverul web gestionează numărul de procese PHP care rulează și le spune ce scripturi să ruleze.
  2. CGI SAPI. Utilizarea CGI înseamnă începerea unui nou proces pentru a procesa fiecare cerere. Pentru a executa un script PHP, serverul web rulează ./php-cgi /path/to/script.php. Însuși principiul unei astfel de utilizări implică faptul că interpretul PHP execută un singur script, după care își încheie munca. Costul pornirii unui proces de interpret și al inițializării acestuia este foarte adesea comparabil sau chiar mai mare decât costul executării unui script PHP. Pentru a rezolva această problemă, modul FastCGI a fost introdus în CGI SAPI. În acest mod, interpretul PHP rulează ca un server independent care procesează cererile primite pentru a executa scripturi PHP folosind protocolul FastCGI, care îi permite să lucreze cu orice server web care acceptă acest protocol.
  3. FPM SAPI, cunoscut sub numele de php-fpm, este o altă implementare a protocolului FastCGI. Creat inițial de Andrey Nigmatulin ca un patch separat pentru utilizare pe rețeaua socială Badoo. Această implementare a rezolvat o serie de probleme care au împiedicat utilizarea CGI/FastCGI SAPI. În special, a devenit posibilă repornirea grupului de interpreți PHP fără a pierde cereri, rularea mai multor pool-uri sub utilizatori diferiți, repornirea de urgență a interpreților în caz de probleme cu aceștia și alte câteva completări frumoase. Ulterior, mai multe persoane au lucrat la patch, a fost adăugat un mod de gestionare dinamică a numărului de procese PHP care rulează (similar gestionării numărului de procese din serverul web Apache), iar începând de la PHP 5.3.3 php-fpm a fost inclus în PHP ca SAPI separat.
  4. Ca un script de linie de comandă (CLI SAPI), care este un fișier executabil care este apelat de utilizator din linia de comandă ; scriptul este executat în mediul utilizatorului apelant. În acest caz, este posibil să utilizați PHP pentru a crea aplicații client GUI [48] și pentru a rezolva sarcini administrative în sistemele de operare UNIX , Linux , Microsoft Windows , Mac OS X și AmigaOS . Cu toate acestea, în această calitate, el nu a câștigat popularitate, dând palma lui Perl , Python și VBScript .

Începând cu PHP 5.4.0, SAPI CLI are capacitatea de a rula PHP ca server HTTP autonom. Cu toate acestea, acest mod este exclusiv pentru dezvoltare, deoarece rulează un singur proces interpret și execută toate interogările într-o manieră pur secvenţială.

Ouă de Paște

PHP are câteva ouă de Paște (glume). Trecerea parametrilor speciali GET oricărui script php are ca rezultat ieșirea diferitelor imagini.

De exemplu:

any_script.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42

când introduceți această valoare în bara de adrese a browserului, puteți vedea imagini diferite, în funcție de versiunea interpretului:

  1. fotografie a lui Thies Arntzen (versiunile 4.1.2, 4.2.2)
  2. fotografie a unui teckel (proprietar Stig Bakken ) (versiunile 4.3.2, 4.3.3, 4.3.8 - 4.3.10)
  3. Fotografie cu terrier negru (proprietar Zeev Suraski ) (versiunile 4.3.11, 4.4.0 - 4.4.4, 5.1.0, 5.1.2)
  4. fotografia unui iepure (versiunile 4.3.1, 5.0.0, 5.0.3)
  5. logo PHP distorsionat (versiunile 5.1.3 - 5.2.13) [49]
  6. fotografie a unui elefant albastru de jucărie cu inscripție PHP (din versiunea 5.3.0) [49]

Următoarele două valori vă vor permite să vedeți sigla standard PHP și ZEND, respectiv [49] :

any_script.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42

any_script.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42

Aceste valori pot fi obținute și direct în scriptul PHP folosind funcțiile php_logo_guidși zend_logo_guidpentru logo-ul Zend.

Există, de asemenea, o valoare specială pentru afișarea unei liste cu toți autorii PHP (4,5) [49] :

any_script.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

Implementări alternative

Datorită popularității limbajului PHP și dorinței de a crește viteza aplicațiilor web bazate pe acesta, au fost create mai multe compilatoare alternative care sunt apropiate de limbajul PHP. Așadar, în februarie 2010, Facebook a deschis [ 50] [51] compilatorul său PHP - HipHop (HPHP, Hyper-PHP) care generează cod C++ , urmat de compilare în codul mașinii folosind gcc . În iulie 2013, compania rusă VKontakte a anunțat un produs similar, KPHP [52] .

Tabelul oferă o listă a implementărilor alternative existente în prezent.

Nume Versiunea PHP (aprox.) Licență Rezultatul compilației
PHP 7.4 GPL C++ , cod nativ
hip hop 5.4 Licență PHP C++ , cod nativ
Roadsend PHP 5.3 GPL / LGPL C , codul mașinii
Falanger 5.5 Ms SS-PL [53] ( Sursă comună ) Microsoft IL
Quercus (parte a serverului web Resin ) 5.2 GPL sau comercial JVM
AMP 5.2 BSDL C , codul mașinii
Pipp [54] 5.3 Licență artistică și GNU GPL Papagal
JPHP [55] 7.1 (parțial 7.2, 7.3 și 7.4) [56] Apache 2.0 JVM
PHP 5.4 MIT PHP
PH7 5.5 Proprietar (licență publică Symisc) C , codul mașinii
HippyVM 5.6 MIT RPython/PyPy

O analiză comparativă a unor compilatoare este disponibilă la phpclasses.org [57] .

Licențiere

Ecosistem

Cadre

Sisteme de management al conținutului

PHP este cel mai popular limbaj pentru dezvoltarea sistemelor de management al conținutului (CMS).

Instrumente pentru dezvoltarea aplicațiilor PHP

Nume Licență
Codlobster Freeware
Komodo Tri-licență Mozilla ( MPL / LGPL / GPL ) [58]
phpstorm Software proprietar
Instrumente de dezvoltare PHP Licență publică Eclipse
studio zend shareware
Aptana Studio GNU GPL
phpDesigner shareware
Editor PHP Expert Shareware [59]
NetBeansIDE CDDL
RadPHP XE proces
NuSphere proces
KDevelop [60] GNU GPL
Microsoft Web Matrix Freeware
Notepad++ GNU GPL
Text sublim Software proprietar
VS.Php pentru Visual Studio Software proprietar
Instrumente PHP pentru Visual Studio proces
DevelNext MPL-2.0
jEdit GNU GPL -2.0

Recomandări standard PHP

PHP Standard Recommendation ( abreviat PSR  [ ) este o specificație PHP care este dezvoltată, acceptată și publicată de un grup de proiecte PHP autorizate, inclusiv CakePHP, Composer , Joomla, PEAR , Phalcon, phpDocumentor , TYPO3, framework Yii [61] . Specificația servește ca o standardizare a conceptelor de programare PHP și se bazează pe experiență reală, precum și pe cercetare și experimentare [62] . Scopul recomandărilor este de a asigura compatibilitatea componentelor aplicațiilor web dezvoltate de diferiți dezvoltatori.

Critica

Susținătorii limbajului PHP citează ca principalele sale avantaje utilizarea pe scară largă, cererea de dezvoltatori PHP pe piața muncii și ușurința de învățare. Avantajele limbii includ evoluția sa destul de rapidă.

Lipsa suportului pentru codificări multibyte în nucleul limbii

Suportul pentru șiruri de caractere cu codificări multiocteți (cum ar fi UTF-8 ) este implementat prin extensii separate mbstringși iconv, nu există suport la nivel de kernel, totuși, din PHP 4.2.0 este posibil să se suprascrie funcțiile standard pentru lucrul cu șiruri de caractere, înlocuind le cu analogi din mbstring. Suportul pentru codificări pe mai mulți octeți în toate funcțiile șir a fost disponibil începând cu versiunea 5.4.0 (martie 2012).

Lipsa suportului multithreading

Limbajul nu oferă posibilitatea de a crea aplicații cu mai multe fire și nu există suport pentru accesul sincronizat la resurse, cu toate acestea, este implementat folosind extensia PCNTL [63] (din limba engleză  process control ), dar nu este potrivit. pentru rezolvarea unor probleme specifice.

Deși este posibil să se instaleze extensia pthreads pentru firele de execuție „cinstite”, pentru aceasta interpretul trebuie să fie compilat cu steag-ul de siguranță al firului, iar extensia în sine a fost depreciată în favoarea paralelei (de la același autor).

O alternativă mai modernă este utilizarea extensiei Swoole.

Vezi și

Note

  1. 1 2 3 4 http://php.net/manual/en/history.php.php
  2. 1 2 https://www.technotification.com/2018/04/best-php-frameworks.html
  3. 1 2 http://lerdorf.com/bio/  _
  4. Versiunea 8.1.12 - 2022.
  5. Grupuri Google
  6. PHP: Istoria PHP - Manual
  7. https://fileinfo.com/extension/php
  8. 1 2 3 PHP: Prefață - Manual
  9. Rasmus Lerdorf | PHP despre hormoni - 2013.
  10. http://php.net/license/
  11. 1 2 3 PHP: Istoria PHP - Manual . Data accesului: 18 ianuarie 2009. Arhivat din original la 1 februarie 2009.
  12. ↑ PHP : Prefață - Manual  . Arhivat din original pe 21 august 2011.
  13. 1 2 TIOBE Software: Tiobe Index . Consultat la 2 noiembrie 2009. Arhivat din original la 22 iunie 2013.
  14. Istoria PHP și a  proiectelor conexe . Arhivat din original pe 21 august 2011.
  15. PHP: Features - Manual (21 iunie 2009). Consultat la 13 noiembrie 2009. Arhivat din original pe 21 august 2011.
  16. Rasmus Lerdorf. Mă întreb de ce oamenii continuă să scrie că PHP a fost scris vreodată în Perl. Nu a fost niciodată. #php  (engleză) . @rasmus (20 iulie 2012). Preluat la 8 ianuarie 2019. Arhivat din original la 3 ianuarie 2018.
  17. Savelyeva N. Cursul 1: Introducere în limbajul de programare PHP / PHP. Arhivat la 22 ianuarie 2015 la Wayback Machine Intuit, 2005. ISBN 978-5-9556-0026-0
  18. Numărul de funcții rescrise cu suport Unicode . Data accesului: 19 ianuarie 2007. Arhivat din original la 19 ianuarie 2007.
  19. Fișierul news.txt din distribuția PHP 6 (downlink) . Data accesului: 19 ianuarie 2007. Arhivat din original la 12 decembrie 2008. 
  20. PHP 6 Current Done și Backlog . Consultat la 7 aprilie 2008. Arhivat din original pe 18 aprilie 2008.
  21. Lista completă a modificărilor planificate pentru decembrie 2005 . Consultat la 12 august 2006. Arhivat din original pe 12 august 2006.
  22. Cum a murit PHP6 Arhivat 13 octombrie 2011 la Wayback Machine // amiro.ru
  23. PHP RFC: Numele următoarei versiuni a PHP . Preluat la 28 martie 2015. Arhivat din original la 3 iulie 2017.
  24. PHP RFC: cronologie PHP 7.0 . Data accesului: 28 martie 2015. Arhivat din original pe 17 martie 2015.
  25. ↑ Cele mai tari caracteristici PHP 7 : Nave spațiale, Sugestii de tip, Viteză 2X  . www.zend.com. Preluat la 6 iulie 2017. Arhivat din original la 8 iulie 2017.
  26. PHP: Arhiva de știri - 2015 . Data accesului: 12 decembrie 2015. Arhivat din original pe 12 decembrie 2015.
  27. PHP: rfc:phpng . php.net . Data accesului: 16 decembrie 2014. Arhivat din original la 19 octombrie 2014.
  28. RFC: Tipuri de returnare . php.net . Preluat la 28 martie 2015. Arhivat din original la 17 iulie 2017.
  29. RFC: Declarații de tip scalar . php.net . Preluat la 28 martie 2015. Arhivat din original la 7 iulie 2017.
  30. PHP: Caracteristici noi - Manual . Preluat la 2 mai 2020. Arhivat din original la 2 mai 2020.
  31. PHP: Arhiva de știri - 2020 . Preluat la 29 noiembrie 2020. Arhivat din original la 13 octombrie 2020.
  32. Ce este nou în PHP 8 - stitcher.io . Preluat la 3 mai 2020. Arhivat din original la 19 mai 2020.
  33. PHP: rfc: union_types_v2 . Preluat la 3 mai 2020. Arhivat din original la 1 aprilie 2020.
  34. PHP:rfc:jit . Preluat la 3 mai 2020. Arhivat din original la 18 mai 2020.
  35. Dale Hirt - Suport Microsoft pentru PHP pe Windows Arhivat 16 iulie 2020 la Wayback Machine 
  36. Windows 10 nu va mai accepta PHP Arhivat 16 iulie 2020 la Wayback Machine  (rusă)
  37. Microsoft nu va accepta PHP 8.0 pentru Windows . Preluat la 16 iulie 2020. Arhivat din original la 17 iulie 2020.
  38. Construirea  PHP . Cartea Internal PHP. Preluat la 1 martie 2022. Arhivat din original la 8 mai 2021.
  39. ↑ RE2C : Un generator de lexer bazat pe lookahead-TDFA  . Impactul software-ului. Preluat la 1 martie 2022. Arhivat din original la 27 ianuarie 2022.
  40. PHP: Funcții de apel invers (Funcții de apel invers) - Manual . secure.php.net. Preluat la 27 februarie 2019. Arhivat din original la 28 februarie 2019.
  41. PHP: Variabile variabile - Manual . Consultat la 17 decembrie 2008. Arhivat din original la 11 mai 2008.
  42. PHP: echo - Manual . Data accesului: 14 ianuarie 2010. Arhivat din original la 24 februarie 2009.
  43. Aparent împrumutat din limbajul C++ , unde este forma binară de specificare a domeniului , o construcție cu acesta, un nume calificat , în acest caz o constantă.
  44. http://php.net/manual/en . Preluat la 25 martie 2010. Arhivat din original la 12 iunie 2010.
  45. PHP: Basic memory management - Manual (13 noiembrie 2009). Consultat la 17 noiembrie 2009. Arhivat din original la 21 august 2011.
  46. PHP: directive php.ini - Manual  ( 6 noiembrie 2009). Consultat la 13 noiembrie 2009. Arhivat din original pe 21 august 2011.
  47. PHP: List of php.ini directives - Manual  ( 6 noiembrie 2009). Consultat la 13 noiembrie 2009. Arhivat din original pe 21 august 2011.
  48. PHP: Utilizarea PHP pe linia de comandă - Manual (21 iunie 2009). Consultat la 13 noiembrie 2009. Arhivat din original pe 21 august 2011.
  49. 1 2 3 4 PHP Ou de  Paște . Consultat la 16 noiembrie 2009. Arhivat din original la 21 august 2011.
  50. HipHop pentru PHP: Mișcă-te rapid
  51. Facebook a deschis codul pentru un traducător PHP de înaltă performanță . Consultat la 3 februarie 2010. Arhivat din original pe 6 februarie 2010.
  52. Pavel Durov și colegii au dezvoltat o versiune îmbunătățită a PHP . Preluat la 2 ianuarie 2014. Arhivat din original la 12 decembrie 2013.
  53. Textul  licenței
  54. Proiectul se află într-o etapă experimentală
  55. Proiectul este în stadiu experimental. Cea mai recentă versiune 1.3.1 (din iulie 2020)
  56. jphp-group/  jphp . GitHub. Consultat la 18 noiembrie 2018. Arhivat din original la 5 octombrie 2018.
  57. Performanța compilatorului PHP . Consultat la 1 martie 2010. Arhivat din original pe 26 februarie 2010.
  58. Komodo IDE este un mediu de dezvoltare profesională pentru Perl, Python, Tcl | ActiveState (link în jos) . Consultat la 22 noiembrie 2011. Arhivat din original pe 20 decembrie 2008. 
  59. Este oferită înregistrarea gratuită pentru cetățenii din exURSS
  60. Suport PHP pentru KDevelop 4 (și eventual Quanta+) | Millian Wolff . Data accesului: 11 decembrie 2010. Arhivat din original la 2 ianuarie 2011.
  61. Personal  . _ Preluat la 1 august 2020. Arhivat din original la 2 iunie 2020.
  62. ↑ Misiune și structură  . Preluat la 1 august 2020. Arhivat din original la 1 august 2020.
  63. PCNTL . Data accesului: 23 ianuarie 2012. Arhivat din original la 17 ianuarie 2012.

Literatură

  • Matt Zandstra. PHP: Objects, Patterns and Practices = PHP Objects, Patterns and Practice, Ediția a treia. — ediția a 3-a. - M . : " Williams ", 2010. - S. 560. - ISBN 978-5-8459-1689-1 .
  • Christian Dari, Emilian Balanescu. PHP și MySQL: Construirea unui magazin online = Începând cu PHP și MySQL E-Commerce: de la novice la profesionist. - M . : " Williams ", 2010. - ISBN 978-5-8459-1602-0 .
  • Jason Langstorf. PHP și jQuery pentru profesioniști = Pro PHP și jQuery. - M . : " Williams ", 2010. - S. 352. - ISBN 978-5-8459-1693-8 .
  • Quentin Zervas. Web 2.0: Construirea de aplicații cu PHP = Aplicații practice Web 2.0 cu PHP. - M . : " Williams ", 2009. - S. 544. - ISBN 978-5-8459-1590-0 .
  • Kuznetsov Maxim, Simdyanov Igor. PHP 5/6. - Sankt Petersburg. : " BHV-Petersburg ", 2009. - S. 1024. - ISBN 978-5-9775-0304-4 .
  • Kuznetsov Maxim, Simdyanov Igor. Programare orientată pe obiecte în PHP. - Sankt Petersburg. : " BHV-Petersburg ", 2007. - S. 608. - ISBN 978-5-9775-0142-2 .
  • Ed Lecky-Thompson, Alec Kove, Stephen Nowitzki, Hyao Eyde-Goodman. PHP 5 pentru profesioniști = Professional PHP 5. - M . : " Dialectics ", 2006. - S. 608. - ISBN 0-7645-7282-2 .
  • Kuznetsov Maxim, Simdyanov Igor. Tutorial PHP 5/6. - Ed. a 3-a, revizuită. si suplimentare - Sankt Petersburg. : " BHV-Petersburg ", 2009. - P. 672. - ISBN 978-5-9775-0409-6 .
  • Kuznetsov Maxim, Simdyanov Igor. PHP. Practica creării de site-uri web. - Ed. a II-a. revizuit si suplimentare - Sankt Petersburg. : " BHV-Petersburg ", 2008. - S. 1264. - ISBN 978-5-9775-0203-0 .
  • Kuznetsov Maxim, Simdyanov Igor. Puzzle-uri PHP pentru hacker. - Ed. a II-a. revizuit si suplimentare - Sankt Petersburg. : " BHV-Petersburg ", 2008. - P. 544. - ISBN 978-5-9775-0204-7 .
  • Kuznetsov Maxim, Simdyanov Igor. PHP cu exemple. - Ed. a II-a. revizuit si suplimentare - Sankt Petersburg. : " BHV-Petersburg ", 2011. - P. 400. - ISBN 978-5-9775-0445-4 .
  • Luke Welling, Laura Thomson. Dezvoltarea de aplicatii web cu PHP si MySQL. - Ed. a 5-a - Sankt Petersburg. : " Dialectica ", 2019. - S. 768. - ISBN 978-5-9908911-9-7 .
  • Luke Welling, Laura Thomson. Dezvoltare web PHP și MySQL. — ediția a cincea. - " Addison-Wesley ", 2017. - P. 687. - ISBN 978-0-321-83389-1 .
  • Zandstra M. PHP. Obiecte, modele și tehnici de programare. - Ed. a IV-a - Sankt Petersburg. : " Dialectica ", 2015. - S. 576. - ISBN 978-5-8459-1922-9 .
  • Zandstra M. PHP. Obiecte, modele și tehnici de programare. - Ed. a 5-a - Sankt Petersburg. : " Dialectica ", 2019. - S. 736. - ISBN 978-5-907144-54-5 .
  • Zandstra M. Obiecte PHP, modele și practică . — ediția a 5-a. - " Apress ", 2016. - S.  583 . — ISBN 978-1-4842-1995-9 .
  • Nixon R. Construirea de site-uri web dinamice cu PHP, MySQL, JavaScript, CSS și HTML5. - Ed. a IV-a - Sankt Petersburg. : " O'Reilly Bestsellers ", 2016. - P. 768. - ISBN 978-5-496-02146-3 .
  • Ulman, Larry. PHP și MySQL: crearea de magazine online. - Ed. a II-a - Sankt Petersburg. , 2015. - S. 544. - ISBN 978-5-8459-1939-7 .
  • Kuznetsov M., Simdyanov I. Manual de autoinstruire PHP 7. - Ed. a II-a - Sankt Petersburg. , 2018. - P. 448. - ISBN 978-5-9775-3817-6 .

Link -uri