PHP | |
---|---|
Kieliluokka | moniparadigma , oliosuuntautunut , pakottava |
Esiintyi | 8. kesäkuuta 1995 [5] [6] |
Tekijä | Rasmus Lerdorf [3] |
Kehittäjä | Rasmus Lerdorf [1] , Andy Gutmans [1] , PHP Group [d] , Zend Technologies [2] ja Zeev Sourasky |
Tiedostotunniste _ | .php[7] |
Vapauta |
|
Vaikutettu | C++ , Perl [8] , C [8] , Java [8] , Tcl [9] , HTML ja JavaScript |
Lisenssi | PHP-lisenssi [10] |
Verkkosivusto | php.net _ |
OS | Unix-tyyppinen käyttöjärjestelmä ja Microsoft Windows |
Mediatiedostot Wikimedia Commonsissa |
PHP ( /pi:.eɪtʃ.pi:/ englanniksi PHP: Hypertext Preprocessor - "PHP: hypertext preprocessor "; alun perin PHP / FI (Personal Home Page / Form Interpreter), ja myöhemmin nimeltään Personal Home Page Tools [11] - " Tools henkilökohtaisten verkkosivujen luomiseen") on yleiskäyttöinen C-tyyppinen komentosarjakieli [12] , jota käytetään intensiivisesti verkkosovellusten kehittämiseen. Suurin osa hosting-palvelujen tarjoajista tukee sitä tällä hetkellä, ja se on yksi johtavista dynaamisten verkkosivustojen luomiseen käytetyistä kielistä [13] .
Kieli ja sen tulkki ( Zend -moottori ) kehittää harrastajaryhmä osana avoimen lähdekoodin projektia [14] . Projekti on jaettu oman lisenssinsä nojalla , mikä ei ole yhteensopiva GNU GPL : n kanssa .
Web-ohjelmoinnin alalla, erityisesti palvelinpuolella, PHP on yksi suosituimmista komentosarjakielistä ( JSP :n , Perlin ja ASP.NET:ssä käytettyjen kielten ohella ).
Suosion verkkosivustojen rakentamisen alalla määrää se, että on olemassa suuri joukko sisäänrakennettuja työkaluja ja lisämoduuleja verkkosovellusten kehittämiseen [15] . Tärkeimmät ovat:
Sadat tuhannet kehittäjät ovat käyttäneet sitä 2010-luvulta lähtien; Hakukonetietoihin perustuvan TIOBE-luokituksen mukaan PHP oli toukokuussa 2016 ohjelmointikielistä kuudenneksi [13] .
Sisältyy LAMPiin - yleiseen ohjelmistosarjaan verkkosivustojen luomiseen ja isännöintiin ( Linux , Apache , MySQL , PHP), sekä LEMPiin - yhtä yleiseen ohjelmistosarjaan ( Linux , Nginx , MySql , PHP).
PHP:tä käyttäviä sivustoja ovat Facebook , Wikipedia , Yahoo! , Baidu .
Kieli tukee automaattisesti HTTP-evästeitä Netscape-standardien mukaisesti. Tämän avulla voit asettaa ja lukea pieniä tietosegmenttejä asiakaspuolella. Työskentely evästeiden kanssa järjestetään istuntojen (istuntojen) kautta. Istunnoilla on viimeinen voimassaolopäivä (sen umpeutumisen jälkeen tiedot poistetaan), istunnoissa voit tallentaa ja muokata erityyppisiä tietoja, mukaan lukien sarjoitetut - sarjoitetut (prosessi tapahtuu automaattisesti), PHP-objekteja.
PHP ei ole keskittynyt työpöytäsovellusten luomiseen, mutta on tarpeen luoda rajapintoja palvelimien asettamiseen, jatkuvaan suoritukseen, skriptien (skriptien) virheenkorjaukseen, paikallisten ja testipalvelimien hallintaan jne. Tämän vuoksi ongelmaan syntyi ratkaisuja.
LaajennuksetLaajennusten pääasiallinen käyttötarkoitus on käyttöliittymäkirjastojen (UI-kirjastojen) lisääminen.
Laajennukset on perinteisesti jaettu kolmeen ryhmään:
Laajennukset, kuten kaksisuuntainen kääre, on kehitetty muiden kielten käyttämiseen PHP-laajennuksia kirjoitettaessa ja päinvastoin. Esimerkiksi PSV-komponenttikirjasto on projekti, joka koostuu kolmesta osaprojektista:
Siellä on myös paikka GUI PHP:n täysimittaisille kehitysympäristöille:
Tämän kategorian edelläkävijä on DevPHP-IDE-studio, joka käytti Kylixiä ( Delphi ) käyttöliittymän selkärankana ja phpcliä mukautettujen ohjelmien rakentamiseen.
Se sisälsi koodieditorin, useita työkaluja ja visuaalisen HTML-katseluohjelman.
Se esiteltiin ensimmäisen kerran vuonna 2002, nyt sillä on 3 vakaata versiota, mutta kehitys ei jatku - se pysähtyi pääkehittäjän kuoleman vuoksi auto-onnettomuudessa.
DevPHP IDE:n jälkeen ilmestyi laajennus - php4delphi-pohjainen CodeGear Rad Studio 2009 :n komponenttisarja, jossa on joitain parannuksia (verkkoelementit, tarkastaja, debuggeri), sen tuki kesti neljälle versiolle, joista toinen sisällytettiin maksulliseen laajennukseen Rad Studio 2010 : siellä oli mahdollisuus käyttää komentosarjoja, tyylittää verkkokomponentteja, tarkastella tyylejä ja verkkosivuja ennen ohjelman rakentamista, ajaa paikallista palvelinta, rakentaa ohjelma erillisenä sovelluksena ja korjata koodia. Delphi XE:n julkaisun myötä laajennus sai nimekseen RADPHP Xe. Lisäksi itse studiosta tuli tunnetuksi Embarcadero Delphi, ja tämän laajennuksen työ keskeytettiin määräämättömäksi ajaksi.
Vuonna 2009 php4delphin pohjalta aloitettiin ympäristön kehittäminen graafisten PHP-sovellusten luomiseen, johon myöhemmin liittyi Rostislav Romanov. Ympäristön nimi oli PHP DevelStudio, ensimmäinen julkaistu versio oli 0.1.7. DevelStudion työkalupakkissa oli pieni määrä komponentteja ja se toimi vanhentuneella PHP 4:llä. Toisessa versiossa DevelStudio sai tuen PHP 5:lle. Streameja lisättiin ja monia muutoksia ja parannuksia tehtiin. Ohjelmien kokoonpanokoodi on suljettu, ohjelman aiemmat versiot ja foorumin viestit on poistettu tunkeilijoiden estämiseksi.
DevelStudion toinen versio sai myös joukon AlphaControls-komponentteja, minkä seurauksena sitä käytettiin haittaohjelmien luomiseen sen yksinkertaisuuden ja selkeyden vuoksi. Tuolloin suositut virustorjuntaohjelmat (MacAffee, AVG , Avira ) alkoivat tunnistaa kaikki DevelStudioon käännetyt ohjelmat viruksiksi.
Jonkin ajan kuluttua AlphaControlsin kirjoittaja teki valituksen DevelStudion kehittäjille, ja komponenttisarja poistettiin kokonaan ympäristöstä, mutta se säilytettiin jo olemassa olevassa versiossa, jota ei tällä kertaa voitu poistaa foorumilta .
Vuoden 2012 aikana julkaistiin ympäristön uusin versio - 3.0.2, jossa ilmestyi uusi joukko komponentteja, mukaan lukien Chromium -selain IE :n sijaan , mikä herätti verkkokehittäjien ja Algorithm-ympäristön käyttäjien huomion. Tuolloin ohjelmien kääntäminen Algorithmissa oli maksullista, joten DevelStudio uutena ja ilmaisena kehitysympäristönä houkutteli suurimman osan yleisöstä itseensä.
Vuonna 2014 aloitettiin ensimmäiset ympäristön kunnostusyritykset, tällä kertaa yhteisön toimesta . Vuoden 2018 lopussa lähdekoodi palautettiin ja on saatavilla GitHubissa .
Vuonna 2019 yhteisö otti yhteyttä DevelStudion luojaan muuttaakseen ympäristön jakelupolitiikkaa, jotta se saataisiin päivitettäväksi ja muokattavaksi. Valitusten johdosta linkkien puutteesta käytettyihin kirjastoihin (DCEF, PHP4Delphi, TSizeCtrl, SynEdit) foorumi poistettiin ja yksi ympäristöä kuvaavista sivuista ohjattiin sivuston pääsivulle. Tästä lähtien DevelStudio on virallisesti yhteisön omistuksessa.
Samanaikaisesti pääkehittäjä DevelStudio alkoi luoda "reinkarnaatiota" edellisestä ympäristöstä. Hän otti JavaFX - grafiikkakirjaston perustaksi , mikä johti täysin uuteen ympäristöön, jossa oli CSS -tuki , mutta ilman täydellistä tukea Zend PHP -kirjastolle - projekti perustui sen omaan jPHP-kieleen. Sen ominaisuuksia ovat työskentely JVM :n parissa , JIT -kääntäjä, Unicode - tuki , monisäikeisyys ja olio-standardikirjasto.
16. versiossa DevelNext-ympäristö sai tuen php 7:lle, ja rinnakkain tämän kanssa jPHP:tä laajennettiin Android -käyttöjärjestelmän alaisena kehittäjänä .
Tällä hetkellä kirjoittaja ja harrastajat työstävät vuoden 2020 versiota (aiemmin 17.).
Vuonna 2015 Alexander Kazantsev alkoi tutkia käyttöliittymäkehitysalgoritmeja ja loi php_qml-laajennuksen, joka mahdollisti QT-kirjaston widgetien käytön, mutta se toimi vain Windowsissa.
Tämän myötä PHPQt:n kehitys alkoi, ensimmäiset versiot eivät kiinnittäneet paljon huomiota web-kehittäjiltä, joten kirjoittaja alkoi parantaa laajennusta perusteellisesti.
28. heinäkuuta 2015 julkaistiin projektin kääntäjän ensimmäinen versio, tuolloin se oli yksinkertainen komentosarjan (skriptin) suorittaja, joka liitti php-koodin tyngään (kuten DevelStudio), ja joka oli riippuvainen Windows API:sta. Tässä vaiheessa melkein kaikki widgetit olivat tuettuja ja monisäikeisiä, php-koodin optimointi oli helppoa. Siitä hetkestä lähtien moottorin nimi oli PQEngine,
3. elokuuta 2016 julkaistiin sovelluskääntäjän (PqBuilder) viides versio, joka siirtyi PlastiQ-pohjaan ja sai tukea uusimmalle, tuolloiselle php 7:lle, projektit saivat täydellisemmän kääntäjän, eivätkä enää vaatineet PqEngine.dll:n läsnäolo suoritettavan tiedoston lähellä, sen sijaan Näitä visuaalisia kirjastoja alettiin lisätä dynaamisesti - tiedostoina eikä ommeltu PQEngine.dll-tiedostoon. Tämä vaihe otettiin yhteensopivuuden vuoksi muiden järjestelmien ja alkuperäisten Qt-kirjastojen kanssa.
Kuudennen version myötä projektista tuli lisäys Qt Studio -ympäristöön, ja kääntäjästä tuli vain koodin optimoija ennen ohjelman lopullista kokoonpanoa. Täysikäyttöinen käyttöliittymäeditori ilmestyi, koodieditorissa vihjeitä ja dokumentaatiota alettiin luoda. Siitä hetkestä lähtien he ilmoittivat PqStudio-ympäristön luomisesta, mutta sen kehittäminen ei mennyt pitkälle.
Vuonna 2018 ilmestyi projekti, joka yhdistää Windows Formsin (.NET Framework) ja PHP 7:n ominaisuudet. Sen kehitystyö on edelleen hidasta vauhtia.[ milloin? ] . Tällä hetkellä moottorista löytyy lähes kaikki[ mitä? ] -toiminnot OOP:lle. Ympäristöä kehitetään yksityisesti. Oletussuoritustiedoston mukana tulee php7ts.dll.
PHP:n yhdistäminen projektiinOn myös laajennuksia päinvastaiseen käyttöön - PHP:n liittämiseen toisella ohjelmointikielellä olevaan projektiin: Phalanger (C#, php 5.4-7), Peachpie] (C#, php 7), PHP4Delphi (Lazarus, Delphi, C#, C, C++ , php 5.6, JPHP (Java, php 7.0), PHPly (Python, php 5.6)
Vuonna 1994 tanskalainen ohjelmoija Rasmus Lerdorf kehitti C :ssä [16] joukon CGI-skriptejä ottaakseen huomioon kävijöitä hänen online - ansioluetteloonsa , joka käsittelee HTML - dokumenttimalleja. Lerdorf kutsui sarjaa henkilökohtaisen kotisivun työkaluiksi (Tools for a personal home page ). Pian toiminnallisuus ei enää riittänyt, ja Lerdorf kehitti uuden PHP/FI -mallitulkin ( englanniksi Personal Home Page / Forms Interpreter - "henkilökohtainen kotisivu / lomaketulkki") [17] .
8. kesäkuuta 1995 julkaistiin henkilökohtaisen kotisivun (PHP Tools) versio 1.0 – ensimmäinen julkinen julkaisu.
Vuonna 1997 pitkän beta-testauksen jälkeen julkaistiin C -kielellä kirjoitetun käsittelijän toinen versio - PHP / FI 2.0. Sitä käytti noin 1 % (noin 50 tuhatta) kaikista maailman Internet-alueista [11] .
PHP 3.0 on läpikäynyt merkittävän uudistuksen, joka määrittelee ohjelmointikielen modernin ulkoasun ja tyylin. Vuonna 1997 kaksi israelilaista ohjelmoijaa, Andy Gutmans ja Zeev Suraski , kirjoittivat tulkin koodin kokonaan uudelleen. PHP 3.0 julkaistiin virallisesti kesäkuussa 1998 [11] .
Yksi PHP 3.0:n vahvuuksista oli kyky laajentaa ydintä lisämoduuleilla. Myöhemmin laajennuksen kirjoitusrajapinta houkutteli monia kolmannen osapuolen kehittäjiä moduuliensa parissa työskenteleviin PHP:hin, mikä mahdollisti PHP:n työskentelyn valtavan määrän tietokantoja ja protokollia kanssa ja tukea suurta määrää API :ita . Suuri joukko kehittäjiä johti kielen nopeaan kehitykseen ja sen suosion nopeaan kasvuun. Tästä versiosta lähtien php - lyhenne tarkoittaa "PHP: hypertext Preprocessor" vanhentuneen "Personal Home Page" sijaan.
Talvella 1998, melkein heti PHP 3.0:n virallisen julkaisun jälkeen, Andy Gutmans ja Zeev Suraski alkoivat muokata PHP-ydintä. Tavoitteena oli lisätä monimutkaisten sovellusten suorituskykyä ja parantaa PHP-koodikannan modulaarisuutta. Uusi moottori, nimeltään Zend Engine , selviytyi tehtävistä onnistuneesti, ja se esiteltiin ensimmäisen kerran vuoden 1999 puolivälissä . PHP 4.0 , joka perustuu tähän moottoriin ja tuo mukanaan joukon lisäominaisuuksia, julkaistiin virallisesti toukokuussa 2000 . Suorituskykyparannusten lisäksi PHP 4.0:ssa oli useita muita keskeisiä innovaatioita, kuten istunnon tuki, lähtöpuskurointi , turvallisemmat tavat käsitellä käyttäjän syötteitä ja useita uusia kielirakenteita.
Kehittäjät julkaisivat PHP:n viidennen version 13. heinäkuuta 2004 . Muutokset sisältävät Zend-ytimen ( Zend Engine 2 ) päivityksen, joka lisäsi merkittävästi tulkin tehokkuutta . Otettiin käyttöön tuki XML -kuvauskielelle . OOP - toiminnot on suunniteltu kokonaan uudelleen ja ne ovat hyvin samanlaisia kuin Javassa käytetty malli . Erityisesti otettiin käyttöön tuhoaja , julkiset, yksityiset ja suojatut jäsenet ja menetelmät , lopulliset jäsenet ja menetelmät, rajapinnat ja objektin kloonaus. Myöhemmät versiot esittelivät myös nimiavaruuksia , sulkemisia ja useita melko vakavia muutoksia, jotka olivat määrällisesti ja laadullisesti verrattavissa PHP 5.0:aan siirtymisen aikana ilmeneviin.
PHP:n kuudes versio on ollut kehitteillä lokakuusta 2006 lähtien [18] . Monia innovaatioita on tehty [19] [20] , kuten säännöllisten POSIX -lausekkeiden ja "pitkien" superglobaalien poistaminen ytimestä sekä safe_mode- , magic_quotes_gpc- ja register_globals -direktiivien poistaminen php.ini- määritystiedostosta. Yksi tärkeimmistä innovaatioista piti olla Unicoden tuki [21] . Maaliskuussa 2010 PHP6:n kehitystä pidettiin kuitenkin lupaamattomana [ 22] Unicode-tuen vaikeuksien vuoksi. PHP6-lähdekoodi on siirretty , ja versiosta 5.4 on tullut tärkein kehityslinja.
Vuonna 2014 järjestettiin äänestys, jonka tuloksena seuraava versio nimettiin PHP 7:ksi [23] . Uuden version julkaisu suunniteltiin lokakuun puolivälissä 2015 [24] . Maaliskuussa 2015 Zend julkaisi infografian , joka esittelee PHP 7:n tärkeimmät innovaatiot [25] .
3. joulukuuta 2015 julkistettiin PHP-versio 7.0.0 [26] .
Uusi versio perustuu PHP:n kokeelliseen haaraan , jota alun perin kutsuttiin phpng:ksi ( PHP Next Generation "seuraava sukupolvi"), ja sen kehitystyössä keskityttiin suorituskyvyn lisäämiseen ja muistin kulutuksen vähentämiseen [27] . Uusi versio lisää mahdollisuuden määrittää funktiosta [28] palautetun datan tyypin, lisätty tyyppiohjaus datalle [29] sekä uusia operaattoreita.
13. kesäkuuta 2019 PHP 7.4 julkaistiin. Tyypilliset ominaisuudet ja nuolifunktiot lisättiin ytimeen, samoin kuin rajattu paluutyypin kovarianssi ja argumenttityypin kontravarianssi [30] .
PHP-versio 8.0 julkaistiin 26. marraskuuta 2020 [31] . Tärkeimmät innovaatiot olivat [32] : tuki liittotyypeille [33] , JIT-kokoelma [34] ja attribuutit (tunnetaan myös annotaatioina), myös kytkimen "rakenne" korvattiin vastaavuus "lausekkeella" ja uusi Nullsafe-operaattori lisätty.
Dale Hirt , Microsoftin PHP -projektipäällikkö, julkaisi 9. heinäkuuta 2020 postituslistalla viestin [35] , jossa todettiin, että PHP 8.0:n julkaisun jälkeen Microsoft lopettaa tämän ohjelmointikielen kehittämisen tukemisen Windowsille [36] . Microsoftin asiantuntijat kokosivat Windows-tulkin binääriversioita ja testasivat niiden turvallisuutta. PHP-kehittäjäyhteisö ilmoitti ryhtyvänsä kaikkiin tarvittaviin toimenpiteisiin löytääkseen vaihtoehtoisen vaihtoehdon järjestääkseen lähitulevaisuudessa tuen PHP 8.0:lle ja sitä uudemmille Windowsille esimerkiksi yksin [37] . php.internals
PHP:n syntaksi on samanlainen kuin C - kielen syntaksi . Jotkut elementit, kuten assosiatiiviset taulukot ja silmukka foreach, on lainattu Perlistä .
PHP:n leksinen jäsennys tehdään re2c- apuohjelman [38] [39] kautta , joka luo nopeita ja helposti upotettavia leksereita.
Yksinkertaisen skriptin kirjoittamiseksi sinun ei tarvitse kuvata muuttujia, käytettyjä moduuleja jne. Mikä tahansa komentosarja voi alkaa suoraan <?php.
PHP: n yksinkertaisin Hello world -ohjelma näyttää tältä:
<?php echo 'Hei, maailma!' ; ?>Lyhyempi versio merkkijonotulostuksesta on myös mahdollista:
<?= 'Hei, maailma!' ?>Avausnäkymätunnistetta <?=käytetään lyhentämään rivin näyttämiseen käytettyjä rakenteita.
PHP suorittaa koodia, joka on erottimien sisällä, kuten <?php ?>. Kaikki rajojen ulkopuolella tulostetaan ennallaan. Tätä käytetään pääasiassa PHP-koodin lisäämiseen HTML-dokumenttiin, kuten:
< html > < pää > < otsikko > PHP:n testaus </ title > </ head > < body > <?php echo 'Hei maailma!'; ?> </ body > </ html >Erotinten lisäksi <?php ?>on sallittua (mutta tunnustetaan vanhentuneeksi ja käytännössä ei käytetä) lyhennetyn version käyttö <? ?>. Lisäksi ennen versiota 7.0 ASP <% %> ja <script language="php"> </script>. Pikanäppäimet määritellään php .ini - asetustiedostossa .
Muuttujien nimet alkavat symbolilla $, muuttujan tyyppiä ei tarvitse ilmoittaa. Muuttujien ja vakioiden nimissä isot ja pienet kirjaimet ovat erottelevia. Luokkien nimet, luokkamenetelmät ja funktiot eivät erota kirjainkoolla. Muuttujat käsitellään kaksoislainausmerkkijonoissa ja heredoc - merkkijonoissa (merkkijonot, jotka on luotu <<<-operaattorilla). Lainausmerkkien ja nowdocin merkkijonojen muuttujia ei jäsennetä.
Lausekkeet erotetaan puolipisteellä ( ;), paitsi joissain tapauksissa if/else-konstruktioiden ja silmukoiden ilmoittamisen jälkeen.
Muuttujat voidaan välittää funktiolle sekä arvon että viittauksen perusteella (käytetään merkkiä &).
PHP tukee kolmenlaisia kommentteja: C -tyyli (eroteltu /* */), C++ (alkaa //rivillä ja jatkuu rivin loppuun) ja UNIX shell ( #rivin loppuun asti).
PHP on dynaamisesti kirjoitettu ohjelmointikieli , joka ei vaadi tyypin määrittelyä muuttujien ilmoittamisessa, eikä itse muuttujan ilmoitusta.
Skalaaritietotyyppejä ovat:
Ei-skalaarityyppejä ovat:
PHP:n kokonaislukualue (int) riippuu alustasta (32-bittisessä arkkitehtuurissa lukuväli ei ylitä int32_t, eli -2 147 483 648 - 2 147 483 647). Numerot voidaan määrittää desimaali-, oktaali- ja heksadesimaalilukujärjestelmissä . Reaalilukujen alue (float) riippuu myös alustasta (32-bittisessä arkkitehtuurissa alueen avulla voit käyttää lukuja ±1,7 × 10 -308 - ±1,7 × 10 +308 ).
PHP tarjoaa kehittäjille loogisen tyypin , joka voi ottaa vain kaksi arvoa true("true") ja false("false"). Kun se muunnetaan totuusarvoksi, lukua 0, tyhjää merkkijonoa, nollaa merkkijonossa "0" nullja tyhjää taulukkoa pidetään yhtä suurena false. Kaikki muut arvot muunnetaan automaattisesti arvoiksi true.
Erityinen tyyppinen nolla on muuttujille ilman määriteltyä arvoa. Tämän tyyppinen ainoa arvo on kirjaimellinen null. NULL -tyyppi hyväksyy epätasaamattomat muuttujat, muuttujat, jotka on alustettu vakiona null, samoin kuin muuttujat, jotka poistetaan käyttämällä unset().
Linkit ulkoisiin resursseihin ovat resurssityyppiä. Tämän tyyppiset muuttujat ovat yleensä kuvaajia , joiden avulla voit hallita ulkoisia objekteja, kuten tiedostoja, dynaamisia kuvia, tuloksena olevia tietokantataulukoita jne. Kielen kehittyessä vakiokirjastoa jalostetaan vähitellen ja resurssit korvataan objekteilla. . Tästä syystä on tarkoitus päästä kokonaan eroon tästä tyypistä.
Taulukot (taulukko) tukevat numero- ja merkkijonoavaimia ja ovat heterogeenisia . Taulukot voivat sisältää minkä tahansa tyyppisiä arvoja, mukaan lukien muut taulukot. Elementtien ja niiden avainten järjestys säilyy. Ei ole täysin oikein kutsua php-taulukoita taulukoita, itse asiassa se on todennäköisesti järjestetty hash . Odottamaton toiminta on mahdollista käytettäessä silmukkaa forlaskurin sijaan foreach. Joten esimerkiksi lajitettaessa taulukkoa numeerisilla indekseillä vakiokirjaston funktioiden mukaan, myös avaimet lajitellaan.
KirjoittaminenKieli mahdollistaa argumenttien kirjoittamisen, funktioiden ja luokkamenetelmien palautusarvot sekä versiosta 7.4 alkaen luokkakenttien kirjoittamisen . Tiukan tilan käyttöönotto poistaa käytöstä implisiittiset tyyppimuunnokset näissä koodin osissa, mikä tuo kielen käyttäytymisen lähemmäksi kieliä, joissa on voimakas kirjoitus .
Tyypit int, string, float, booltai ovat argumenttityypin, luokkakentän tai palautusarvon kelvollisia määritelmiä array. objectOn myös sallittua käyttää luokkien tai rajapintojen nimiä tietyn toteutuksen määrittämiseen. Käyttö resourcetyypin määrittelyyn ei ole sallittua, ja ilmaisu on mahdollista rajoituksin: Vain summatyypinnull määritelmän sisällä , esimerkiksi (tai ). int|null?int
Nykyaikainen PHP toteuttaa perustuen algebrallisille tietotyypeille ja sallii sekä konjunktion että disjunktion käytön tyypin määrittelyssä. Kieli ei salli tyyppialiaksia , mutta se tarjoaa useita sisäänrakennettuja toteutuksia, joita kutsutaan "pseudotyypeiksi" PHP:ssä. Samanlaista kielen termiä sovelletaan mihin tahansa tyyppimääritykseen, joka ei ole itsenäinen, soveltuu arvoon, mutta on toteutettu vain tyypintarkistusohjeena Zend VM:ssä.
Pseudotyyppejä ovat mm.
Tyyppitarkistusten lisäksi sisäänrakennetut "pseudotyypit" voivat toteuttaa lisätarkistuslogiikkaa. Esimerkiksi callabletyyppiä voidaan edustaa:
PHP tukee sekä nimettyjen funktioiden ilmoittamista että ensimmäisen luokan anonyymejä funktioita , esimerkiksi:
// Nimetyn funktion ilmoitus get_hello_world () : string { return 'Hei maailma!' ; } // Nimetön funktion määritys $getHelloWorld = function () : string { return 'Hei maailma!' ; }; // Lyhyt syntaksi $getHelloWorld = fn () : string => 'Hei maailma!' ;On syytä huomata, että anonyymien funktioiden tapauksessa ero ei ole vain visuaalisissa eroissa, vaan myös tavassa, jolla ulkoiset kontekstimuuttujat siepataan. Mikä tahansa "lyhyt" merkintämuoto on sulkeminen , kun taas pitkä merkintä sulkemisen toteuttamiseksi vaatii nimenomaisesti määrittämään muuttujat operaattorin sisällä useulkoisesta kontekstista niiden kaappaamiseksi:
$variable = 'Hei maailma!' ; // Lausekkeen käyttäminen Käytä toimintoa () Käytä ( $ muuttuja ) : merkkijono { return $ muuttuja ; }; // Vaihtoehto, lyhyt fn () syntaksi : string => $muuttuja ;Muuttujiin päästään käyttämällä symbolia $, jota seuraa muuttujan nimi. Tätä rakennetta voidaan käyttää myös dynaamisten muuttujien ja funktioiden luomiseen. [41] Esimerkiksi:
$a = 'Minä olen a' ; // Kirjoita arvo $a kaikuun $a ; // Tulosmuuttuja $a $b = 'a' ; kaiku $$b ; // Näytä muuttuja $a (ylimääräinen $ ennen muuttujaa $b) echo $ { 'a' }; // Tulosmuuttuja $a funktion_nimi (); // Kutsu funktiota funktion_nimi $c = 'funktion_nimi' ; $c (); //Kutsu funktiota funktion_nimi $d = 'Luokannimi' ; $obj = uusi luokannimi ; // Luo luokan LuokanNimi objekti $obj = new $d (); // Luo objektin LuokkaNimi $obj -> b ; // Objektin $obj -> c (); // Kutsu objektin c()-metodia $obj -> $b ; // Objektin a-ominaisuuden käyttäminen, koska $b = 'a' $obj -> $c (); // Kutsu objektin funktion_nimi()-metodia, koska $c = 'funktion_nimi'Vaikka PHP echo: ssä printne näyttävät funktioilta, edellinen on [42] -operaattori ja jälkimmäinen on lauseke (eli printpalauttaa arvon, toisin kuin echo). Voit jättää sulkut käyttäessäsi niitä.
PHP: n superglobaalit taulukot ovat ennalta määritettyjä taulukoita, joilla on globaali laajuus ilman direktiiviä . Useimmat näistä taulukoista sisältävät käyttäjän pyynnön syöttötiedot ( GET-pyyntöparametrit , lomakekentät lähetettäessä POST -menetelmällä , evästeet jne.). global
Kaikilla superglobaaleilla, paitsi $GLOBALSja $_REQUEST, on vanhentuneita vastineita pitkillä nimillä, jotka ovat saatavilla versioon 5.3 asti. x (koska 5.4.0 on poistettu). Siten ja kutsut $_GET['year']ovat $HTTP_GET_VARS['year']identtisiä (lukuun ottamatta laajuutta: "pitkien" nimien taulukot eivät ole superglobaaleja).
$GLOBALS Joukko kaikkia globaaleja muuttujia (mukaan lukien käyttäjän muuttujat). $_SERVER(analogi vanhentuneelle - $HTTP_SERVER_VARS) Sisältää ympäristömuuttujat, jotka käyttöjärjestelmä välittää palvelimelle. $_ENV(suu $HTTP_ENV_VARS) Nykyiset ympäristömuuttujat ( eng. Environment variables ). Niiden joukko on erityinen alustalle, jolla komentosarja on käynnissä. $_GET(suu $HTTP_GET_VARS) Sisältää URI:ssa kysymysmerkin " ?" jälkeen välitetyn GET-pyynnön parametrit. $_POST(suu $HTTP_POST_VARS) Assosiatiivinen joukko HTML-lomakekenttien arvoja, kun ne lähetetään POST-menetelmällä. Elementtiindeksit vastaavat nameHTML-lomakkeen objektien (painikkeet, lomakkeet, valintanapit, valintaruudut jne.) ominaisuuden arvoa. $_FILES(suu $HTTP_POST_FILES) Assosiatiivinen taulukko, jossa on tietoja POST-menetelmällä lähetetyistä tiedostoista. Jokaisella elementillä on indeksi, joka on identtinen lomakkeen "nimen" määritteen arvon kanssa, ja puolestaan on myös taulukko seuraavilla elementeillä:Avainsana classoli varattu kielen kolmannelle versiolle. Neljännessä versiossa oli mahdollista luoda luokkia ja objekteja niiden perusteella. OOP-periaatteita tuettiin kuitenkin vain osittain, esimerkiksi kaikki jäsenet (muuttujat ja menetelmät) olivat julkisia. Lisäksi esineiden luominen oli kallista ja hidasta.
PHP: llä on täysi OOP -tuki version 5 jälkeen . Työskentely luokkien kanssa on optimoitu ja nyt tällainen koodi toimii melko nopeasti.
PHP :n luokka ilmoitetaan komennolla class. Luokkamenetelmät ja ominaisuudet voivat olla julkisia ( public, oletus), suojattuja ( protected) ja piilotettuja ( private). PHP tukee kaikkia kolmea pääasiallista OOP-mekanismia - kapselointia , alatyypin polymorfismia ja periytymistä (yläluokka määritellään avainsanalla extendsluokan nimen jälkeen). Liitännät ovat tuettuja (kartoitettu :lla implements). Lopullisten , abstraktien menetelmien ja luokkien ilmoittaminen on sallittua . Useita luokkien periytymistä ei tueta, mutta luokka voi toteuttaa useita rajapintoja. Avainsanalla päästään pääluokan menetelmiin . parent
Versiosta 5.4.0 lähtien moniperintö voidaan toteuttaa ominaisuusmekanismin avulla . Ominaisuudet ovat samanlaisia kuin mikseissä , paitsi että niitä ei voi instantoida suoraan . Koodin uudelleenkäyttö on ominaisuuskoodin käyttöä useissa luokissa. Yhdessä luokassa on sallittua käyttää useita ominaisuuksia. Ominaisuusmekanismilla on keino ratkaista nimiristiriidat. Kun ohjelma ajetaan, ominaisuuden koodi "käännetään" sen sisältävän luokan koodiksi.
PHP:n luokissa on useita "magic" menetelmiä ( eng. magic method ), jotka alkavat kahdella alaviivalla - konstruktori ( __construct(), versiota 5.0 vanhemmissa versioissa konstruktori oli samanniminen metodi kuin luokka) ja destructor ( __destruct()), sekä luku- ( __get()) ja kirjoitustavat ( __set()), taitto ( __sleep()) ja laajentaminen ( __wakeup()), kloonaus ( __clone()) jne. Nämä menetelmät ovat melko joustavia työkaluja: määrittämällä ne uudelleen, voit saavuttaa merkittävän muutoksen esine.
Kaikki jäsentoiminnot on toteutettu virtuaalisina ja siksi ne kaikki ovat menetelmiä.
Luokan ilmentymät luodaan avainsanalla new, objektin ominaisuuksiin ja menetelmiin päästään operaattorilla ->. Muuttujalla päästään luokan jäseniin sen menetelmistä $this.
luokka C1 laajentaa C2 toteuttaa I1 , I2 { yksityinen $a ; suojattu $b ; julkinen toiminto __Construct ( $ a , $ b ) { Parent :: __construct ( $ a , $ b ); $ this -> a = $ a ; $ this -> b = $ b ; } julkinen funktio plus () { return $this -> a + $this -> b ; } /* ............... */ } $d = uusi C1 ( 1 , 2 ); echo $d -> plus (); // 3Koska php 5, objektit ohitetaan viitteellä:
class A { public $color = 'punainen' ; } $a = uusiA ( ); kaiku $a -> väri ; // punainen $b = $a ; $b -> väri = 'sininen' ; kaiku $a -> väri ; // sininen"Paamayim Nekudotayim" ( heprea : פעמיים נקודתיים) tai yksinkertaisesti "kaksoispiste". Käyttämällä tätä merkkiä ohjelmoija voi käyttää luokan vakioita, staattisia tai ylikuormitettuja ominaisuuksia tai menetelmiä. Ohjelmoijan tulee käyttää luokan nimeä viitattaessa näihin elementteihin luokan ulkopuolelta. "Paamayim Nekudotayim" saattaa ensi silmäyksellä tuntua oudolta lauseelta kaksoispisteelle. Kuitenkin luodessaan Zend Enginen versiota 0.5 (joka sisältyi PHP3:een) Andi ja Zeev valitsivat tämän merkintätavan [43] . "Paamayim Nekudotayim" tarkoittaa todella "kaksoispiste" (kirjaimellisesti: "kaksoispiste") hepreaksi. Tämä merkintätapa ei ole koskaan muuttunut PHP:n kehityksen aikana [44] .
class MyClass { public const CONST_VALUE = 'Vakioarvo' ; } // Käyttäen :: luokan ilmoituksen ulkopuolella echo MyClass :: CONST_VALUE ;Tulkki käsittelee yleensä PHP-skriptit järjestyksessä, joka varmistaa, että kehitetty sovellus on monialustainen :
Aiemmin sovellusten suorituskyvyn lisäämiseksi oli mahdollista käyttää erityisiä ohjelmistoja , niin kutsuttuja kiihdyttimiä . Niiden toimintaperiaate on tallentaa kerran generoitu tavukoodi muistiin ja/tai levylle välimuistiin , jolloin vaiheet 1-3 jätetään sovellusprosessin ulkopuolelle, mikä yleensä johtaa merkittävään nopeuttamiseen. Versiosta 5.5 lähtien yksi kiihdyttimistä, opcache , on rakennettu ytimeen, joten kolmannen osapuolen ratkaisut eivät ole enää suosittuja.
Tärkeä ominaisuus on, että kehittäjän ei tarvitse huolehtia muistin varaamisesta ja vapauttamisesta . PHP-ydin toteuttaa toiminnot automaattiseen muistinhallintaan; kaikki varattu muisti palautetaan järjestelmään komentosarjan päätyttyä [45] .
Tulkki koostuu ytimestä ja laajennuksesta , "laajennuksista" , jotka ovat dynaamisia kirjastoja . Laajennusten avulla voit täydentää kielen ydinominaisuuksia tarjoamalla ominaisuuksia työskennellä tietokantojen , pistorasioiden , dynaamisen grafiikan , salauskirjastojen , PDF -asiakirjojen ja vastaavien kanssa. Kuka tahansa voi kehittää oman laajennuksensa ja yhdistää sen. Kolmansien osapuolien ja harrastajien luomalla on valtava määrä laajennuksia, sekä standardia että luomalla, mutta vain muutama tusina hyvin todistettua yritystä sisältyy vakiopakettiin. PECL -arkistossa on saatavana monia laajennuksia .
Version 7.4.0 jälkeen FFI -tuki on lisätty PHP: hen, mikä yksinkertaistaa huomattavasti vuorovaikutusta millä tahansa muulla kielellä kirjoitettujen kirjastojen kanssa (mukaan lukien käyttöjärjestelmän tarjoama sovellusliittymä). Tämä uusi toiminto puolestaan tarjosi vaihtoehdon laajennusten kirjoittamiselle. Näin ollen FFI:n avulla voit kirjoittaa koodia PHP:llä ja olla vuorovaikutuksessa minkä tahansa järjestelmän kirjastojen kanssa, jotka tarjoavat cdecl, fastcalltai stdcall ABI :n .
PHP -tulkilla on erityinen kokoonpanotiedosto - php.inijoka sisältää monia asetuksia, muuttaen, mikä vaikuttaa tulkin käyttäytymiseen [46] . It is possible to disable the use of a number of functions, change the limits on the RAM used by the script, the execution time, the size of downloaded files, configure error logging, work with sessions and mail services, connect additional extensions, and paljon enemmän. Suuri kokoonpanotiedosto on mahdollista jakaa osiin. Esimerkiksi, on yleinen käytäntö laittaa laajennusasetukset erillisiin tiedostoihin. Tulkkivaihtoehdot voidaan ohittaa HTTP -palvelimen määritystiedostoissa (esimerkiksi Apache.htaccess ) tai itse skriptissä suorituksen aikana [47] -komennolla . ini_set
SAPI on ulkoinen abstraktiokerros, joka on suunniteltu upottamaan tulkki muihin sovelluksiin ja vastaa sen toiminnasta (käynnistys, pysäytys, komentosarjojen välittäminen suoritettaviksi, pääsy ulkoisiin tietoihin). On olemassa useita tärkeimpiä SAPI:ita, jotka määrittelevät, kuinka PHP:tä voidaan ajaa ja käyttää:
PHP 5.4.0:sta alkaen SAPI CLI pystyy ajamaan PHP:tä itsenäisenä HTTP-palvelimena. Tämä tila on kuitenkin vain kehitystä varten, koska se suorittaa vain yhden tulkkiprosessin ja suorittaa kaikki kyselyt puhtaasti peräkkäin.
PHP:llä on muutamia pääsiäismunia (vitsejä). Erityisten GET-parametrien välittäminen mille tahansa php-skriptille tuottaa erilaisia kuvia.
Esimerkiksi:
any_script.php? = PHPE9568F36-D428-11D2-A769-00AA001ACF42Kun kirjoitat tämän arvon selaimen osoitepalkkiin, näet erilaisia kuvia tulkin versiosta riippuen:
Seuraavat kaksi arvoa antavat sinun nähdä tavallisen PHP- ja ZEND-logon [49] :
any_script.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
any_script.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42Nämä arvot voidaan saada myös suoraan PHP-skriptissä funktioiden php_logo_guidja zend_logo_guidZend-logon avulla.
On myös erityinen arvo näyttää luettelo kaikista PHP (4,5) [49] kirjoittajista :
any_script.php? = phpb8b5f2a0-3c92-11d3-a3a9-4c7b08c10000
PHP -kielen suosion ja halun lisätä sen perusteella olevien verkkosovellusten nopeutta on luotu useita vaihtoehtoisia kääntäjiä , jotka ovat lähellä PHP -kieltä. Joten helmikuussa 2010 Facebook avasi [ 50] [51] sen PHP -kääntäjä - HIPHOP ( HPHP , hyper -php), joka tuottaa C ++ -koodin , jota seuraa kokoaminen konekoodiin GCC : n avulla . Heinäkuussa 2013 venäläinen yritys VKontakte julkisti vastaavan tuotteen, KPHP [52] .
Taulukko sisältää luettelon nykyisistä vaihtoehtoisista toteutuksista.
Nimi | PHP-versio (noin) | Lisenssi | Kokoonpanon tulos |
---|---|---|---|
PHP | 7.4 | GPL | C++ , alkuperäinen koodi |
hiphop | 5.4 | PHP -lisenssi | C++ , alkuperäinen koodi |
Roadsend PHP | 5.3 | GPL / LGPL | C , konekoodi |
Phalanger | 5.5 | Ms SS-PL [53] ( Jaettu lähde ) | Microsoft IL |
Quercus (osa hartsin verkkopalvelinta ) | 5.2 | GPL tai kaupallinen | JVM |
PHC | 5.2 | BSDL | C , konekoodi |
PIPP [54] | 5.3 | Taiteellinen lisenssi ja GNU GPL | Papukaija |
JPHP [55] | 7.1 (osittain 7.2, 7.3 ja 7.4) [56] | Apache 2.0 | JVM |
PHP | 5.4 | MIT | PHP |
PH7 | 5.5 | Oma (Symisc Public License) | C , konekoodi |
HippyVM | 5.6 | MIT | RPython/PyPy |
Joidenkin kääntäjien vertaileva analyysi on saatavilla osoitteessa phpclasses.org [57] .
PHP on suosituin sisällönhallintajärjestelmien (CMS) kehittämiskieli.
Nimi | Lisenssi |
---|---|
Codelobster | Ilmainen ohjelmisto |
Komodo | Mozillan kolmilisenssi ( MPL / LGPL / GPL ) [58] |
phpsstorm | Oma ohjelmisto |
PHP-kehitystyökalut | Eclipse julkinen lisenssi |
Zend-studio | shareware |
Aptana Studio | GNU GPL |
phpDesigner | shareware |
PHP Expert Editor | Shareware [59] |
NetBeansIDE | CDDL |
RadPHP XE | oikeudenkäyntiä |
NuSphere | oikeudenkäyntiä |
KDevelop [60] | GNU GPL |
Microsoft Web Matrix | Ilmainen ohjelmisto |
Muistio++ | GNU GPL |
Ylivoimaista tekstiä | Oma ohjelmisto |
VS.Php Visual Studiolle | Oma ohjelmisto |
PHP-työkalut Visual Studiolle | oikeudenkäyntiä |
Kehrä | MPL-2.0 |
jedit | GNU GPL -2.0 |
PHP Standard Recommendation ( lyhenne PSR [ ) on PHP-spesifikaatio, jonka on kehittänyt, hyväksynyt ja julkaissut joukko arvovaltaisia PHP-projekteja, mukaan lukien CakePHP, Composer , Joomla, PEAR , Phalcon, phpDocumentor , TYPO3, Yii-kehys [61] . Spesifikaatio toimii PHP-ohjelmointikonseptien standardointina ja perustuu todelliseen kokemukseen sekä tutkimukseen ja kokeiluun [62] . Suositusten tarkoituksena on varmistaa eri kehittäjien kehittämien verkkosovelluskomponenttien yhteensopivuus.
PHP-kielen kannattajat mainitsevat sen tärkeimpinä etuina laajan käytön, PHP-kehittäjien kysynnän työmarkkinoilla ja oppimisen helppouden. Kielen etuja ovat sen melko nopea kehitys.
Support for strings with multibyte encodings (such as UTF-8 ) is implemented through separate extensions mbstringand iconv, there is no support at the kernel level, however, since PHP 4.2.0 it is possible to override the standard functions for working with strings, replacing ne Mbstringin analogeilla. Tuki monitavuisille koodauksille kaikissa merkkijonofunktioissa on ollut saatavilla versiosta 5.4.0 (maaliskuu 2012) lähtien.
Kieli ei tarjoa mahdollisuutta luoda monisäikeisiä sovelluksia, eikä resurssien synkronoitua käyttöä tueta, mutta se on toteutettu PCNTL-laajennuksella [63] ( englanninkielisestä prosessiohjauksesta ), mutta se ei sovellu. tiettyjen ongelmien ratkaisemiseen.
Vaikka "rehellisille" säikeille on mahdollista asentaa pthreads-laajennus, tätä varten tulkki on käännettävä säikeen turvalipulla, ja itse laajennus on poistettu rinnakkaisuuden hyväksi (samalta kirjoittajalta).
Nykyaikaisempi vaihtoehto on käyttää Swoole-laajennusta.
![]() | ||||
---|---|---|---|---|
Temaattiset sivustot | ||||
Sanakirjat ja tietosanakirjat | ||||
|
PHP | |
---|---|
Ihmiset | |
Resurssit |
|
Toteutukset | |
Kehykset |
|
Testaus |
|
Orm | |
IDE |
|
Kääntäjä | Phalanger |
-työkalusarja | |
Kategoria |
Ohjelmointikielet | |
---|---|
|
Ilmainen ja avoimen lähdekoodin ohjelmisto | |
---|---|
Pääasia |
|
Yhteisö |
|
Organisaatiot | |
Lisenssit | |
Ongelmia | |
muu |
|
|
Web ja verkkosivut | |
---|---|
maailmanlaajuisesti | |
Paikallisesti | |
Sivustojen ja palveluiden tyypit |
|
Luominen ja ylläpito | |
Asettelutyypit, sivut, sivustot |
|
Tekninen | |
Markkinointi | |
Yhteiskunta ja kulttuuri |
Vuorovaikutusprotokollat | |
---|---|
Yhdyskäytävät |