PHP | |
---|---|
Sprog klasse | multi- paradigme , objektorienteret , imperativ |
Dukkede op i | 8. juni 1995 [5] [6] |
Forfatter | Rasmus Lerdorf [3] |
Udvikler | Rasmus Lerdorf [1] , Andy Gutmans [1] , PHP Group [d] , Zend Technologies [2] og Zeev Sourasky |
Filtypenavn _ | .php[7] |
Frigøre |
|
Blev påvirket | C++ , Perl [8] , C [8] , Java [8] , Tcl [9] , HTML og JavaScript |
Licens | PHP-licens [10] |
Internet side | php.net _ |
OS | Unix-lignende operativsystem og Microsoft Windows |
Mediefiler på Wikimedia Commons |
PHP ( /pi:.eɪtʃ.pi:/ Engelsk PHP: Hypertext Preprocessor - "PHP: hypertext preprocessor "; oprindeligt PHP / FI (Personal Home Page / Form Interpreter), og senere kaldet Personal Home Page Tools [11] - " Værktøjer til at skabe personlige websider") er et generelt C-lignende scriptsprog [12] , der bruges intensivt til udvikling af webapplikationer. Det understøttes i øjeblikket af langt de fleste hostingudbydere og er et af de førende sprog, der bruges til at skabe dynamiske websteder [13] .
Sproget og dets tolk ( Zend Engine ) udvikles af en gruppe entusiaster som en del af et open source-projekt [14] . Projektet distribueres under sin egen licens , som er uforenelig med GNU GPL .
Inden for webprogrammering, især serversiden, er PHP et af de populære scriptsprog (sammen med JSP , Perl og sprogene, der bruges i ASP.NET ).
Popularitet inden for bygning af websteder bestemmes af tilstedeværelsen af et stort sæt indbyggede værktøjer og yderligere moduler til udvikling af webapplikationer [15] . De vigtigste er:
Brugt af hundredtusindvis af udviklere i 2010'erne; Ifølge TIOBE-rangeringen baseret på søgemaskinedata lå PHP i maj 2016 på en 6. plads blandt programmeringssprogene [13] .
Inkluderet i LAMP - et almindeligt sæt software til at skabe og hoste websteder ( Linux , Apache , MySQL , PHP), samt LEMP - et lige så almindeligt sæt software ( Linux , Nginx , MySql , PHP).
Websteder, der bruger PHP, omfatter Facebook , Wikipedia , Yahoo! , Baidu .
Sproget understøtter automatisk HTTP-cookies i overensstemmelse med Netscape-standarder. Dette giver dig mulighed for at indstille og læse små segmenter af data på klientsiden. Arbejdet med cookies er organiseret gennem sessioner (sessioner). Sessioner har en udløbsdato (efter den udløber, slettes dataene), i sessioner kan du gemme og redigere forskellige typer data, inklusive serialiserede - passeret gennem serialize (processen sker automatisk), PHP-objekter.
PHP er ikke fokuseret på at skabe desktop-applikationer, men der er behov for at skabe grænseflader til opsætning af servere, kontinuerlig eksekvering, fejlretning af scripts (scripts), styring af lokale og testservere osv. På grund af dette opstod der løsninger på dette problem.
UdvidelserHovedanvendelsen af udvidelser er at tilføje brugergrænsefladebiblioteker (UI-biblioteker).
Udvidelser er traditionelt opdelt i tre grupper:
Udvidelser, såsom en to-vejs wrapper, er blevet udviklet til at bruge andre sprog, når du skriver PHP-udvidelser, og omvendt. For eksempel er PSV Component Library et projekt bestående af tre delprojekter:
Der er også et sted for fuldgyldige udviklingsmiljøer til GUI PHP:
En pioner i denne kategori er DevPHP-IDE-studiet, som brugte Kylix ( Delphi ) som rygraden i grænsefladen og phpcli til at bygge brugerdefinerede programmer.
Det inkluderede en kodeeditor, flere værktøjer og en visuel HTML-fremviser.
Den blev først introduceret i 2002, nu har den 3 stabile versioner, men udviklingen fortsætter ikke - den stoppede på grund af hovedudviklerens død i en bilulykke.
Efter DevPHP IDE dukkede en udvidelse op - et sæt komponenter til CodeGear Rad Studio 2009 baseret på php4delphi med nogle forbedringer (webelementer, inspector, debugger), dens support varede i fire versioner, hvoraf den anden var inkluderet i den betalte udvidelse Rad Studio 2010 : der var en mulighed for at bruge scripts, style webkomponenter, se stilarter og websider, før du byggede programmet, køre en lokal server, bygge programmet som et selvstændigt program og fejlsøge koden. Med udgivelsen af Delphi XE fik udvidelsen navnet RADPHP Xe. Derudover blev selve studiet kendt som Embarcadero Delphi, og arbejdet med denne udvidelse blev suspenderet på ubestemt tid.
I 2009 begyndte udviklingen af et miljø til at skabe grafiske PHP-applikationer på basis af php4delphi, som senere blev tilsluttet Rostislav Romanov. Miljøet blev kaldt PHP DevelStudio, den første udgivne version var 0.1.7. DevelStudio havde et lille antal komponenter i værktøjskassen og kørte på den forældede PHP 4. I den anden version modtog DevelStudio understøttelse af PHP 5. Streams blev tilføjet, og mange ændringer og forbedringer blev foretaget. Programmernes samlingskode er blevet lukket, tidligere versioner af programmet og meddelelser på forummet er blevet fjernet for at forhindre ubudne gæster.
Den anden version af DevelStudio modtog også et sæt AlphaControls-komponenter, som et resultat af hvilke det blev brugt til at skabe malware på grund af dets enkelhed og klarhed. Populære antivirusprogrammer på det tidspunkt (MacAffee, AVG , Avira ) begyndte at genkende alle programmer kompileret i DevelStudio som vira.
Efter nogen tid indgav forfatteren af AlphaControls en klage til udviklerne af DevelStudio, og sættet af komponenter blev fuldstændig fjernet fra miljøet, men det blev bevaret i en allerede eksisterende version, som ikke kunne fjernes fra forummet denne gang .
På tidspunktet for 2012 blev den seneste version af miljøet frigivet - 3.0.2, hvor et nyt sæt komponenter dukkede op, herunder Chromium -browseren i stedet for IE , som tiltrak sig opmærksomheden hos webudviklere og brugere af algoritmemiljøet. På det tidspunkt blev kompilering af programmer i Algoritme betalt, så DevelStudio, som et nyt og gratis udviklingsmiljø, lokkede det meste af publikum til sig.
I 2014 begyndte de første forsøg på at genoprette miljøet, denne gang af samfundet . I slutningen af 2018 blev kildekoden gendannet og er tilgængelig på GitHub .
I 2019 henvendte fællesskabet sig til skaberen af DevelStudio for at ændre miljøets distributionspolitik og gøre det tilgængeligt for opdatering og redigering. På grund af klager over manglen på links til de anvendte biblioteker (DCEF, PHP4Delphi, TSizeCtrl, SynEdit), blev forummet fjernet, og en af siderne, der beskriver miljøet, blev omdirigeret til webstedets hovedside. Fra nu af er DevelStudio officielt ejet af fællesskabet.
Parallelt med dette begyndte hovedudvikleren DevelStudio at skabe en "reinkarnation" af det tidligere miljø. Han tog JavaFX -grafikbiblioteket som grundlag , hvilket resulterede i et helt nyt miljø, med CSS -understøttelse , men uden fuld understøttelse af Zend PHP -biblioteket - projektet var baseret på sit eget jPHP-sprog. Dens funktioner er arbejde på JVM , JIT -kompiler, Unicode - understøttelse , multithreading og et objektorienteret standardbibliotek.
I den 16. version fik DevelNext-miljøet understøttelse af php 7, og sideløbende hermed blev jPHP udvidet af en entusiast for udvikling under Android OS .
I øjeblikket arbejder forfatteren og entusiaster på 2020-versionen (tidligere 17.).
I 2015 begyndte Alexander Kazantsev at studere grænsefladeudviklingsalgoritmer og skabte php_qml-udvidelsen, som gjorde det muligt at bruge widgets fra QT-biblioteket, men det fungerede kun under Windows.
Med dette begyndte udviklingen af PHPQt, de første versioner var ikke meget opmærksomme fra webudviklere, så forfatteren begyndte at forbedre udvidelsen i dybden.
Den 28. juli 2015 blev den første version af projektkompileren udgivet, på det tidspunkt var det en simpel script (script) executor, der vedhæftede php-kode til stubben (som DevelStudio), og havde en afhængighed af Windows API, kl. denne fase blev næsten alle widgets understøttet og multithreading, der var en nem optimering af php-koden. Fra det øjeblik hed motoren PQEngine,
Den 3. august 2016 blev den femte version af applikationskompileren (PqBuilder) frigivet, som skiftede til PlastiQ-basen og havde understøttelse af de seneste, på det tidspunkt, php 7, projekter modtog en mere komplet compiler og krævede ikke længere tilstedeværelse af PqEngine.dll i nærheden af den eksekverbare fil, i stedet Denne visuelle biblioteker begyndte at blive tilføjet dynamisk - som filer, og ikke syet ind i PQEngine.dll. Dette trin blev taget for kompatibilitet med andre systemer og de originale Qt-biblioteker.
Med fremkomsten af den sjette version blev projektet en tilføjelse til Qt Studio-miljøet, og compileren blev blot en kodeoptimering før den endelige samling af programmet. En fuldgyldig grænsefladeeditor dukkede op, tip i kodeeditoren, og dokumentation begyndte at blive oprettet. Fra det øjeblik udsendte de en meddelelse om oprettelsen af PqStudio-miljøet, men dets udvikling gik ikke langt.
I 2018 dukkede et projekt op, der kombinerer mulighederne i Windows Forms (.NET Framework) og PHP 7. Dets udvikling er stadig i gang i et langsomt tempo.[ hvornår? ] . I øjeblikket er næsten alt tilgængeligt i motoren[ hvad? ] funktioner for OOP. Miljøet er under privat udvikling. Den eksekverbare standard kommer med php7ts.dll.
Forbinder PHP til et projektDer er også udvidelser til det modsatte brug - at forbinde PHP til et projekt i et andet programmeringssprog: Phalanger (C#, php fra 5.4 til 7), Peachpie] (C#, php 7), PHP4Delphi (Lazarus, Delphi, C#, C, C++ , php 5.6, JPHP (Java, php 7.0), PHPly (Python, php 5.6)
I 1994 udviklede den danske programmør Rasmus Lerdorf i C [16] et sæt CGI-scripts til at tage højde for besøgende på hans online -cv , som behandler HTML- dokumentskabeloner. Lerdorf kaldte sættet Personal Home Page Tools (Værktøjer til en personlig hjemmeside ). Snart var funktionaliteten ikke længere nok, og Lerdorf udviklede en ny PHP/FI skabelonfortolker ( English Personal Home Page / Forms Interpreter - "personlig hjemmeside / formularfortolker") [17] .
Den 8. juni 1995 blev Personal Home Page (PHP Tools) version 1.0 frigivet - den første offentlige udgivelse.
I 1997, efter en lang beta-test , blev den anden version af handleren skrevet i C frigivet - PHP / FI 2.0. Det blev brugt af omkring 1 % (ca. 50 tusind) af alle internetdomæner i verden [11] .
PHP 3.0 har gennemgået en betydelig revision, der definerer programmeringssprogets moderne udseende og stil. I 1997 omskrev to israelske programmører, Andy Gutmans og Zeev Suraski , tolkekoden fuldstændigt. PHP 3.0 blev officielt udgivet i juni 1998 [11] .
En af styrkerne ved PHP 3.0 var evnen til at udvide kernen med yderligere moduler. Efterfølgende tiltrak udvidelsesskrivegrænsefladen mange tredjepartsudviklere til PHP, der arbejdede på deres moduler, hvilket gjorde det muligt for PHP at arbejde med et stort antal databaser , protokoller og understøtte et stort antal API'er . Et stort antal udviklere førte til den hurtige udvikling af sproget og den hurtige vækst i dets popularitet. Fra denne version står php- akronymet for "PHP: hypertext Preprocessor", i stedet for den forældede "Personal Home Page".
I vinteren 1998, næsten umiddelbart efter den officielle udgivelse af PHP 3.0, begyndte Andy Gutmans og Zeev Suraski at omarbejde PHP-kernen. Målene omfattede at øge ydeevnen af komplekse applikationer og forbedre modulariteten af PHP-kodebasen. Den nye motor, kaldet Zend Engine , klarede opgaverne med succes og blev først introduceret i midten af 1999 . PHP 4.0 , baseret på denne motor og medbringer en række yderligere funktioner, blev officielt udgivet i maj 2000 . Ud over præstationsforbedringer havde PHP 4.0 adskillige andre nøgleinnovationer, såsom sessionssupport, outputbuffering , sikrere måder at håndtere brugerinput på og adskillige nye sprogkonstruktioner.
Den femte version af PHP blev frigivet af udviklerne den 13. juli 2004 . Ændringerne omfatter en opdatering af Zend-kernen ( Zend Engine 2 ), som øgede tolkens effektivitet markant . Introduceret understøttelse af XML -markeringssprog . OOP- funktionerne er blevet fuldstændig redesignet og ligner meget den model, der bruges i Java . Især blev en destruktor introduceret , offentlige, private og beskyttede medlemmer og metoder , endelige medlemmer og metoder, grænseflader og objektkloning. Efterfølgende versioner introducerede også navnerum , lukninger og en række ret alvorlige ændringer, kvantitativt og kvalitativt sammenlignelige med dem, der dukkede op under overgangen til PHP 5.0.
Den sjette version af PHP har været under udvikling siden oktober 2006 [18] . Mange innovationer er blevet lavet [19] [20] , såsom at fjerne POSIX regulære udtryk og "lange" superglobals fra kernen, og fjerne safe_mode , magic_quotes_gpc og register_globals direktiverne fra php.ini konfigurationsfilen. En af hovednyskabelserne skulle være understøttelse af Unicode [21] . I marts 2010 blev udviklingen af PHP6 imidlertid anset for at være lovende [22] på grund af vanskeligheder med Unicode-understøttelse. PHP6-kildekoden er blevet flyttet til , og version 5.4 er blevet hovedlinjen i udviklingen.
I 2014 blev der afholdt en afstemning, som resulterede i, at den næste version blev kaldt PHP 7 [23] . Udgivelsen af den nye version var planlagt i midten af oktober 2015 [24] . I marts 2015 udgav Zend en infografik , der skitserer de vigtigste innovationer i PHP 7 [25] .
Den 3. december 2015 blev PHP version 7.0.0 annonceret [26] .
Den nye version er baseret på en eksperimentel gren af PHP, som oprindeligt hed phpng ( PHP Next Generation "next generation"), og er udviklet med fokus på at øge ydeevnen og reducere hukommelsesforbruget [27] . Den nye version tilføjer muligheden for at specificere typen af data, der returneres fra funktionen [28] , tilføjet typekontrol for data [29] samt nye operatører.
Den 13. juni 2019 blev PHP 7.4 frigivet. Indtastede egenskaber og pilefunktioner blev tilføjet til kernen, såvel som afgrænset returtype-kovarians og argumenttype-kontravarians [30] .
PHP version 8.0 blev frigivet den 26. november 2020 [31] . De vigtigste nyskabelser var [32] : understøttelse af fagforeningstyper [33] , JIT-kompilering [34] og attributter (også kendt som annoteringer), også omskifteren "konstruktion" blev erstattet med et match "udtryk", og en ny Nullsafe-operatør blev tilføjet.
Den 9. juli 2020 udgav Dale Hirt , PHP Project Manager hos Microsoft, en meddelelse [35] på en mailingliste, hvori det stod, at efter udgivelsen af PHP 8.0, vil Microsoft stoppe med at understøtte udviklingen af dette programmeringssprog til Windows [36] . Microsoft-specialister kompilerede binære versioner af tolken til Windows og testede deres sikkerhed. PHP-udviklerfællesskabet rapporterede, at de ville tage alle nødvendige forholdsregler for at finde en alternativ mulighed for at organisere support til PHP 8.0 og nyere til Windows i den nærmeste fremtid, for eksempel på egen hånd [37] . php.internals
Syntaksen for PHP ligner den for C -sproget . Nogle elementer, såsom associative arrays og loop foreach, er lånt fra Perl .
Leksisk parsing af PHP udføres gennem re2c -værktøjet [38] [39] , som genererer hurtige og let indlejrbare lexere.
For at skrive et simpelt script behøver du ikke beskrive variabler, anvendte moduler osv. Ethvert script kan starte direkte med <?php.
Det enkleste Hello world-program i PHP ser sådan ud:
<?php echo 'Hej, verden!' ; ?>En kortere version af strengoutput er også mulig:
<?= 'Hej verden!' ?>Åbningsvisningsmærket <?=bruges til at gengive de konstruktioner, der bruges til at vise en linje.
PHP udfører kode, der er inde i skilletegn som f.eks <?php ?>. Alt uden for grænserne udsendes uændret. Dette bruges hovedsageligt til at indsætte PHP-kode i et HTML-dokument, som sådan:
< html > < hoved > < titel > Test af PHP </ title > </ head > < body > <?php echo 'Hej verden!'; ?> </ body > </ html >Ud over afgrænsningstegn <?php ?>er det tilladt (men anerkendt som forældet og praktisk talt ikke brugt) brug af en forkortet version <? ?>. Derudover før version 7.0, ASP <% %> og <script language="php"> </script>. Genvejsarbejde er defineret i php .ini -konfigurationsfilen .
Variablenavne begynder med symbolet $, variablens type behøver ikke at blive erklæret. Variable- og konstantnavne skelner mellem store og små bogstaver. Navne på klasser, klassemetoder og funktioner skelner ikke mellem store og små bogstaver. Variabler behandles i dobbelte citationsstrenge og heredoc - strenge (strenge oprettet med <<<-operatoren). Variabler i strenge omsluttet af enkelte anførselstegn og nowdoc analyseres ikke.
Udsagn er adskilt af et semikolon ( ;), undtagen i nogle tilfælde efter erklæringen af if/else-konstruktioner og sløjfer.
Variabler kan overføres til en funktion både ved værdi og ved reference (tegnet bruges &).
PHP understøtter tre typer kommentarer: C -stil (afgrænset /* */), C++ (startende med //og fortsætter til slutningen af linjen) og UNIX-skal (med #til slutningen af linjen).
PHP er et dynamisk indtastet programmeringssprog , der ikke kræver, at en type angives ved deklarering af variabler, såvel som selve variabeldeklarationen.
Skalære datatyper omfatter:
Ikke-skalære typer omfatter:
Rækken af heltal (int) i PHP afhænger af platformen (for en 32-bit arkitektur overstiger antallet af tallet ikke int32_t, det vil sige fra -2 147 483 648 til 2 147 483 647). Tal kan angives i decimale, oktale og hexadecimale talsystemer . Rækkevidden af reelle tal (float) afhænger også af platformen (for en 32-bit arkitektur giver intervallet dig mulighed for at arbejde med tal fra ±1,7×10 −308 til ±1,7×10 +308 ).
PHP giver udviklere en boolesk type , der kun kan tage to værdier true("true") og false("false"). Når det konverteres til en boolean, betragtes tallet 0, den tomme streng, nullet i strengen "0" nullog den tomme matrix som lig false. Alle andre værdier konverteres automatisk til true.
Den specielle type null er for variable uden en defineret værdi. Den eneste værdi af denne type er en bogstavelig null. Null-typen accepterer uinitialiserede variable, variable initialiseret med en konstant null, samt variabler slettet ved hjælp af unset().
Links til eksterne ressourcer er af typen ressource. Variabler af denne type er som regel en deskriptor , der giver dig mulighed for at administrere eksterne objekter, såsom filer, dynamiske billeder, resulterende databasetabeller osv. Efterhånden som sproget udvikler sig, forfines standardbiblioteket gradvist, og ressourcer erstattes af objekter. . Det er således planlagt helt at slippe af med denne type.
Arrays (array) understøtter numeriske taster og strengnøgler og er heterogene . Arrays kan indeholde værdier af enhver type, inklusive andre arrays. Rækkefølgen af elementer og deres nøgler er bevaret. Det er ikke helt korrekt at kalde php arrays arrays, faktisk er det højst sandsynligt en ordnet hash . Uventet adfærd er mulig, når du bruger en løkke formed en tæller i stedet for foreach. Så når man f.eks. sorterer et array med numeriske indekser efter funktioner fra standardbiblioteket, sorteres nøglerne også.
SkriverSproget tillader indtastning af argumenter, returneringsværdier af funktioner og klassemetoder , samt, fra version 7.4, indtastning af klassefelter . Aktivering af streng tilstand deaktiverer implicitte typekonverteringer i disse kodesektioner, hvilket bringer sprogets adfærd tættere på sprog med stærk skrivning .
Typerne int, string, float, booleller er gyldige definitioner af en argumenttype, et klassefelt arrayeller objecten returværdi. Det er også tilladt at bruge navnene på klasser eller grænseflader til at definere en specifik implementering. Brug resourcetil typedefinition er ikke tilladt, og indikationen nuller mulig med begrænsninger: Kun inden for definitionen af sumtypen , for eksempel int|null(eller ?int).
Moderne PHP implementerer grundlæggende understøttelse af algebraiske datatyper og tillader både konjunktion og disjunktion at blive brugt, når en type defineres. Sproget tillader ikke typealiaser , men det giver flere indbyggede implementeringer, der omtales som "pseudotyper" i PHP. Et lignende udtryk i sproget anvendes på enhver typedefinition, der ikke er uafhængig, gældende for en værdi, men som kun implementeres som en typekontrolinstruktion i Zend VM.
Pseudotyper inkluderer:
Ud over typetjek kan indbyggede "pseudotyper" implementere yderligere kontrollogik. For eksempel kan callableen type være repræsenteret:
PHP understøtter både erklæringen af navngivne funktioner og førsteklasses anonyme funktioner , for eksempel:
// Erklæring af en navngivet funktion funktion get_hello_world () : string { return 'Hello World!' ; } // Anonym funktionserklæring $getHelloWorld = funktion () : string { return 'Hello World!' ; }; // Kort syntaks $getHelloWorld = fn () : string => 'Hej verden!' ;Det er værd at bemærke, at ved anonyme funktioner er forskellen ikke kun i visuelle forskelle, men også i måden, hvorpå eksterne kontekstvariable fanges. Enhver "kort" form for notation er en lukning , mens en lang notation for at implementere en lukning kræver eksplicit specificering af variabler inde i operatøren usefra en ekstern kontekst for at fange dem:
$variable = 'Hej verden!' ; // Brug af sætningen use -funktionen () use ( $variable ) : string { return $variable ; }; // Alternativ, ved hjælp af kort fn () syntaks : string => $variabel ;Der tilgås variabler ved hjælp af symbolet $efterfulgt af variabelnavnet. Denne konstruktion kan også bruges til at skabe dynamiske variabler og funktioner. [41] For eksempel:
$a = 'Jeg er en' ; // Skriv værdi til $a ekko $a ; // Outputvariabel $a $b = 'a' ; ekko $$b ; // Vis variabel $a (ekstra $ før variabel $b) echo $ { 'a' }; // Outputvariabel $a funktionsnavn (); // Kald funktion function_name $c = 'funktionsnavn' ; $c (); //Kald funktion funktionsnavn $d = 'Klassenavn' ; $obj = nyt klassenavn ; // Opret et objekt af klassen Klassenavn $obj = new $d (); // Opret et objekt af klassen Klassenavn $obj -> b ; // Adgang til egenskab b af objektet $obj -> c (); // Kald objektets c() metode $obj -> $b ; // Adgang til a-egenskaben for objektet, da $b = 'a' $obj -> $c (); // Kald objektets funktionsnavn()-metode, da $c = 'funktionsnavn'I PHP echo, printselvom de ligner funktioner, er førstnævnte en [42] operator, og sidstnævnte er et udtryk (det vil sige, det printreturnerer en værdi, i modsætning til echo). Du kan udelade parenteserne, når du bruger dem.
Superglobale arrays i PHP er foruddefinerede arrays, der har et globalt omfang uden brug af direktivet . De fleste af disse arrays indeholder inputdata fra brugerens anmodning ( GET-anmodningsparametre , formularfelter, når de sendes med POST -metoden , cookies osv.). global
Alle superglobals, undtagen $GLOBALSog $_REQUEST, har forældede modstykker med lange navne, der er tilgængelige op til version 5.3. x (da 5.4.0 er blevet fjernet). Således er invokationerne af $_GET['year']og $HTTP_GET_VARS['year']identiske (bortset fra omfanget: arrays med "lange" navne er ikke superglobale).
$GLOBALS En række af alle globale variabler (inklusive brugere). $_SERVER(analog for forældet - $HTTP_SERVER_VARS) Indeholder miljøvariabler, som operativsystemet sender til serveren. $_ENV(mund $HTTP_ENV_VARS) Aktuelle miljøvariabler ( eng. Environment variables ). Deres sæt er specifikt for den platform, hvorpå scriptet kører. $_GET(mund $HTTP_GET_VARS) Indeholder parametrene for GET-anmodningen sendt i URI'en efter spørgsmålstegnet " ?". $_POST(mund $HTTP_POST_VARS) En associativ matrix af HTML-formularfeltværdier, når de indsendes ved hjælp af POST-metoden. Elementindekser svarer til værdien af en egenskab for nameobjekterne (knapper, formularer, alternativknapper, afkrydsningsfelter osv.) i HTML-formularen. $_FILES(mund $HTTP_POST_FILES) Et associativt array med information om filer sendt med POST-metoden. Hvert element har et indeks, der er identisk med værdien af "name"-attributten på formularen, og er til gengæld også et array med følgende elementer:Nøgleordet classvar reserveret i den tredje version af sproget. I den fjerde version blev det muligt at oprette klasser og objekter baseret på dem. OOP-principperne blev dog kun delvist understøttet, for eksempel var alle medlemmer (variabler og metoder) offentlige. Derudover var det dyrt og langsomt at skabe genstande.
PHP har fuld OOP- understøttelse siden version 5 . Arbejdet med klasser er blevet optimeret, og nu fungerer sådan kode ret hurtigt.
En klasse i PHP erklæres med class. Klassemetoder og egenskaber kan være offentlige ( public, standard), beskyttede ( protected) og skjulte ( private). PHP understøtter alle tre store OOP-mekanismer - indkapsling , subtype polymorfi og arv (moderklassen er angivet med et nøgleord extendsefter klassenavnet). Grænseflader er understøttet (kortlagt med implements). Erklæring af endelige , abstrakte metoder og klasser er tilladt. Multipel nedarvning af klasser understøttes ikke, men en klasse kan implementere flere grænseflader. Nøgleordet bruges til at få adgang til metoder i den overordnede klasse parent.
Siden version 5.4.0 kan multipel nedarvning implementeres ved hjælp af egenskabsmekanismen . Funktioner ligner mixins , bortset fra at de ikke kan instansieres direkte . Genbrug af kode ligger i brugen af funktionskode i flere klasser. Det er tilladt at bruge flere funktioner i én klasse. Funktionsmekanismen har et middel til at løse navnekonflikter. Når programmet køres, vil funktionens kode blive "kompileret" til koden for dens indeholdende klasse.
Klasser i PHP har en række "magiske" metoder ( eng. magic methods ), startende med to understregninger - en konstruktør ( __construct(), i versioner før 5.0 var konstruktøren en metode af samme navn som klassen) og en destruktor ( __destruct()), samt læse- ( __get()) og skrivemetoder ( __set()), folde ( __sleep()) og udvide ( __wakeup()), kloning ( __clone()) osv. Disse metoder er ret fleksible værktøj: ved at omdefinere dem, kan du opnå en væsentlig ændring i adfærden for objekt.
Alle medlemsfunktioner er implementeret som virtuelle og derfor er de alle metoder.
Forekomster af en klasse oprettes ved hjælp af nøgleordet new, et objekts egenskaber og metoder tilgås ved hjælp af operatoren ->. Variablen bruges til at få adgang til medlemmerne af en klasse fra dens metoder $this.
klasse C1 udvider C2 implementerer I1 , I2 { private $a ; beskyttet $b ; offentlig funktion __construct ( $a , $b ) { parent :: __construct ( $a , $b ); $this -> a = $a ; $this -> b = $b ; } public function plus () { return $this -> a + $this -> b ; } /* ............... */ } $d = ny C1 ( 1 , 2 ); echo $d -> plus (); // 3Siden PHP 5 sendes objekter ved reference:
klasse A { public $color = 'rød' ; } $a = nyA ( ); echo $a -> farve ; // rød $b = $a ; $b -> farve = 'blå' ; echo $a -> farve ; // blå"Paamayim Nekudotayim" ( hebraisk : פעמיים נקודתיים) eller blot "dobbelt kolon". Ved at bruge dette token kan programmøren få adgang til konstanter, statiske eller overbelastede egenskaber eller metoder for klassen. Når der henvises til disse elementer uden for klassen, skal programmøren bruge klassenavnet. "Paamayim Nekudotayim" kan ved første øjekast virke som en mærkelig sætning for et dobbelt tyktarm. Men under oprettelsen af Zend Engine version 0.5 (som var inkluderet i PHP3), valgte Andi og Zeev denne notation [43] . "Paamayim Nekudotayim" betyder virkelig "dobbelt kolon" (bogstaveligt: "dobbelt kolon") på hebraisk. Denne notation har aldrig ændret sig under udviklingen af PHP [44] .
class MyClass { public const CONST_VALUE = 'Konstant værdi' ; } // Brug af :: uden for klasseerklæringen echo MyClass :: CONST_VALUE ;PHP-scripts behandles normalt af tolken i en rækkefølge, der sikrer, at den udviklede applikation er på tværs af platforme :
Tidligere, for at øge ydeevnen af applikationer, var det muligt at bruge speciel software , de såkaldte acceleratorer . Princippet for deres operation er at cache en gang genereret bytekode i hukommelsen og/eller på disken , således er trin 1-3 udelukket fra ansøgningsprocessen, hvilket generelt fører til en betydelig fremskyndelse. Siden version 5.5 er en af acceleratorerne, opcache , blevet indbygget i kernen, så tredjepartsløsninger er ikke længere populære.
En vigtig funktion er, at udvikleren ikke behøver at bekymre sig om at allokere og frigøre hukommelse. PHP-kernen implementerer faciliteter til automatisk hukommelsesstyring; al allokeret hukommelse returneres til systemet efter at scriptet er afsluttet [45] .
Tolken består af en kerne og plug - ins , "udvidelser" , som er dynamiske biblioteker . Udvidelser giver dig mulighed for at supplere sprogets kernefunktioner og giver dig mulighed for at arbejde med databaser , sockets , dynamisk grafik , kryptografiske biblioteker, PDF -dokumenter og lignende. Enhver kan udvikle deres egen udvidelse og forbinde den. Der er et stort antal udvidelser, både standard og skabt af tredjepartsvirksomheder og entusiaster, men kun et par dusin velafprøvede er inkluderet i standardpakken. Mange udvidelser er tilgængelige i PECL- lageret .
Siden version 7.4.0 er FFI-understøttelse blevet tilføjet til PHP, hvilket i høj grad forenkler interaktionen med biblioteker skrevet på et hvilket som helst andet sprog (inklusive API'en leveret af operativsystemet). Denne nye funktionalitet gav til gengæld et alternativ til skriveudvidelser. Ved at bruge FFI kan du således skrive kode i PHP og interagere med alle biblioteker i systemet, der leverer cdecl, fastcalleller stdcall ABI .
PHP-fortolkeren har en speciel konfigurationsfil - php.ini, der indeholder mange indstillinger, der ændrer sig, hvilket påvirker tolkens adfærd [46] . Det er muligt at deaktivere brugen af en række funktioner, ændre grænserne for den RAM, der bruges af scriptet, eksekveringstiden, størrelsen af downloadede filer, konfigurere fejllogning, arbejde med sessioner og mailtjenester, tilslutte yderligere udvidelser og meget mere. Det er muligt at opdele en stor konfigurationsfil i dele. For eksempel er det almindelig praksis at lægge udvidelsesindstillinger i separate filer. Fortolkningsmulighederne kan tilsidesættes i HTTP-serverens konfigurationsfiler (for eksempel .htaccessi Apache ) eller i selve scriptet ved kørsel ved hjælp af kommandoen ini_set[47] .
SAPI er et eksternt abstraktionslag designet til at indlejre en fortolker i andre applikationer og er ansvarlig for dens drift (start, stop, videregivelse af scripts til udførelse, adgang til eksterne data). Der er flere hoved SAPI'er, der definerer, hvordan PHP kan køres og bruges:
Startende med PHP 5.4.0 har SAPI CLI mulighed for at køre PHP som en selvstændig HTTP-server. Denne tilstand er dog udelukkende til udvikling, da den kun kører én fortolkerproces og udfører alle forespørgsler på en rent sekventiel måde.
PHP har et par påskeæg (jokes). Overførsel af specielle GET-parametre til ethvert php-script resulterer i output af forskellige billeder.
For eksempel:
any_script.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42når du indtaster denne værdi i browserens adresselinje, kan du se forskellige billeder, afhængigt af tolkens version:
De følgende to værdier giver dig mulighed for at se henholdsvis standard PHP- og ZEND-logoet [49] :
any_script.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
any_script.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42Disse værdier kan også fås direkte i PHP-scriptet ved hjælp af funktionerne php_logo_guidog zend_logo_guidfor Zend-logoet.
Der er også en speciel værdi til at vise en liste over alle PHP (4,5) [49] forfattere :
any_script.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
På grund af PHP-sprogets popularitet og ønsket om at øge hastigheden af webapplikationer baseret på det , er der skabt flere alternative compilere , der er tæt på PHP-sproget. Så i februar 2010 åbnede Facebook [ 50] [51] sin PHP-kompiler - HipHop (HPHP, Hyper-PHP), der genererer C++-kode , efterfulgt af kompilering til maskinkode ved hjælp af gcc . I juli 2013 annoncerede det russiske firma VKontakte et lignende produkt, KPHP [52] .
Tabellen giver en liste over eksisterende alternative implementeringer.
Navn | PHP-version (ca.) | Licens | Kompileringsresultat |
---|---|---|---|
PHP | 7.4 | GPL | C++ , native kode |
hip hop | 5.4 | PHP-licens | C++ , native kode |
Roadsend PHP | 5.3 | GPL / LGPL | C , maskinkode |
Phalanger | 5.5 | Ms SS-PL [53] ( Delt kilde ) | Microsoft IL |
Quercus (en del af Resin -webserveren ) | 5.2 | GPL eller kommerciel | JVM |
PHC | 5.2 | BSDL | C , maskinkode |
Pipp [54] | 5.3 | Kunstnerisk licens og GNU GPL | Papegøje |
JPHP [55] | 7.1 (delvis 7.2, 7.3 og 7.4) [56] | Apache 2.0 | JVM |
PHP | 5.4 | MIT | PHP |
PH7 | 5.5 | Egen (Symisc Public License) | C , maskinkode |
HippyVM | 5.6 | MIT | RPython/PyPy |
En sammenlignende analyse af nogle compilere er tilgængelig på phpclasses.org [57] .
PHP er det mest populære sprog til udvikling af indholdsstyringssystemer (CMS).
Navn | Licens |
---|---|
Codelobster | Freeware |
Komodo | Mozilla tri-licens ( MPL / LGPL / GPL ) [58] |
phpstorm | Proprietær software |
PHP udviklingsværktøjer | Eclipse Public License |
zend studie | shareware |
Aptana Studio | GNU GPL |
phpdesigner | shareware |
PHP Expert Editor | Shareware [59] |
NetBeansIDE | CDDL |
RadPHP XE | forsøg |
NuSphere | forsøg |
KDevelop [60] | GNU GPL |
Microsoft Web Matrix | Freeware |
Notesblok++ | GNU GPL |
Sublim tekst | Proprietær software |
VS.Php til Visual Studio | Proprietær software |
PHP-værktøjer til Visual Studio | forsøg |
DevelNext | MPL-2.0 |
jEdit | GNU GPL -2.0 |
PHP Standard Recommendation ( forkortet PSR [ ) er en PHP-specifikation, der er udviklet, accepteret og udgivet af en gruppe autoritative PHP-projekter, herunder CakePHP, Composer , Joomla, PEAR , Phalcon, phpDocumentor , TYPO3, Yii framework [61] . Specifikationen tjener som en standardisering af PHP-programmeringskoncepter og er baseret på reel erfaring samt forskning og eksperimenter [62] . Formålet med anbefalingerne er at sikre kompatibiliteten af webapplikationskomponenter udviklet af forskellige udviklere.
Tilhængere af PHP-sproget nævner den udbredte brug, efterspørgslen efter PHP-udviklere på arbejdsmarkedet og nem læring som dets vigtigste fordele. Fordelene ved sproget inkluderer dets ret hurtige udvikling.
Understøttelse af strenge med multibyte-kodninger (såsom UTF-8 ) er implementeret gennem separate udvidelser , mbstringog iconvder er ingen understøttelse på kerneniveau, men siden PHP 4.2.0 er det muligt at tilsidesætte standardfunktionerne til at arbejde med strenge og erstatte dem med analoger fra mbstring. Understøttelse af multibyte-kodninger i alle strengfunktioner har været tilgængelig siden version 5.4.0 (marts 2012).
Sproget giver ikke mulighed for at oprette flertrådede applikationer, og der er ingen understøttelse af synkroniseret adgang til ressourcer, men det er implementeret ved hjælp af PCNTL-udvidelsen [63] (fra den engelske proceskontrol ), men det er ikke egnet til at løse specifikke problemer.
Selvom det er muligt at installere pthreads-udvidelsen til "ærlige" tråde, skal tolken til dette kompileres med trådsikkerhedsflaget, og selve udvidelsen er blevet forældet til fordel for parallel (fra samme forfatter).
Et mere moderne alternativ er at bruge Swoole-udvidelsen.
I sociale netværk | ||||
---|---|---|---|---|
Tematiske steder | ||||
Ordbøger og encyklopædier | ||||
|
PHP | |
---|---|
Mennesker | |
Ressourcer |
|
Implementeringer | |
Rammer | |
Afprøvning |
|
ORM | |
IDE |
|
Kompiler | Phalanger |
værktøjskasse | |
Kategori |
Programmeringssprog | |
---|---|
|
Gratis og open source software | |
---|---|
Det vigtigste |
|
Fællesskab |
|
Organisationer | |
Licenser | |
Problemer | |
Andet |
|
|
Web og hjemmesider | |
---|---|
globalt | |
Lokalt | |
Typer af websteder og tjenester |
|
Oprettelse og vedligeholdelse | |
Typer af layout, sider, websteder | |
Teknisk | |
Markedsføring | |
Samfund og kultur |
Interaktionsprotokoller | |
---|---|
Gateways |