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 .
Î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 .
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.
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ă.
ExtensiiUtilizarea 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:
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:
Există, de asemenea, un loc pentru medii de dezvoltare cu drepturi depline pentru GUI PHP:
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ă.
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.
Î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.
Î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).
Î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.
Î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 proiectExistă ș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)
Î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.
Î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] .
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
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).
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:
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ândLimbajul 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:
Pe lângă verificările de tip, „pseudotipurile” încorporate pot implementa o logică suplimentară de verificare. De exemplu, callableun tip poate fi reprezentat:
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ă ;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.
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: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 ;Scripturile PHP sunt de obicei procesate de interpret într-o ordine care asigură că aplicația dezvoltată este multiplatformă :
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] .
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 .
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] .
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:
Î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ă.
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-00AA001ACF42când introduceți această valoare în bara de adrese a browserului, puteți vedea imagini diferite, în funcție de versiunea interpretului:
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-00AA001ACF42Aceste 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
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] .
PHP este cel mai popular limbaj pentru dezvoltarea sistemelor de management al conținutului (CMS).
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 |
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.
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ă.
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).
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.
![]() | ||||
---|---|---|---|---|
Site-uri tematice | ||||
Dicționare și enciclopedii | ||||
|
PHP | |
---|---|
oameni | |
Resurse |
|
Implementări | |
Cadre |
|
Testare |
|
ORM | |
IDE | |
Compilator | Falanger |
Setul de instrumente | |
Categorie |
Limbaje de programare | |
---|---|
|
Software gratuit și open source | |
---|---|
Lucrul principal |
|
Comunitate |
|
Organizații | |
Licențe | |
Probleme | |
Alte |
|
|
Web și site-uri web | |
---|---|
la nivel global | |
La nivel local | |
Tipuri de site-uri și servicii |
|
Creare si intretinere | |
Tipuri de machete, pagini, site-uri | |
Tehnic | |
Marketing | |
Societate și cultură |
Protocoale de interacțiune | |
---|---|
Gateway-uri |