PHP | |
---|---|
Språkklass | multiparadigm , objektorienterad , imperativ |
Framträdde i | 8 juni 1995 [5] [6] |
Författare | Rasmus Lerdorf [3] |
Utvecklaren | Rasmus Lerdorf [1] , Andy Gutmans [1] , PHP Group [d] , Zend Technologies [2] och Zeev Sourasky |
Filtillägg _ | .php[7] |
Släpp |
|
Blivit påverkad | C ++ , Perl [8] , SI [8] , Java [8] , TCL [9] , HTML och JavaScript |
Licens | PHP-licens [10] |
Hemsida | Php.net ( engelska) |
OS | Unix-liknande operativsystem och Microsoft Windows |
Mediafiler på Wikimedia Commons |
PHP ( /pi:.eɪtʃ.pi:/ Engelska PHP: Hypertext Preprocessor - "PHP: hypertext preprocessor "; ursprungligen PHP / FI (Personal Home Page / Form Interpreter), och senare kallad Personal Home Page Tools [11] - " Tools för att skapa personliga webbsidor ”) -C-liknande skriptspråk [12] av allmänt syfte, intensivt använt för att utveckla webbapplikationer. Stöds för närvarande av de allra flesta värdleverantörer och är en av de ledande bland språk som används för att skapa dynamiska webbplatser [13] .
Språket och dess tolk ( Zend Engine ) utvecklas av en grupp entusiaster som en del av ett projekt med öppen kod [14] . Projektet distribueras under sin egen licens som är inkompatibelt med GNU GPL .
Inom området webbprogrammering, i synnerhet serversidan, är PHP ett av de populära skriptspråken (tillsammans med JSP , Perl och språken som används i ASP.NET ).
Populariteten inom området för att bygga webbplatser bestäms av närvaron av en stor uppsättning inbyggda verktyg och ytterligare moduler för att utveckla webbapplikationer [15] . De viktigaste är:
Används av hundratusentals utvecklare från och med 2010-talet; Enligt TIOBEs rankning baserad på sökmotordata låg PHP i maj 2016 på 6:e plats bland programmeringsspråken [13] .
Ingår i LAMP - en vanlig uppsättning mjukvara för att skapa och vara värd för webbplatser ( Linux , Apache , MySQL , PHP), samt LEMP - en lika vanlig uppsättning mjukvara ( Linux , Nginx , MySql , PHP).
Webbplatser som använder PHP inkluderar Facebook , Wikipedia , Yahoo! , Baidu .
Språket stöder automatiskt HTTP-COOKies i enlighet med Netscapes standarder. Detta gör att du kan ställa in och läsa små segment av data på klientsidan. Arbetet med cookies organiseras genom sessioner (sessioner). Sessioner har ett utgångsdatum (efter att det löper ut raderas data), i sessioner kan du lagra och redigera olika typer av data, inklusive serialiserade - passerade genom serialize (processen sker automatiskt), PHP-objekt.
PHP är inte fokuserat på att skapa skrivbordsapplikationer, men det finns ett behov av att skapa gränssnitt för att sätta upp servrar, kontinuerlig exekvering, felsökning av skript (skript), hantera lokala och testservrar etc. På grund av detta uppstod lösningar på detta problem.
TilläggDen huvudsakliga användningen av tillägg är att lägga till användargränssnittsbibliotek (UI-bibliotek).
Tillägg är villkorligt indelade i tre grupper:
Tillägg, såsom en tvåvägs omslag, har utvecklats för att använda andra språk när du skriver PHP-tillägg, och vice versa. Till exempel är PSV Component Library ett projekt som består av tre delprojekt:
Det finns en plats för fullfjädrad utvecklingsmiljö för GUI PHP:
En pionjär i denna kategori är DevPHP-IDE-studion, som använde Kylix ( Delphi ) som ryggraden i gränssnittet och phpcli för att bygga anpassade program.
Den innehöll en kodredigerare, flera verktyg och en visuell HTML-visare.
Den introducerades först 2002, nu har den 3 stabila versioner, men utvecklingen fortsätter inte - den stoppades på grund av huvudutvecklarens död i en bilolycka.
Efter DevPHP IDE dök en tillägg upp - en uppsättning komponenter för CodeGear Rad Studio 2009 baserad på php4delphi med några förbättringar (webbelement, inspektör, debugger), dess stöd varade i fyra versioner, varav den andra ingick i den betalda tillägget Rad Studio 2010 : det fanns en möjlighet att använda skript, stil webbkomponenter, visa stilar och webbsidor innan programmet byggdes, köra en lokal server, bygga programmet som en fristående applikation och felsöka koden. Med utdata från Delphi XE kallas expansionen Radphp XE. Dessutom blev studion känd som Embarcadero Delphi, och arbetet med denna förlängning avbröts på obestämd tid.
2009, på basis av php4delphi, började utvecklingen av en miljö för att skapa grafiska PHP-applikationer, som senare fick sällskap av Rostislav Romanov. Miljön kallades PHP DevelStudio, den första publicerade versionen var 0.1.7. DevelStudio hade ett litet antal komponenter i verktygslådan och körde på föråldrade PHP 4. I den andra versionen fick DevelStudio stöd för PHP 5. Strömmar lades till och många ändringar och förbättringar gjordes. Monteringskoden för program har stängts, tidigare versioner av programmet och meddelanden på forumet har tagits bort för att förhindra inkräktare.
Den andra versionen av DevelStudio fick också en uppsättning AlphaControls-komponenter, som ett resultat av vilka den användes för att skapa skadlig programvara på grund av dess enkelhet och tydlighet. Populära antivirus vid den tiden (MacAffee, AVG , Avira ) började känna igen alla program som kompilerades i DevelStudio som virus.
Efter en tid lämnade författaren till AlphaControls ett klagomål till utvecklarna av DevelStudio, och uppsättningen komponenter togs bort helt från miljön, men den bevarades i en redan befintlig version, som inte kunde tas bort från forumet den här gången .
Vid tiden för 2012 släpptes den senaste versionen av miljön - 3.0.2, där en ny uppsättning komponenter dök upp, inklusive Chromium- webbläsaren istället för IE , som väckte uppmärksamhet från webbutvecklare och användare av Algoritm-miljön. På den tiden var det betalt för att kompilera program i Algorithm, så DevelStudio, som en ny och gratis utvecklingsmiljö, lockade de flesta av publiken till sig.
2014 började de första försöken att återställa miljön, denna gång av samhället . I slutet av 2018 återställdes källkoden och var tillgänglig i GitHub .
Under 2019 kontaktade communityn skaparen av DevelStudio för att ändra miljöns distributionspolicy och göra den tillgänglig för uppdatering och redigering. På grund av klagomål om bristen på länkar till biblioteken som används (DCEF, PHP4Delphi, TSizeCtrl, SynEdit), togs forumet bort och en av sidorna som beskriver miljön omdirigerades till sidans huvudsida. Från och med nu ägs DevelStudio officiellt av communityn.
Parallellt med detta började huvudutvecklaren DevelStudio skapa en "reinkarnation" av den tidigare miljön. Han tog JavaFX -grafikbiblioteket som bas , vilket resulterade i en helt ny miljö, med CSS- stöd , men utan fullt stöd för Zend PHP- biblioteket - projektet baserades på ett eget jPHP-språk. Dess funktioner är arbete med JVM , JIT -kompilator, Unicode - stöd , multithreading och ett objektorienterat standardbibliotek.
I den 16:e versionen fick DevelNext-miljön stöd för php 7, och parallellt med detta utökades jPHP av en entusiast för utveckling under Android OS .
För tillfället arbetar författaren och entusiaster på 2020 års version (tidigare 17:e).
2015 började Alexander Kazantsev studera algoritmer för gränssnittsutveckling och skapade tillägget php_qml, som gjorde det möjligt att använda widgets från QT-biblioteket, men det fungerade bara under Windows.
Med detta började utvecklingen av PHPQt, de första versionerna ägnade inte mycket uppmärksamhet från webbutvecklare, så författaren började förbättra tillägget på djupet.
Den 28 juli 2015 publicerades den första versionen av projektkompilatorn, vid den tiden var det en enkel script (script) executor som kopplade php-kod till stubben (som DevelStudio), och hade ett beroende av Windows API, kl. I detta skede stöddes nästan alla widgets och multithreading, det var en enkel optimering av php-koden. Från det ögonblicket hette motorn PQEngine,
Den 3 augusti 2016 släpptes den femte versionen av applikationskompilatorn (PqBuilder), som bytte till PlastiQ-basen och hade stöd för de senaste, vid den tiden, php 7, projekten fick en mer komplett kompilator och krävde inte längre närvaron av PqEngine.dll nära den körbara filen, istället Denna visuella bibliotek började läggas till dynamiskt - som filer, och inte sys in i PQEngine.dll. Detta steg togs för kompatibilitet med andra system och de ursprungliga Qt-biblioteken.
Med tillkomsten av den sjätte versionen blev projektet ett tillägg till Qt Studio-miljön, och kompilatorn blev bara en kodoptimerare innan den slutliga monteringen av programmet. En fullfjädrad gränssnittsredigerare dök upp, tips i kodredigeraren och dokumentation började skapas. Från det ögonblicket gjorde de ett tillkännagivande om skapandet av PqStudio-miljön, men dess utveckling gick inte långt.
Under 2018 dök ett projekt upp som kombinerar funktionerna i Windows Forms (.NET Framework) och PHP 7. Dess utveckling pågår fortfarande i långsam takt.[ när? ] . För tillfället finns nästan allt i motorn[ vad? ] funktioner för OOP. Miljön är under privat utveckling. Den körbara standarden kommer med php7ts.dll.
Ansluter PHP till ett projektDet finns också tillägg för motsatt användning - att koppla PHP till ett projekt i ett annat programmeringsspråk: Phalanger (C#, php från 5.4 till 7), Peachpie] (C#, php 7), PHP4Delphi (Lazarus, Delphi, C#, C, C++ , php 5.6, JPHP (Java, php 7.0), PHPly (Python, php 5.6)
1994 utvecklade den danske programmeraren Rasmus Lerdorf i C [16] en uppsättning CGI-skript för att ta hänsyn till besökare på hans online- CV , som bearbetar HTML - dokumentmallar. Lerdorf kallade uppsättningen Personal Home Page Tools (Verktyg för en personlig hemsida ). Snart räckte inte funktionaliteten längre, och Lerdorf utvecklade en ny PHP/FI -malltolkare ( Engelsk personlig startsida/formulärtolk – “personlig hemsida/formulärtolk”) [17] .
Den 8 juni 1995 släpptes version 1.0 av Personal Home Page (PHP Tools) - den första offentliga utgåvan.
1997 , efter en lång betatestning, släpptes den andra versionen av hanteraren skriven i C - PHP / FI 2.0. Den användes av cirka 1 % (ungefär 50 tusen) av alla internetdomäner i världen [11] .
PHP 3.0 har genomgått en betydande översyn som definierar det moderna utseendet och stilen på programmeringsspråket. 1997 skrev två israeliska programmerare, Andy Gutmans och Zeev Suraski , om tolkkoden helt och hållet. PHP 3.0 släpptes officiellt i juni 1998 [11] .
En av styrkorna med PHP 3.0 var möjligheten att utöka kärnan med ytterligare moduler. Därefter lockade tilläggsskrivgränssnittet många tredjepartsutvecklare till PHP som arbetar med sina moduler, vilket gjorde det möjligt för PHP att arbeta med ett stort antal databaser , protokoll och stödja ett stort antal API:er . Ett stort antal utvecklare ledde till den snabba utvecklingen av språket och den snabba tillväxten av dess popularitet. Från och med den här versionen står php- akronymen för "PHP: hypertext Preprocessor", istället för den föråldrade "Personal Home Page".
Vintern 1998, nästan omedelbart efter den officiella releasen av PHP 3.0, började Andy Gutmans och Zeev Suraski omarbeta PHP-kärnan. Målen inkluderade att öka prestandan för komplexa applikationer och förbättra modulariteten i PHP-kodbasen. Den nya motorn, kallad Zend Engine , klarade uppgifterna framgångsrikt och introducerades först i mitten av 1999 . PHP 4.0 , baserat på denna motor och för med sig en uppsättning ytterligare funktioner, släpptes officiellt i maj 2000 . Förutom prestandaförbättringar hade PHP 4.0 flera andra nyckelinnovationer, såsom sessionsstöd, outputbuffring , säkrare sätt att hantera användarinmatning och flera nya språkkonstruktioner.
Den femte versionen av PHP släpptes av utvecklarna den 13 juli 2004 . Ändringar inkluderar Zend ( Zend Engine 2 ) kärna, som avsevärt ökade effektiviteten hos tolken . Introducerat stöd för XML -markeringsspråk . Funktionerna i OOP är helt omgjorda , som har blivit i stort sett likna den modell som används i Java . I synnerhet introducerades förstöraren , öppna, stängda och skyddade medlemmar och metoder , slutliga medlemmar och metoder, gränssnitt och kloningsobjekt. I efterföljande versioner infördes också mellanrummen för namn , stängning och ett antal ganska allvarliga ändringar, kvantitativt och kvalitativt jämförbara med de som dök upp under övergången till PHP 5.0.
Den sjätte versionen av PHP har varit under utveckling sedan oktober 2006 [18] . Många innovationer har gjorts [19] [20] , som att ta bort POSIX reguljära uttryck och "långa" superglobals från kärnan, och att ta bort direktiven safe_mode , magic_quotes_gpc och register_globals från php.ini- konfigurationsfilen. En av de viktigaste innovationerna var tänkt att vara stöd för Unicode [21] . Men i mars 2010 ansågs utvecklingen av PHP6 inte lovande [22] på grund av svårigheter med Unicode-stöd. PHP6-källkoden har flyttats till , och version 5.4 har blivit huvudlinjen i utvecklingen.
2014 hölls en omröstning, vilket ledde till att nästa version kallades PHP 7 [23] . Släppningen av den nya versionen var planerad i mitten av oktober 2015 [24] . I mars 2015 presenterade Zend infographics , som beskriver de viktigaste innovationerna i PHP 7 [25] .
Den 3 december 2015 tillkännagavs lanseringen av PHP version 7.0.0 [26] .
Den nya versionen är baserad på den experimentella grenen av PHP, som ursprungligen kallades PHPNG ( engelska Php Next Generation "The next generation"), och utvecklades med tonvikt på att öka produktiviteten och minska minnesförbrukningen [27] . Den nya versionen lägger till möjligheten att indikera vilken typ av data som returneras från datan [28] , kontrollen av överförda typer för data lades till [29] , liksom nya operatörer.
Den 13 juni 2019 släpptes PHP 7.4. Typiska egenskaper och valdeltagande funktioner lades till kärnan, såväl som den begränsade kovarianen av den returnerade typen och förfalskningstypen av argument [30] .
PHP version 8.0 släpptes den 26 november 2020 [31] . De viktigaste innovationerna var [32] : stöd för unionstyp [33] , JIT-kompilering [34] och attribut (även känd som annoteringar), Switchs "struktur" ersattes med "expression" MATCH och den nya NULLSAFE-operatören lades till .
Den 9 juli 2020 släppte Dale Hirt , PHP Project Manager på Microsoft, ett meddelande [35] i en e-postlista som säger att efter lanseringen av PHP 8.0 kommer Microsoft att sluta stödja utvecklingen av detta programmeringsspråk för Windows [36] . Microsoft-specialister kompilerade binära versioner av tolken för Windows och testade deras säkerhet. PHP-utvecklargemenskapen rapporterade att de skulle vidta alla nödvändiga åtgärder för att hitta ett alternativt alternativ för att organisera stöd för PHP 8.0 och högre för Windows inom en snar framtid, till exempel på egen hand [37] . php.internals
Syntaxen för PHP liknar den för C- språket . Vissa element, som associativa arrayer och loopen foreach, är lånade från Perl .
Den lexikaliska analysen av PHP utförs med hjälp av verktyget RE2C [38] [39] , verktyget genererar snabba och lätta inbyggda föreläsningar.
För att skriva det enklaste skriptet, är det inte nödvändigt att beskriva några variabler som används moduler, etc. Alla skript kan börja direkt med operatorn <?php.
Det enklaste Hello world-programmet i PHP ser ut så här:
<?php Echo "HEJ, värld!" ; ?>En kortare version av strängutgången är också möjlig:
<?= 'Hej världen!' ?>Taggen för öppningsvy <?=används för att förkorta de konstruktioner som används för att visa en linje.
PHP exekverar koden inuti limiters, såsom <?php ?>. Allt utanför gränserna matas ut oförändrat. Detta används främst för att infoga PHP-koden i HTML-dokumentet, till exempel enligt följande:
< html > < huvud > < Titel > Testar PHP </ title > </ head > < body > <?php echo 'Hej världen!'; ?> </ body > </ html >Förutom avgränsare <?php ?>är det tillåtet (men erkänt som föråldrat och praktiskt taget inte använt) användning av en förkortad version <? ?>. Dessutom, före version 7.0, ASP <% %> och <script language="php"> </script>. Genvägars arbete definieras i php .ini -konfigurationsfilen .
Variablernas namn börjar med symbolen $, typen av variabel behöver inte deklareras. Namnen på variabler och konstanter är känsliga för teckenregistret. Namn på klasser, klassmetoder och funktioner är inte skiftlägeskänsliga. Varier bearbetas i rader omslutna av dubbla citattecken och en HREDOC -Stocks (rader skapade med operatorn <<<). Variabler i strängar omslutna av enkla citattecken och nowdoc tolkas inte.
Påståenden separeras med semikolon ( ;), förutom i vissa fall efter deklarationen av if/else-konstruktioner och loopar.
Variationer till funktionen kan överföras både med värde och genom referens (tecknet används &).
PHP stöder tre typer av kommentarer: i stil med SI (begränsad /* */), C ++ (startar C //och går till slutet) och UNIX-skal ( C #till slutet av raden).
PHP är ett dynamiskt skrivet programmeringsspråk som inte kräver att en typ anges när variabler deklareras, såväl som själva variabeldeklarationen.
Skalära datatyper inkluderar:
Icke-skalära typer inkluderar:
Omfånget av heltal (int) i PHP beror på plattformen (för en 32-bitars arkitektur överstiger inte talintervallet int32_t, det vill säga från -2 147 483 648 till 2 147 483 647). Siffrorna kan ställas in i decimala, åttakantiga och hexadecimala talsystem. Omfånget av materialnummer (Float) beror också på plattformen (för en 32-bitars arkitektur låter området dig arbeta med tal från ± 1,7 × 10 −308 till ± 1,7 × 10 +308 ).
PHP ger utvecklare en logisk typ (Bool), som bara kan ta två värden true("sanning") och false("lögner"). Vid konvertering till en logisk typ anses talet 0, tom rad, noll på raden "0" nulloch en tom array vara lika false. Alla andra värden konverteras automatiskt till true.
Specialtypen null är för variabler utan ett definierat värde. Det enda värdet av denna typ är en bokstavlig null. Null-typen accepterar oinitierade variabler, variabler initierade med en konstant null, samt variabler som raderas med hjälp av unset().
Länkar till externa resurser är av typen resurs. Att variera denna typ är som regel en deskriptor som tillåter externa objekt, såsom filer, dynamiska bilder, vilket resulterar i databastabeller, etc. När språket utvecklas förfinas standardbiblioteket gradvis och resurser ersätts av objekt. Således är det planerat att helt bli av med denna typ.
Arrayer (array) stöder numeriska och strängtangenter och är heterogena . Matriser kan innehålla värden av vilken typ som helst, inklusive andra matriser. Ordningen på elementen och deras nycklar bevaras. Det är inte helt korrekt att kalla php-arrays-arrayer, i själva verket är det med största sannolikhet en ordnad hash . Oväntat beteende är möjligt när du använder en slinga formed en räknare istället för foreach. Så, till exempel, när man sorterar en array med numeriska index efter funktioner från standardbiblioteket, sorteras nycklarna också.
SkriverSpråket tillåter typifiering av argument, de returnerade värdena för funktioner och metoder för klasser , såväl som, från och med version 7.4, typifiering av klassfält . Införandet av ett strikt läge kopplar bort implicita transformationer av typer i dessa kodområden, vilket för språkets beteende till språk med strikt typificering .
Typer,,, inteller är stringtillåtna definitioner av typen av argument float, fältfält eller returnerat värde. Det är också tillåtet att använda namnen på klasser eller gränssnitt för att bestämma en specifik implementering. Användning för att bestämma typen är inte tillåten, och indikeringen är möjlig med begränsningar: endast inom ramen för att bestämma typen-shum , till exempel (eller ). boolarrayobjectresourcenullint|null?int
Modern PHP implementerar grundläggande stöd för algebraiska datatyper och tillåter både konjunktion och disjunktion att användas när en typ definieras. Språket tillåter inte typalias , men det tillhandahåller flera inbyggda implementeringar som kallas "pseudotyper" inom PHP. En liknande term i språket tillämpas på vilken typdefinition som helst som inte är oberoende, tillämplig på ett värde, men som endast implementeras som en typkontrollinstruktion i Zend VM.
Pseudotyper inkluderar:
Förutom typkontroller kan inbyggda "pseudotyper" implementera ytterligare kontrolllogik. Till exempel kan callableen typ representeras:
PHP stöder både deklarationen av namngivna funktioner och förstklassiga anonyma funktioner , till exempel:
// Deklaration av en namngiven funktion funktion get_hello_world () : string { return 'Hello World!' ; } // Anonym funktionsdeklaration $getHelloWorld = funktion () : string { return 'Hello World!' ; }; // Kort syntax $getHelloWorld = fn () : string => 'Hej världen!' ;Det är värt att notera att när det gäller anonyma funktioner är skillnaden inte bara i visuella skillnader, utan även i sättet som externa kontextvariabler fångas upp. Varje "kort" form av notation är en stängning , medan en lång notation för att implementera en stängning kräver explicit specificering av variabler inuti operatören usefrån ett externt sammanhang för att fånga dem:
$variable = 'Hej världen!' ; // Använda satsen use function () use ( $variable ) : string { return $variable ; }; // Alternativ, med kort fn () syntax : string => $variabel ;Variabler nås med hjälp av symbolen $följt av variabelnamnet. Denna konstruktion kan också användas för att skapa dynamiska variabler och funktioner. [41] Till exempel:
$ A = 'jag är en' ; // Skriv värde till $a echo $a ; // Utdatavariabel $a $ b = 'a' ; echo $ b ; // Visa variabel $a (extra $ före variabel $b) echo $ { 'a' }; // Utdatavariabel $a Funktionsnamn (); // Anrop funktion function_name $c = 'function_name' ; $c (); //Anrop funktionen funktionsnamn $d = 'Klassnamn' ; $obj = nytt klassnamn ; // Skapa ett objekt av klassen Klassnamn $obj = new $d (); // Skapa ett objekt av klassen Klassnamn $obj -> b ; // Åtkomst till egenskap b för objektet $obj -> c (); // Anropa objektets c()-metod $obj -> $b ; // Åtkomst till a-egenskapen för objektet eftersom $b = 'a' $obj -> $c (); // Utmaning av objektet Function_name () eftersom $ C = 'Function_name'I PHP echo, printäven om de ser ut som funktioner, är den förra en [42] operator och den senare är ett uttryck (det vill säga den printreturnerar ett värde, till skillnad från echo). Du kan utelämna parenteserna när du använder dem.
Superglobala arrayer i PHP är fördefinierade arrayer som har en global räckvidd utan att använda direktivet . De flesta av dessa arrayer innehåller indata från användarens begäran ( GET - begäranparametrar, formulärfält när de skickas med POST- metoden , cookies , etc.). global
Alla superglobals, förutom $GLOBALSoch $_REQUEST, har föråldrade motsvarigheter med långa namn som är tillgängliga upp till version 5.3. x (eftersom 5.4.0 har tagits bort). Således är anropen av $_GET['year']och $HTTP_GET_VARS['year']identiska (förutom omfattningen: arrayer med "långa" namn är inte superglobala).
$GLOBALS En uppsättning av alla globala variabler (inklusive användarna). $_SERVER(analog för föråldrad - $HTTP_SERVER_VARS) Innehåller miljövariabler som operativsystemet skickar till servern. $_ENV(mun $HTTP_ENV_VARS) Aktuella miljövariabler _ _ _ _ Deras uppsättning är specifik för plattformen där manuset utförs. $_GET(mun $HTTP_GET_VARS) Innehåller parametrarna för GET-begäran som skickas i URI:n efter frågetecknet " ?". $_POST(mun $HTTP_POST_VARS) Associativ uppsättning av värdena i HTML-formulärfälten vid sändning med POST. Elementindex motsvarar värdet av en egenskap hos nameobjekten (knappar, formulär, alternativknappar, kryssrutor, etc.) i HTML-formuläret. $_FILES(mun $HTTP_POST_FILES) Associativ array med information om postfilerna som skickas av metoden. Varje element har ett index som är identiskt med värdet för "name"-attributet på formuläret, och är i sin tur också en array med följande element:Nyckelordet classvar reserverat i den tredje versionen av språket. I den fjärde versionen blev det möjligt att skapa klasser och objekt utifrån dem. OOP-principerna stöddes dock endast delvis, till exempel var alla medlemmar (variabler och metoder) offentliga. Dessutom var skapandet av föremål en dyr operation och fungerade långsamt.
Från och med den femte versionen av PHP har OOP fullt stöd . Arbetet med klasser har optimerats och nu fungerar sådan kod ganska snabbt.
En klass i PHP deklareras med class. Klassmetoder och egenskaper kan vara offentliga ( public, standard), skyddade ( protected) och dolda ( private). PHP stöder alla tre stora OOP-mekanismerna - inkapsling , subtyp polymorfism och arv (förälderklassen anges med ett nyckelord extendsefter klassnamnet). Gränssnitt stöds (mappade med implements). Det är tillåtet att deklarera slutgiltiga , abstrakta metoder och klasser. Flera arv av klasser stöds inte, men en klass kan implementera flera gränssnitt. Nyckelordet används för att komma åt metoder för den överordnade klassen parent.
Sedan version 5.4.0 kan multipelt arv implementeras med hjälp av egenskapsmekanismen . Funktioner liknar mixins , förutom att de inte kan instansieras direkt . Kodåteranvändning ligger i användningen av funktionskod i flera klasser. Det är tillåtet att använda flera funktioner i en klass. Funktionsmekanismen har ett sätt att lösa namnkonflikter. När programmet körs kommer funktionens kod att "kompileras" till koden för dess innehållande klass.
Klasser i PHP har ett antal "magiska" metoder ( eng. magic methods ), som börjar med två understreck - en konstruktor ( __construct(), i versioner före 5.0 var konstruktorn en metod med samma namn som klassen) och en destruktor ( __destruct()), såväl som läs- ( __get()) och skrivmetoder ( __set()), vikning ( __sleep()) och expandering ( __wakeup()), kloning ( __clone()), etc. Dessa metoder är ganska flexibla verktyg: genom att omdefiniera dem kan du uppnå en betydande förändring i beteendet hos objekt.
Alla medlemsfunktioner är implementerade som virtuella och därför är alla metoder.
Förekomster av en klass skapas med nyckelordet new, egenskaperna och metoderna för ett objekt nås med operatorn ->. För att komma åt klassmedlemmar från dess metoder används en variabel $this.
klass C1 utökar C2 implementerar I1 , I2 { privat $a ; skyddad $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 (); // 3Sedan PHP 5 skickas objekt genom referens:
klass A { public $color = 'röd' ; } $a = newA ( ); echo $a -> färg ; // röd $b = $a ; $b -> color = 'blå' ; echo $a -> färg ; // blå"Paamayim Nekudotayim" ( hebreiska : פעמיים נקודתיים) eller helt enkelt "dubbelt kolon". Med denna token kan programmeraren komma åt konstanter, statiska eller överbelastade egenskaper eller metoder för klassen. När man hänvisar till dessa element utanför klassen måste programmeraren använda klassnamnet. "Paamayim Nekudotayim" kan vid första anblicken tyckas vara en konstig fras för ett dubbelt kolon. Men under skapandet av Zend Engine version 0.5 (som ingick i PHP3), valde Andi och Zeev denna notation [43] . "Paamayim Nekudotayim" betyder egentligen "dubbel kolon" (bokstavligen: "dubbel kolon") på hebreiska. Denna notation har aldrig ändrats under utvecklingen av PHP [44] .
class MyClass { public const CONST_VALUE = 'Konstant värde' ; } // Använder :: utanför klassdeklarationen echo MyClass :: CONST_VALUE ;PHP-skript bearbetas vanligtvis av tolken i en ordning som säkerställer att den utvecklade applikationen är plattformsoberoende :
Tidigare, för att öka applikationernas prestanda, var det möjligt att använda speciell programvara , de så kallade acceleratorerna . Principen för deras funktion är att cache en gång genererad bytekod i minnet och/eller på disken , sålunda är steg 1-3 uteslutna från applikationsprocessen, vilket i allmänhet leder till en betydande snabbhet. Sedan version 5.5 har en av acceleratorerna, opcache , byggts in i kärnan, så tredjepartslösningar är inte längre populära.
En viktig funktion är att utvecklaren inte behöver ta hand om distribution och frigöring av minne. PHP-kärnan implementerar faciliteter för automatisk minneshantering; Allt tilldelat minne returneras till systemet efter att skriptet har slutförts [45] .
Tolken består av en kärna och anslutna moduler , "extensions" , som är dynamiska bibliotek . Tillägg låter dig komplettera språkets grundläggande kapacitet, vilket ger möjligheter att arbeta med databaser , sockets , dynamisk grafik , kryptografiska bibliotek, PDF -format dokument och liknande. Vem som helst kan utveckla sin egen expansion och koppla ihop den. Det finns ett stort antal tillägg, både standard och skapade av tredjepartsföretag och entusiaster, men bara ett par dussin väl beprövade sådana ingår i standardutbudet. Många tillägg finns tillgängliga i PECL- förvaret .
Från och med version 7.4.0 lades FFI-stöd till PHP, vilket avsevärt förenklade interaktion med bibliotek skrivna på vilket annat språk som helst (inklusive API:et som tillhandahålls av operativsystemet). Denna nya funktionalitet gav i sin tur ett alternativ till skrivtillägg. Med FFI kan du alltså skriva koden i PHP-språket och interagera med alla bibliotek i systemet som tillhandahåller cdecl, fastcalleller stdcall Abi .
PHP-tolken har en speciell konfigurationsfil - php.inisom innehåller många inställningar, vars förändring påverkar tolkens beteende [46] . Det är möjligt att inaktivera användningen av ett antal funktioner, ändra begränsningarna för RAM-minnet som används av skriptet, exekveringstiden, volymen av uppladdade filer, konfigurera feljournalisering, arbeta med sessioner och e-posttjänster, ansluta ytterligare tillägg och mycket mer. Det är möjligt att krossa en stor konfigurationsfil på delar. Till exempel är bruket att göra tillägg till separata filer utbredd. Tolkens parametrar kan omdefinieras i HTTP-serverns konfigurationsfiler (till exempel .htaccessi Apache ) eller i själva skriptet under exekveringen med kommandot ini_set[47] .
SAPI är ett externt abstraktionslager utformat för att bädda in en tolk i andra applikationer och ansvarar för dess funktion (starta, stoppa, skicka skript för exekvering, tillgång till extern data). Det finns flera huvudsakliga SAPI:er som definierar hur PHP kan köras och användas:
Från och med PHP 5.4.0 har SAPI CLI förmågan att köra PHP som en fristående HTTP-server. Det här läget är dock enbart för utveckling, eftersom det bara kör en tolkprocess och exekverar alla frågor på ett rent sekventiellt sätt.
PHP har några påskägg (skämt). Att skicka speciella GET-parametrar till valfritt php-skript resulterar i utdata av olika bilder.
Till exempel:
any_script.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42när du anger detta värde i webbläsarens adressfält kan du se olika bilder, beroende på tolkens version:
Följande två värden låter dig se standard PHP- och ZEND-logotypen, respektive [49] :
any_script.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
any_script.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42Dessa värden kan också erhållas direkt i PHP-skriptet med hjälp av funktionerna php_logo_guidoch zend_logo_guidför Zend-logotypen.
Det finns också ett speciellt värde för att visa en lista över alla PHP (4,5) [49] författare :
any_script.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
På grund av PHP-språkets popularitet och önskan att öka hastigheten på webbapplikationer baserade på det , har flera alternativa kompilatorer skapats som ligger nära PHP-språket. Så i februari 2010 öppnade Facebook [ 50] [51] sin PHP-kompilator - HipHop (HPHP, Hyper-PHP) som genererar C++-kod , följt av kompilering till maskinkod med gcc . I juli 2013 tillkännagav det ryska företaget VKontakte en liknande produkt, KPHP [52] .
Tabellen ger en lista över för närvarande existerande alternativa implementeringar.
namn | PHP-version (ungefär) | Licens | Sammanställningsresultat |
---|---|---|---|
PHP | 7.4 | GPL | C++ , ursprunglig kod |
hiphop | 5.4 | PHP-licens | C++ , ursprunglig kod |
Roadsend PHP | 5.3 | GPL / LGPL | C , maskinkod |
Phalanger | 5.5 | Ms SS-PL [53] ( Delad källa ) | Microsoft IL |
Quercus (del av Resin webbserver ) | 5.2 | GPL eller kommersiell | JVM |
PHC | 5.2 | BSDL | C , maskinkod |
Pipp [54] | 5.3 | Artistic License och GNU GPL | Papegoja |
JPHP [55] | 7.1 (delvis 7.2, 7.3 och 7.4) [56] | Apache 2.0 | JVM |
PHP | 5.4 | MIT | PHP |
PH7 | 5.5 | Egen (Symisc Public License) | C , maskinkod |
HippyVM | 5.6 | MIT | RPython/PyPy |
En jämförande analys av vissa kompilatorer finns på phpclasses.org [57] .
PHP är det mest populära språket för att utveckla innehållshanteringssystem (CMS).
namn | Licens |
---|---|
Codelobster | Gratisprogram |
Komodo | Mozilla tri-licens ( MPL / LGPL / GPL ) [58] |
phpstorm | Proprietär programvara |
PHP utvecklingsverktyg | Eclipse Public License |
zend studio | shareware |
Aptana Studio | GNU GPL |
phpDesigner | shareware |
PHP Expert Editor | Shareware [59] |
NetBeansIDE | CDDL |
RadPHP XE | rättegång |
NuSphere | rättegång |
KDevelop [60] | GNU GPL |
Microsoft Web Matrix | Gratisprogram |
Anteckningar++ | GNU GPL |
Sublim text | Proprietär programvara |
VS.Php för Visual Studio | Proprietär programvara |
PHP-verktyg för Visual Studio | rättegång |
DevelNext | MPL-2.0 |
jRedigera | GNU GPL -2.0 |
PHP Standard Recommendation ( förkortning PSR [ ) är en PHP-specifikation som är utvecklad, accepterad och publicerad av en grupp auktoritativa PHP-projekt inklusive CakePHP, Composer , Joomla, PEAR , Phalcon, phpDocumentor , TYPO3, Yii framework [61] . Specifikationen fungerar som en standardisering av PHP-programmeringskoncept och är baserad på verklig erfarenhet såväl som forskning och experiment [62] . Syftet med rekommendationerna är att säkerställa kompatibiliteten för webbapplikationskomponenter utvecklade av olika utvecklare.
Förespråkare av PHP-språket nämner den utbredda användningen, efterfrågan på PHP-utvecklare på arbetsmarknaden och enkel inlärning som dess främsta fördelar. Fördelarna med språket inkluderar dess ganska snabba utveckling.
Stöd för strängar med multibyte-kodningar (som UTF-8 ) implementeras genom separata tillägg mbstringoch iconv, det finns inget stöd på kärnnivån, men eftersom PHP 4.2.0 är det möjligt att åsidosätta standardfunktionerna för att arbeta med strängar, ersätta dem med analoger från mbstring. Stöd för multibyte-kodningar i alla strängfunktioner har funnits sedan version 5.4.0 (mars 2012).
Språket ger inte möjlighet att skapa flertrådade applikationer och det finns inget stöd för synkroniserad åtkomst till resurser, men det är implementerat med PCNTL-tillägget [63] (från den engelska process control ), men det är inte lämpligt för att lösa specifika problem.
Även om det är möjligt att installera pthreads-tillägget för "ärliga" trådar, måste tolken för detta kompileras med trådsäkerhetsflaggan, och själva tillägget har förkastats till förmån för parallell (från samma författare).
Ett modernare alternativ är att använda Swoole-förlängningen.
I sociala nätverk | ||||
---|---|---|---|---|
Tematiska platser | ||||
Ordböcker och uppslagsverk | ||||
|
PHP | |
---|---|
människor | |
Resurser |
|
Genomföranden | |
Ramar |
|
Testning |
|
ORM | |
ID | |
Kompilator | Phalanger |
verktygslåda | |
Kategori |
Programmeringsspråk | |
---|---|
|
Gratis och öppen källkod | |
---|---|
Huvudsaken |
|
gemenskap |
|
Organisationer | |
Licenser | |
Problem | |
Övrig |
|
|
Webb och hemsidor | |
---|---|
globalt | |
Lokalt | |
Typer av webbplatser och tjänster |
|
Skapande och underhåll | |
Typer av layouter, sidor, webbplatser | |
Teknisk | |
Marknadsföring | |
Samhälle och kultur |
Interaktionsprotokoll | |
---|---|
Gateways |