PHP

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 2. oktober 2022; checks kræver 7 redigeringer .
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 .

Omfang

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 .

Yderligere funktioner

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.

Oprettelse af GUI-applikationer

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.

Udvidelser

Hovedanvendelsen af ​​udvidelser er at tilføje brugergrænsefladebiblioteker (UI-biblioteker).

Udvidelser er traditionelt opdelt i tre grupper:

  • PHP-udvidelser: WxPHP ( Windows , Linux , macOS ), Winbinder ( Windows );
  • wrappers, der bruger systemfunktioner ved hjælp af FFI-værktøjer: Win32Std, Tk;
  • wrappers til brug af kommandolinjegrænsefladen: PHP-UI, PHP-XCB.

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:

  • PHP4Delphi implementerer PHP-forbindelser til programmer skrevet i Delphi ved hjælp af WinAPI ; udviklet siden 1999, men ikke opdateret siden 2009, på grund af hvilke grene dukkede op;
  • PHP-udvidelsesudviklingsramme - et værktøj til at skabe PHP-udvidelser, VCL-komponenter er en integreret del af PHP4Delphi, hvis grundlæggende komponenter er nødvendige for at skabe applikationer;
  • php4Applications er en udvidelse til brug af PHP på andre sprog, baseret på PHP4Delphi, som giver adgang til makroer og forenkler brugen af ​​PHP ved at eliminere behovet for at oprette en wrapper.
Udviklingsmiljøer (IDE'er)

Der er også et sted for fuldgyldige udviklingsmiljøer til GUI PHP:

  • DevPHP

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.

  • CodeGear Rad Studio (udvidelse)

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.

  • DevelStudio (RAD)

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.

  • DevelNext (DN)

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.).

  • PHPQt

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.

  • WinForms PHP

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 projekt

Der 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)

Historie

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.

PHP 7

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 8

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

Syntaks

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).

Datatyper

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ække _
  • objekt _
  • ekstern ressource (ressource)
  • udefineret værdi (nul)

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å.

Skriver

Sproget 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:

  • blandet enhver type
  • iterable (array eller ethvert objekt, der implementerer iterator -grænsefladen ).
  • kan kaldes ( anonym funktion , streng eller array) [40]
  • void return type betyder ingen returnering fra funktionen
  • returner aldrig type, der angiver, at applikationen er afbrudt
  • self er en type, der refererer til den klasse, som denne type blev brugt i (du kan bruge aliaserne forælder eller statisk, men sidstnævnte er kun som en retur)
  • falsk type (bool-del), som kun kan bruges som et af elementerne i den såkaldte unionstype , f.eks.int|false

Ud over typetjek kan indbyggede "pseudotyper" implementere yderligere kontrollogik. For eksempel kan callableen type være repræsenteret:

  • en streng, der skal indeholde navnet på funktionen;
  • et array, hvor nul- og førsteelementerne er strenge (fortolket som navnet på en statisk klassefunktion);
  • et array, hvor nul-elementet er et objekt, og det første er en streng (fortolket som en metode på objektet).

Funktioner

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 ;

Adgang til variabler og funktioner

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.

Superglobals

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:
  • ['name'] er det originale navn på filen på brugerens computer.
  • ['type']er MIME -typen for filen  angivet af brugeragenten . PHP tjekker det ikke, og derfor er der ingen garanti for, at den angivne type er korrekt.
  • ['size'] — filstørrelse i bytes.
  • ['tmp_name'] — fuld sti til filen i den midlertidige mappe. Filen skal flyttes derfra ved hjælp af move_uploaded_file. PHP sletter uploadede filer fra den midlertidige mappe på egen hånd.
  • ['error'] - Fejlkode. Hvis filen blev indlæst korrekt, vil dette element være lig med 0 ( UPLOAD_ERR_OK).
$_COOKIE(mund $HTTP_COOKIE_VARS) Et associativt array med cookieværdier videregivet af brugeragenten . $_REQUEST Indeholder elementer fra arrays $_GET, $_POST, $_COOKIE. Fra PHP 4.1 inkluderer det $_FILES. $_SESSION(mund $HTTP_SESSION_VARS) Indeholder sessionsdata.

Objektorienteret programmering

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 (); // 3

Siden 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 ;

Funktioner af tolken

PHP-scripts behandles normalt af tolken i en rækkefølge, der sikrer, at den udviklede applikation er på tværs af platforme :

  1. kildekode leksikalsk analyse og tokengenerering ,
  2. syntaktisk analyse af modtagne leksemer,
  3. generere en opcode til en virtuel maskine (en slags bytekode ),
  4. optimering (for eksempel DCE ),
  5. udførelse af opkoden af ​​fortolkeren (uden at oprette en eksekverbar fil ), eller JIT-kompilering af resultatet med efterfølgende udførelse (et særligt flag er påkrævet i fortolkerindstillingerne for at aktivere JIT).

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

Udvidelser

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 .

Indstillinger

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

Tolkestarttilstande (SAPI)

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:

  1. Som et modul til webserveren (for eksempel til Apache - modulet mod_php). I dette tilfælde kører PHP-fortolkeren i miljøet for webserverprocessen. Webserveren styrer antallet af PHP-processer, der kører, og fortæller dem, hvilke scripts de skal køre.
  2. CGI SAPI. Brug af CGI betyder at starte en ny proces til at behandle hver anmodning. For at udføre et PHP-script kører webserveren ./php-cgi /path/to/script.php. Selve princippet om sådan brug indebærer, at PHP-fortolkeren kun udfører ét script, hvorefter det afslutter sit arbejde. Omkostningerne ved at starte en tolkeproces og initialisere den er meget ofte sammenlignelige eller endda højere end omkostningerne ved at udføre et PHP-script. For at løse dette problem blev FastCGI-tilstand introduceret i CGI SAPI. I denne tilstand kører PHP-fortolkeren som en uafhængig server, der behandler indgående anmodninger for at udføre PHP-scripts ved hjælp af FastCGI-protokollen, som gør det muligt at arbejde med enhver webserver, der understøtter denne protokol.
  3. FPM SAPI, kendt som php-fpm, er en anden implementering af FastCGI-protokollen. Oprindeligt skabt af Andrey Nigmatulin som en separat patch til brug på det sociale netværk Badoo. Denne implementering løste en række problemer, der forhindrede brugen af ​​CGI/FastCGI SAPI. Især blev det muligt at genstarte puljen af ​​PHP-tolke uden at miste anmodninger, køre flere pools under forskellige brugere, nødgenstart af tolke i tilfælde af problemer med dem, og et par andre fine tilføjelser. Efterfølgende arbejdede flere på patchen, en tilstand til dynamisk styring af antallet af kørende PHP-processer blev tilføjet (svarende til styring af antallet af processer i Apache-webserveren), og fra og med PHP 5.3.3 blev php-fpm inkluderet i PHP som en separat SAPI.
  4. Som et kommandolinjescript (CLI SAPI), som er en eksekverbar fil , der kaldes af brugeren fra kommandolinjen ; scriptet udføres i den kaldende brugers miljø. I dette tilfælde er det muligt at bruge PHP til at oprette klient GUI- applikationer [48] og løse administrative opgaver i UNIX , Linux , Microsoft Windows , Mac OS X og AmigaOS operativsystemer . Men i denne egenskab opnåede han ikke popularitet, hvilket gav håndfladen til Perl , Python og VBScript .

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.

Påskeæg

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-00AA001ACF42

når du indtaster denne værdi i browserens adresselinje, kan du se forskellige billeder, afhængigt af tolkens version:

  1. foto af Thies Arntzen (version 4.1.2, 4.2.2)
  2. foto af gravhund (ejer Stig Bakken ) (version 4.3.2, 4.3.3, 4.3.8 - 4.3.10)
  3. sort terrier foto (ejer Zeev Suraski ) (version 4.3.11, 4.4.0 - 4.4.4, 5.1.0, 5.1.2)
  4. foto af en kanin (version 4.3.1, 5.0.0, 5.0.3)
  5. forvrænget PHP-logo (version 5.1.3 - 5.2.13) [49]
  6. foto af en blå legetøjelefant med PHP-inskription (siden version 5.3.0) [49]

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-00AA001ACF42

Disse 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

Alternative implementeringer

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

Licensering

Økosystem

Rammer

Indholdsstyringssystemer

PHP er det mest populære sprog til udvikling af indholdsstyringssystemer (CMS).

Værktøjer til udvikling af PHP-applikationer

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-standardanbefalinger

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.

Kritik

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.

Manglende understøttelse af multibyte-kodninger i sprogkernen

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).

Mangel på multithreading-understøttelse

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.

Se også

Noter

  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. Version 8.1.12 - 2022.
  5. Google Grupper
  6. PHP: History of PHP - Manual
  7. https://fileinfo.com/extension/php
  8. 1 2 3 PHP: Forord - Manual
  9. Rasmus Lerdorf | PHP på hormoner - 2013.
  10. http://php.net/license/
  11. 1 2 3 PHP: History of PHP - Manual . Dato for adgang: 18. januar 2009. Arkiveret fra originalen 1. februar 2009.
  12. ↑ PHP : Forord - Manual  . Arkiveret fra originalen den 21. august 2011.
  13. 1 2 TIOBE Software: Tiobe Index . Hentet 2. november 2009. Arkiveret fra originalen 22. juni 2013.
  14. Historien om PHP og relaterede  projekter . Arkiveret fra originalen den 21. august 2011.
  15. PHP: Funktioner - Manual (21. juni 2009). Hentet 13. november 2009. Arkiveret fra originalen 21. august 2011.
  16. Rasmus Lerdorf. Jeg undrer mig over, hvorfor folk bliver ved med at skrive, at PHP nogensinde blev skrevet i Perl. Det har det aldrig været. #php  (engelsk) . @rasmus (20. juli 2012). Hentet 8. januar 2019. Arkiveret fra originalen 3. januar 2018.
  17. Savelyeva N. Forelæsning 1: Introduktion til PHP/PHP-programmeringssprog. Arkiveret 22. januar 2015 på Wayback Machine Intuit, 2005. ISBN 978-5-9556-0026-0
  18. Antal funktioner omskrevet med Unicode-understøttelse . Dato for adgang: 19. januar 2007. Arkiveret fra originalen 19. januar 2007.
  19. News.txt-filen fra PHP 6-distributionen (downlink) . Dato for adgang: 19. januar 2007. Arkiveret fra originalen 12. december 2008. 
  20. PHP 6 Aktuelt udført og efterslæb . Hentet 7. april 2008. Arkiveret fra originalen 18. april 2008.
  21. Komplet liste over planlagte ændringer i december 2005 . Hentet 12. august 2006. Arkiveret fra originalen 12. august 2006.
  22. Hvordan PHP6 døde Arkiveret 13. oktober 2011 på Wayback Machine // amiro.ru
  23. PHP RFC: Navn på næste udgivelse af PHP . Hentet 28. marts 2015. Arkiveret fra originalen 3. juli 2017.
  24. PHP RFC: PHP 7.0 tidslinje . Dato for adgang: 28. marts 2015. Arkiveret fra originalen 17. marts 2015.
  25. ↑ PHP 7 fedeste funktioner : Rumskibe, Typetip, 2X hastighed  . www.zend.com. Hentet 6. juli 2017. Arkiveret fra originalen 8. juli 2017.
  26. PHP: Nyhedsarkiv - 2015 . Dato for adgang: 12. december 2015. Arkiveret fra originalen 12. december 2015.
  27. PHP: rfc:phpng . php.net . Dato for adgang: 16. december 2014. Arkiveret fra originalen 19. oktober 2014.
  28. RFC: Returtyper . php.net . Hentet 28. marts 2015. Arkiveret fra originalen 17. juli 2017.
  29. RFC: Skalartypedeklarationer . php.net . Hentet 28. marts 2015. Arkiveret fra originalen 7. juli 2017.
  30. PHP: Nye funktioner - Manual . Hentet 2. maj 2020. Arkiveret fra originalen 2. maj 2020.
  31. PHP: Nyhedsarkiv - 2020 . Hentet 29. november 2020. Arkiveret fra originalen 13. oktober 2020.
  32. Hvad er nyt i PHP 8 - stitcher.io . Hentet 3. maj 2020. Arkiveret fra originalen 19. maj 2020.
  33. PHP: rfc: union_types_v2 . Hentet 3. maj 2020. Arkiveret fra originalen 1. april 2020.
  34. PHP:rfc:jit . Hentet 3. maj 2020. Arkiveret fra originalen 18. maj 2020.
  35. Dale Hirt - Microsoft Support af PHP på Windows Arkiveret 16. juli 2020 på Wayback Machine 
  36. Windows 10 stopper med at understøtte PHP Arkiveret 16. juli 2020 på Wayback Machine  (russisk)
  37. Microsoft understøtter ikke PHP 8.0 til Windows . Hentet 16. juli 2020. Arkiveret fra originalen 17. juli 2020.
  38. Opbygning  af PHP . PHP interne bog. Hentet 1. marts 2022. Arkiveret fra originalen 8. maj 2021.
  39. ↑ RE2C : En lexer-generator baseret på lookahead-TDFA  . Softwarepåvirkninger. Hentet 1. marts 2022. Arkiveret fra originalen 27. januar 2022.
  40. PHP: Tilbagekaldsfunktioner (tilbagekaldsfunktioner) - Manual . secure.php.net. Hentet 27. februar 2019. Arkiveret fra originalen 28. februar 2019.
  41. PHP: Variable variabler - Manual . Hentet 17. december 2008. Arkiveret fra originalen 11. maj 2008.
  42. PHP: echo - Manual . Dato for adgang: 14. januar 2010. Arkiveret fra originalen 24. februar 2009.
  43. Tilsyneladende lånt fra C++ sproget , hvor det er den binære form for at specificere omfanget , en konstruktion med det, et kvalificeret navn , i dette tilfælde en konstant.
  44. http://php.net/manual/da . Hentet 25. marts 2010. Arkiveret fra originalen 12. juni 2010.
  45. PHP: Grundlæggende hukommelseshåndtering - Manual (13. november 2009). Hentet 17. november 2009. Arkiveret fra originalen 21. august 2011.
  46. PHP: php.ini-direktiver - Manual  ( 6. november 2009). Hentet 13. november 2009. Arkiveret fra originalen 21. august 2011.
  47. PHP: Liste over php.ini-direktiver - Manual  ( 6. november 2009). Hentet 13. november 2009. Arkiveret fra originalen 21. august 2011.
  48. PHP: Brug af PHP på kommandolinjen - Manual (21. juni 2009). Hentet 13. november 2009. Arkiveret fra originalen 21. august 2011.
  49. 1 2 3 4 PHP Påskeæg  . Hentet 16. november 2009. Arkiveret fra originalen 21. august 2011.
  50. HipHop til PHP: Bevæg dig hurtigt
  51. Facebook har åbnet koden til en højtydende PHP-oversætter . Hentet 3. februar 2010. Arkiveret fra originalen 6. februar 2010.
  52. Pavel Durov og kolleger udviklede en forbedret version af PHP . Hentet 2. januar 2014. Arkiveret fra originalen 12. december 2013.
  53. Licenstekst _ 
  54. Projektet er i en eksperimentel fase
  55. Projektet er i den eksperimentelle fase. Seneste version 1.3.1 (fra juli 2020)
  56. jphp-group/  jphp . GitHub. Hentet 18. november 2018. Arkiveret fra originalen 5. oktober 2018.
  57. PHP compiler ydeevne . Hentet 1. marts 2010. Arkiveret fra originalen 26. februar 2010.
  58. Komodo IDE er et professionelt udviklingsmiljø for Perl, Python, Tcl | ActiveState (downlink) . Hentet 22. november 2011. Arkiveret fra originalen 20. december 2008. 
  59. Gratis registrering for exUSSR-borgere tilbydes
  60. PHP-understøttelse til KDevelop 4 (og i sidste ende Quanta+) | Millian Wolff . Dato for adgang: 11. december 2010. Arkiveret fra originalen 2. januar 2011.
  61. Personale  . _ Hentet 1. august 2020. Arkiveret fra originalen 2. juni 2020.
  62. ↑ Mission og struktur  . Hentet 1. august 2020. Arkiveret fra originalen 1. august 2020.
  63. PCNTL . Dato for adgang: 23. januar 2012. Arkiveret fra originalen 17. januar 2012.

Litteratur

  • Matt Zandstra. PHP: Objects, Patterns and Practices = PHP Objects, Patterns and Practice, tredje udgave. — 3. udgave. - M . : " Williams ", 2010. - S. 560. - ISBN 978-5-8459-1689-1 .
  • Christian Dari, Emilian Balanescu. PHP og MySQL: Opbygning af en onlinebutik = Begyndelse af PHP og MySQL e-handel: Fra nybegynder til professionel. - M . : " Williams ", 2010. - ISBN 978-5-8459-1602-0 .
  • Jason Langstorf. PHP og jQuery for professionelle = Pro PHP og jQuery. - M . : " Williams ", 2010. - S. 352. - ISBN 978-5-8459-1693-8 .
  • Quentin Zervas. Web 2.0: Opbygning af applikationer med PHP = Praktiske Web 2.0 applikationer med PHP. - M . : " Williams ", 2009. - S. 544. - ISBN 978-5-8459-1590-0 .
  • Kuznetsov Maxim, Simdyanov Igor. PHP 5/6. - Sankt Petersborg. : " BHV-Petersburg ", 2009. - S. 1024. - ISBN 978-5-9775-0304-4 .
  • Kuznetsov Maxim, Simdyanov Igor. Objektorienteret programmering i PHP. - Sankt Petersborg. : " BHV-Petersburg ", 2007. - S. 608. - ISBN 978-5-9775-0142-2 .
  • Ed Lecky-Thompson, Alec Kove, Stephen Nowitzki, Hyao Eyde-Goodman. PHP 5 for professionelle = Professionel PHP 5. - M . : " Dialektik ", 2006. - S. 608. - ISBN 0-7645-7282-2 .
  • Kuznetsov Maxim, Simdyanov Igor. PHP Tutorial 5/6. - 3. udg., revideret. og yderligere - Sankt Petersborg. : " BHV-Petersburg ", 2009. - S. 672. - ISBN 978-5-9775-0409-6 .
  • Kuznetsov Maxim, Simdyanov Igor. PHP. Praksis med at skabe websteder. - 2. udg. revideret og yderligere - Sankt Petersborg. : " BHV-Petersburg ", 2008. - S. 1264. - ISBN 978-5-9775-0203-0 .
  • Kuznetsov Maxim, Simdyanov Igor. PHP-puslespil til hackeren. - 2. udg. revideret og yderligere - Sankt Petersborg. : " BHV-Petersburg ", 2008. - S. 544. - ISBN 978-5-9775-0204-7 .
  • Kuznetsov Maxim, Simdyanov Igor. PHP med eksempler. - 2. udg. revideret og yderligere - Sankt Petersborg. : " BHV-Petersburg ", 2011. - S. 400. - ISBN 978-5-9775-0445-4 .
  • Luke Welling, Laura Thomson. Udvikling af webapplikationer med PHP og MySQL. - 5. udgave - Sankt Petersborg. : " Dialektik ", 2019. - S. 768. - ISBN 978-5-9908911-9-7 .
  • Luke Welling, Laura Thomson. PHP & MySQL webudvikling. — femte udgave. - " Addison-Wesley ", 2017. - S. 687. - ISBN 978-0-321-83389-1 .
  • Zandstra M. PHP. Objekter, mønstre og programmeringsteknikker. - 4. udgave - Sankt Petersborg. : " Dialektik ", 2015. - S. 576. - ISBN 978-5-8459-1922-9 .
  • Zandstra M. PHP. Objekter, mønstre og programmeringsteknikker. - 5. udgave - Sankt Petersborg. : " Dialektik ", 2019. - S. 736. - ISBN 978-5-907144-54-5 .
  • Zandstra M. PHP-objekter, mønstre og praksis . — 5. udgave. - " Apress ", 2016. - S.  583 . — ISBN 978-1-4842-1995-9 .
  • Nixon R. Opbygning af dynamiske websteder med PHP, MySQL, JavaScript, CSS og HTML5. - 4. udgave - Sankt Petersborg. : " O'Reilly Bestsellers ", 2016. - S. 768. - ISBN 978-5-496-02146-3 .
  • Ulman, Larry. PHP og MySQL: oprettelse af onlinebutikker. - 2. udg. - Sankt Petersborg. , 2015. - S. 544. - ISBN 978-5-8459-1939-7 .
  • Kuznetsov M., Simdyanov I. Selvinstruktionsmanual PHP 7. - 2. udg. - Skt. Petersborg. , 2018. - S. 448. - ISBN 978-5-9775-3817-6 .

Links