PHP | |
---|---|
Nyelvóra | több paradigma , objektumorientált , imperatívusz |
Megjelent | 1995. június 8. [5] [6] |
Szerző | Rasmus Lerdorf [3] |
Fejlesztő | Rasmus Lerdorf [1] , Andy Gutmans [1] , PHP Group [d] , Zend Technologies [2] és Zeev Sourasky |
Fájlkiterjesztés _ | .php[7] |
Kiadás |
|
Befolyásolva | C++ , Perl [8] , C [8] , Java [8] , Tcl [9] , HTML és JavaScript |
Engedély | PHP licenc [10] |
Weboldal | php.net _ |
OS | Unix-szerű operációs rendszer és Microsoft Windows |
Médiafájlok a Wikimedia Commons oldalon |
PHP ( /pi:.eɪtʃ.pi:/ angol PHP: Hypertext Preprocessor - "PHP: hypertext preprocessor "; eredetileg PHP / FI (Personal Home Page / Form Interpreter), később Személyes kezdőlap eszközöknek [11] - " Eszközök személyes weboldalak létrehozásához") egy általános célú C-szerű szkriptnyelv [12] , amelyet intenzíven használnak webes alkalmazások fejlesztésére. Jelenleg a tárhelyszolgáltatók túlnyomó többsége támogatja, és ez az egyik vezető nyelv a dinamikus webhelyek létrehozásához [13] .
A nyelvet és annak tolmácsát ( Zend Engine ) egy nyitott forráskódú projekt [14] részeként fejleszti lelkesek egy csoportja . A projektet saját licence alapján terjesztik , ami nem kompatibilis a GNU GPL -lel .
A webprogramozás területén, különösen a szerver oldalon, a PHP az egyik legnépszerűbb szkriptnyelv (a JSP , Perl és az ASP.NET -ben használt nyelvek mellett ).
A webhelyek készítése terén a népszerűséget a beépített eszközök és a webalkalmazások fejlesztéséhez szükséges kiegészítő modulok nagy készletének jelenléte határozza meg [15] . A főbbek a következők:
A 2010-es évektől fejlesztők százezrei használták; A keresőmotorok adatain alapuló TIOBE rangsor szerint 2016 májusában a PHP a 6. helyen állt a programozási nyelvek között [13] .
Tartalmazza a LAMP - a webhelyek létrehozására és tárolására szolgáló közös szoftverkészlet ( Linux , Apache , MySQL , PHP), valamint a LEMP - egy ugyanolyan gyakori szoftverkészlet ( Linux , Nginx , MySql , PHP).
A PHP-t használó webhelyek közé tartozik a Facebook , a Wikipedia , a Yahoo! , Baidu .
A nyelv automatikusan támogatja a HTTP Cookie -kat a Netscape szabványoknak megfelelően. Ez lehetővé teszi kis adatszegmensek beállítását és olvasását az ügyféloldalon. A sütikkel való munka munkamenetek (munkamenetek) útján történik. A munkameneteknek van lejárati dátuma (lejárata után az adatok törlődnek), a munkamenetekben különféle típusú adatok tárolhatók és szerkeszthetők, beleértve a szerializáltakat is - a szerializáláson (a folyamat automatikusan megtörténik), PHP objektumok.
A PHP nem az asztali alkalmazások létrehozására koncentrál, de szükség van interfészek létrehozására a szerverek beállításához, a folyamatos végrehajtáshoz, a szkriptek (scriptek) hibakereséséhez, a helyi és tesztszerverek kezeléséhez stb. Emiatt megoldások születtek erre a problémára.
KiterjesztésekA bővítmények fő felhasználási területe felhasználói felület könyvtárak (UI könyvtárak) hozzáadása.
A kiterjesztéseket hagyományosan három csoportra osztják:
A kiterjesztéseket, például a kétirányú wrappert más nyelvek használatára fejlesztették ki PHP-bővítmények írásakor, és fordítva. Például a PSV Component Library egy projekt, amely három alprojektből áll:
A GUI PHP teljes értékű fejlesztői környezeteinek is van helye:
Ebben a kategóriában úttörő a DevPHP-IDE stúdió, amely a Kylixet ( Delphi ) használta az interfész gerinceként, és a phpcli -t használta az egyedi programok létrehozásához.
Tartalmaz egy kódszerkesztőt, több eszközt és egy vizuális HTML-nézegetőt.
2002-ben mutatták be először, mára 3 stabil változata van, de a fejlesztés nem folytatódik - a fő fejlesztő autóbalesetben bekövetkezett halála miatt leállt.
A DevPHP IDE után megjelent egy bővítmény - egy komponenskészlet a CodeGear Rad Studio 2009 -hez, amely php4delphi alapú, némi fejlesztéssel (webes elemek, ellenőr, hibakereső), támogatása négy verzióig tartott, amelyek közül a második a Rad fizetős bővítménybe került. Studio 2010 : lehetőség nyílt szkriptek használatára, webkomponensek stílusozására, stílusok és weboldalak megtekintésére a program felépítése előtt, helyi szerver futtatására, a program önálló alkalmazásként történő létrehozására és a kód hibakeresésére. A Delphi XE kiadásával a bővítmény a RADPHP Xe nevet kapta. Továbbá maga a stúdió Embarcadero Delphi néven vált ismertté, és a bővítményen végzett munkát határozatlan időre felfüggesztették.
2009-ben a php4delphi bázisán elkezdődött a grafikus PHP-alkalmazások létrehozására szolgáló környezet fejlesztése, amelyhez később Rostislav Romanov is csatlakozott. A környezet neve PHP DevelStudio volt, az első közzétett verzió a 0.1.7 volt. A DevelStudio eszköztárában kevés komponens volt, és az elavult PHP 4-en futott. A második verzióban a DevelStudio támogatást kapott a PHP 5-höz. Streamek kerültek hozzáadásra, és számos változtatás és fejlesztés történt. A programok összeállítási kódja lezárult, a program korábbi verziói és a fórumon megjelenő üzenetek a behatolók megelőzése érdekében eltávolítva.
A DevelStudio második verziója is kapott egy AlphaControls komponens készletet, aminek eredményeként az egyszerűsége és áttekinthetősége miatt rosszindulatú programok létrehozására használták. Az akkoriban népszerű antivírusok (MacAffee, AVG , Avira ) vírusként kezdtek felismerni minden, a DevelStudióban lefordított programot.
Egy idő után az AlphaControls szerzője panaszt nyújtott be a DevelStudio fejlesztőihez, és a komponenskészletet teljesen eltávolították a környezetből, azonban megőrizték egy már létező verzióban, amelyet ezúttal nem sikerült eltávolítani a fórumról. .
2012-ben jelent meg a környezet legfrissebb verziója - a 3.0.2, ahol új összetevők jelentek meg, köztük az IE helyett a Chromium böngésző , amely felkeltette a webfejlesztők és az Algorithm környezet felhasználóinak figyelmét. Akkoriban a programok Algorithmban történő összeállítása fizetős volt, így a DevelStudio, mint új és ingyenes fejlesztői környezet, magához csábította a közönség nagy részét.
2014-ben kezdődtek az első kísérletek a környezet helyreállítására, ezúttal a közösség részéről . 2018 végén a forráskód visszaállításra került, és elérhető a GitHubon .
2019-ben a közösség megkereste a DevelStudio készítőjét, hogy változtassa meg a környezet terjesztési politikáját, és tegye elérhetővé azt frissítésre és szerkesztésre. A használt könyvtárakra (DCEF, PHP4Delphi, TSizeCtrl, SynEdit) mutató hivatkozások hiányára vonatkozó panaszok miatt a fórumot eltávolítottuk, az egyik környezetet leíró oldalt pedig az oldal főoldalára irányították át. Mostantól a DevelStudio hivatalosan a közösség tulajdona.
Ezzel párhuzamosan a fő fejlesztő DevelStudio elkezdte létrehozni az előző környezet "reinkarnációját". A JavaFX grafikus könyvtárat vette alapul , ami egy teljesen új környezetet eredményezett, CSS támogatással , de a Zend PHP könyvtár teljes támogatása nélkül – a projekt saját jPHP nyelvén alapult. Jellemzői a következők: munka a JVM -en , JIT fordító, Unicode - támogatás , többszálú feldolgozás és egy objektum-orientált szabványkönyvtár.
A 16. verzióban a DevelNext környezet php 7 támogatást kapott, ezzel párhuzamosan pedig a jPHP-t egy rajongó kiterjesztette az Android operációs rendszer alatti fejlesztésekre .
Jelenleg a szerző és a rajongók a 2020-as (korábban 17-es) verzión dolgoznak.
2015-ben Alexander Kazantsev interfészfejlesztési algoritmusokat kezdett tanulmányozni, és létrehozta a php_qml kiterjesztést, amely lehetővé tette a QT könyvtár widgeteinek használatát, de csak Windows alatt működött.
Ezzel megkezdődött a PHPQt fejlesztése, az első verziók nem fordítottak nagy figyelmet a webfejlesztők részéről, így a szerző a kiterjesztés mélyreható fejlesztésébe kezdett.
2015. július 28-án jelent meg a projektfordító első verziója, amely akkoriban egy egyszerű szkript (script) végrehajtó volt, amely php kódot csatolt a csonkhoz (mint a DevelStudio), és függött a Windows API-tól, Ebben a szakaszban szinte minden widget támogatott és többszálas volt, egyszerű volt a php kód optimalizálása. Ettől a pillanattól kezdve a motor neve PQEngine,
2016. augusztus 3-án jelent meg az alkalmazásfordító (PqBuilder) ötödik verziója, amely PlastiQ alapra váltott, és támogatta a legújabb, akkori php 7-et, a projektek teljesebb fordítót kaptak, és már nem kellett hozzá. jelenléte PqEngine.dll a végrehajtható fájl közelében, ehelyett Ez a vizuális könyvtárak elkezdték dinamikusan hozzáadni - fájlként, és nem varrva a PQEngine.dll-be. Ezt a lépést a más rendszerekkel és az eredeti Qt könyvtárakkal való kompatibilitás érdekében tették meg.
A hatodik verzió megjelenésével a projekt a Qt Studio környezet kiegészítője lett, a fordító pedig csak egy kódoptimalizáló lett a program végső összeállítása előtt. Megjelent egy teljes értékű felületszerkesztő, tippek a kódszerkesztőben, és elkezdődött a dokumentáció elkészítése. Ettől a pillanattól kezdve bejelentést tettek a PqStudio környezet létrehozásáról, de fejlesztése nem ment messzire.
2018-ban megjelent egy projekt, amely a Windows Forms (.NET Framework) és a PHP 7 képességeit ötvözi, fejlesztése még mindig lassú ütemben zajlik.[ mikor? ] . Jelenleg szinte minden elérhető a motorban[ mi? ] függvények az OOP-hoz. A környezet privát fejlesztés alatt áll. Az alapértelmezett végrehajtható fájl a php7ts.dll fájllal érkezik.
PHP csatlakoztatása projekthezLéteznek kiterjesztések is az ellenkező felhasználásra - a PHP összekapcsolása egy másik programozási nyelvű projekttel: Phalanger (C#, php 5.4-től 7-ig), Peachpie] (C#, php 7), PHP4Delphi (Lazarus, Delphi, C#, C, C++ , php 5.6, JPHP (Java, php 7.0), PHPly (Python, php 5.6)
1994 -ben a dán programozó , Rasmus Lerdorf C [16] nyelven kifejlesztett egy CGI-szkriptet , hogy figyelembe vegye a látogatók online önéletrajzát , amely HTML dokumentumsablonokat dolgoz fel. Lerdorf a készletet Personal Home Page Tools (Eszközök személyes kezdőlaphoz ) néven nevezte el. Hamarosan a funkcionalitás már nem volt elegendő, és Lerdorf kifejlesztett egy új PHP/FI sablontolmácsot ( English Personal Home Page / Forms Interpreter – „személyes honlap / űrlaptolmács”) [17] .
1995. június 8-án megjelent a Personal Home Page (PHP Tools) 1.0-s verziója – az első nyilvános kiadás.
1997- ben, hosszas bétatesztelés után, megjelent a C nyelven írt kezelő második verziója - a PHP / FI 2.0. A világ összes internetes domainjének körülbelül 1%-a (körülbelül 50 ezer) használta [11] .
A PHP 3.0 jelentős átalakításon esett át, amely meghatározza a programozási nyelv modern megjelenését és stílusát. 1997-ben két izraeli programozó, Andy Gutmans és Zeev Suraski teljesen átírta a tolmács kódját. A PHP 3.0 hivatalosan 1998 júniusában jelent meg [11] .
A PHP 3.0 egyik erőssége az volt, hogy a magot további modulokkal bővítették. Ezt követően a kiterjesztés írási felülete sok külső fejlesztőt vonzott a PHP-hez, akik moduljaikon dolgoznak, ami lehetővé tette a PHP számára, hogy rengeteg adatbázissal , protokollal dolgozzon , és nagyszámú API -t támogasson . A fejlesztők nagy száma a nyelv gyors fejlődéséhez és népszerűségének gyors növekedéséhez vezetett. Ebben a verzióban a php betűszó a "PHP: hypertext Preprocessor" rövidítése, az elavult "Személyes kezdőlap" helyett.
1998 telén, szinte közvetlenül a PHP 3.0 hivatalos kiadása után, Andy Gutmans és Zeev Suraski megkezdte a PHP mag átdolgozását. A célok között szerepelt az összetett alkalmazások teljesítményének növelése és a PHP kódbázis modularitásának javítása. Az új motor, a Zend Engine sikeresen megbirkózott a feladatokkal, és először 1999 közepén mutatták be . A PHP 4.0 , amely ezen a motoron alapul, és további funkciókat hoz magával, hivatalosan 2000 májusában jelent meg . A teljesítménynövekedés mellett a PHP 4.0 számos más kulcsfontosságú újítást is tartalmazott, mint például a munkamenet-támogatás, a kimeneti pufferelés , a felhasználói bevitel biztonságosabb kezelési módjai és számos új nyelvi konstrukció.
A PHP ötödik verzióját 2004. július 13-án adták ki a fejlesztők . A változtatások közé tartozik a Zend mag frissítése ( Zend Engine 2 ), ami jelentősen növelte az interpretátor hatékonyságát . Bevezettük az XML jelölőnyelv támogatását . Az OOP függvényeket teljesen újratervezték , és nagyon hasonlítanak a Java -ban használt modellhez . Különösen egy destruktor került bevezetésre , nyilvános, privát és védett tagok és módszerek , végső tagok és módszerek, interfészek és objektumok klónozása. A későbbi verziók névtereket , lezárásokat és számos meglehetősen komoly változtatást is bevezettek, mennyiségileg és minőségileg összehasonlíthatóak a PHP 5.0-ra való átállás során megjelentekkel.
A PHP hatodik verziója 2006 októbere óta fejlesztés alatt áll [18] . Számos újítás született [19] [20] , például a POSIX reguláris kifejezések és a "hosszú" szuperglobalok eltávolítása a magból, valamint a safe_mode , magic_quotes_gpc és register_globals direktívák eltávolítása a php.ini konfigurációs fájlból. Az egyik fő újításnak a Unicode támogatása volt [21] . 2010 márciusában azonban a PHP6 fejlesztését kilátástalannak ítélték [22] az Unicode támogatással kapcsolatos nehézségek miatt. A PHP6 forráskódja átkerült a -ba , és az 5.4-es verzió lett a fejlesztés fő vonala.
2014-ben szavazást tartottak, melynek eredményeként a következő verzió a PHP 7 nevet kapta [23] . Az új verzió megjelenését 2015. október közepére tervezték [24] . 2015 márciusában a Zend kiadott egy infografikát , amely felvázolja a PHP 7 főbb újításait [25] .
2015. december 3- án bejelentették a PHP 7.0.0-s verzióját [26] .
Az új verzió a PHP egy kísérleti ágán alapul , amelyet eredetileg phpng -nek ( PHP Next Generation "next generation") hívtak, és a teljesítmény növelésére és a memóriafogyasztás csökkentésére összpontosítva fejlesztették ki [27] . Az új verzió lehetőséget ad a [28] függvényből visszaadott adatok típusának megadására , hozzáadott típusvezérlést az adatokhoz [29] , valamint új operátorokat.
2019. június 13-án megjelent a PHP 7.4. A maghoz tipizált tulajdonságok és nyílfüggvények kerültek, valamint korlátos visszatérési típusú kovariancia és argumentum típusú kontravariancia [30] .
A PHP 8.0-s verziója 2020. november 26-án jelent meg [31] . A főbb újítások a következők voltak [32] : szakszervezeti típusok [33] támogatása , JIT összeállítás [34] és attribútumok (más néven annotációk), továbbá a kapcsoló „konstrukciója” egy megfelelő „kifejezésre” került, és egy új Nullsafe operátor került. tette hozzá.
2020. július 9-én Dale Hirt , a Microsoft PHP projektmenedzsere üzenetet [35] adott ki egy levelezőlistán , amely szerint a PHP 8.0 megjelenése után a Microsoft leállítja ennek a programozási nyelvnek a Windows -hoz való fejlesztésének támogatását [36] . A Microsoft szakemberei a tolmács bináris verzióit fordították Windowsra, és tesztelték azok biztonságát. A PHP fejlesztői közösség arról számolt be, hogy minden szükséges intézkedést megtesznek annak érdekében, hogy a közeljövőben alternatív lehetőséget találjanak a PHP 8.0 és újabb támogatásának megszervezésére a Windows számára, például önállóan [37] . php.internals
A PHP szintaxisa hasonló a C nyelvéhez . Egyes elemek, mint például az asszociatív tömbök és a ciklus foreach, a Perl -ből származnak .
A PHP lexikális elemzése a re2c [38] [39] segédprogramon keresztül történik , amely gyors és könnyen beágyazható lexereket generál.
Egy egyszerű szkript írásához nem kell leírnia semmilyen változót, használt modult stb. Bármely szkript közvetlenül a <?php.
A PHP legegyszerűbb Hello world programja így néz ki:
<?php echo 'Szia, világ!' ; ?>A karakterlánc kimenet rövidebb változata is lehetséges:
<?= 'Szia, világ!' ?>A nyitó nézet címke a <?=sor megjelenítéséhez használt konstrukciók lerövidítésére szolgál.
A PHP olyan kódot hajt végre, amely határolókon belül van, például <?php ?>. Minden, ami a határokon kívül esik, változatlan formában jelenik meg. Ezt főleg PHP kód beszúrására használják HTML dokumentumba, például:
< html > < fej > < cím > PHP tesztelése </ title > </ head > < body > <?php echo 'Hello world!'; ?> </ body > </ html >A határolójelek <?php ?>mellett megengedett (de elavultnak és gyakorlatilag nem használtnak elismert) a rövidített változat használata <? ?>. Ezenkívül a 7.0-s verzió előtt az ASP <% %> és a <script language="php"> </script>. A parancsikonok működését a php .ini konfigurációs fájl határozza meg .
A változónevek szimbólummal kezdődnek, $a változó típusát nem kell deklarálni. A változó- és konstansnevek megkülönböztetik a kis- és nagybetűket. Az osztályok, osztálymetódusok és függvények nevei nem különböztetik meg a kis- és nagybetűket. A változók feldolgozása dupla idézőjeles karakterláncokban és heredoc karakterláncokban történik (a <<< operátorral létrehozott karakterláncok). Az idézőjelbe zárt karakterláncok és a nowdoc változói nem kerülnek elemzésre.
Az utasításokat pontosvessző választja el ( ;), kivéve néhány esetben az if/else konstrukciók és ciklusok deklarálása után.
A változókat értékkel és hivatkozással is átadhatjuk egy függvénynek (jelet használunk &).
A PHP háromféle megjegyzést támogat: C -style (elhatárolt /* */), C++// ( a sor végével kezdődik és a sor végéig), és UNIX shell ( #a sor végéig).
A PHP egy dinamikusan tipizált programozási nyelv , amely nem igényli a típus megadását a változók deklarálásakor, valamint magát a változó deklarációt sem.
A skaláris adattípusok a következők:
A nem skaláris típusok a következők:
Az egész számok tartománya (int) PHP-ben a platformtól függ (32 bites architektúra esetén a szám tartománya nem haladja meg az int32_t értéket, azaz -2 147 483 648 és 2 147 483 647 között). A számok decimális, oktális és hexadecimális számrendszerben adhatók meg . A valós számok tartománya (lebegő) a platformtól is függ (32 bites architektúra esetén a tartomány lehetővé teszi, hogy ±1,7 × 10 -308 és ± 1,7 × 10 +308 közötti számokkal dolgozzon ).
A PHP egy logikai típust biztosít a fejlesztőknek, amely csak két értéket vehet fel true("igaz") és false("false"). Logikai értékre konvertálva a 0 számot, az üres karakterláncot, a nullát a „0” karakterláncban nullés az üres tömböt egyenlőnek tekintjük false. Az összes többi érték automatikusan konvertálódik értékre true.
A speciális null típus a meghatározott érték nélküli változókra vonatkozik. Ennek a típusnak az egyetlen értéke egy literál null. A null típus elfogadja az inicializálatlan változókat, a konstanssal inicializált változókat, nullvalamint a -val törölt változókat unset().
A külső erőforrásokra mutató hivatkozások erőforrás típusúak. Az ilyen típusú változók általában olyan leírók , amelyek lehetővé teszik a külső objektumok, például fájlok, dinamikus képek, az eredményül kapott adatbázistáblák stb. kezelését. A nyelv fejlődésével a szabványos könyvtár fokozatosan finomodik, és az erőforrásokat objektumok váltják fel. . Így a tervek szerint ettől a típustól teljesen megszabadulnak.
A tömbök (tömbök) támogatják a numerikus és karakterlánc-kulcsokat, és heterogének . A tömbök bármilyen típusú értéket tartalmazhatnak, beleértve a többi tömböt is. Az elemek és kulcsaik sorrendje megmarad. Nem teljesen helyes a php tömbök tömböket hívni, valójában ez egy rendezett hash . Váratlan viselkedés lehetséges, ha a ciklus forhelyett számlálót használunk foreach. Így például ha egy numerikus indexű tömböt a szabványos könyvtár függvényei szerint rendezünk, a kulcsok is rendezésre kerülnek.
GépelveA nyelv lehetővé teszi argumentumok, függvények és osztálymetódusok visszatérési értékeinek beírását, valamint a 7.4-es verziótól kezdve az osztálymezők beírását . A szigorú mód engedélyezése letiltja az implicit típuskonverziókat a kód ezen szakaszaiban, ami közelebb hozza a nyelv viselkedését az erős gépelést használó nyelvekhez .
A , , , vagy típusok integy stringargumentumtípus float, osztálymező vagy visszatérési érték érvényes definíciói bool. Az osztályok vagy interfészek nevének használata is megengedett egy adott megvalósítás meghatározásához. Típusmeghatározásra használata nem megengedett, és a jelzés megszorításokkal lehetséges: Csak az összegtípus definícióján belül , például (vagy ). arrayobjectresourcenullint|null?int
A modern PHP alapvető támogatást valósít meg az algebrai adattípusokhoz, és lehetővé teszi a konjunkció és a diszjunkció használatát a típusok meghatározásakor. A nyelv nem engedélyezi a típusálneveket , de számos beépített implementációt biztosít, amelyeket "pszeudotípusoknak" neveznek a PHP-n belül. A nyelvben található hasonló kifejezés minden olyan típusdefinícióra vonatkozik, amely nem független, alkalmazható egy értékre, de csak típusellenőrzési utasításként van megvalósítva a Zend VM-ben.
A pszeudotípusok a következők:
A típusellenőrzések mellett a beépített "pszeudotípusok" további ellenőrzési logikát is megvalósíthatnak. Például callableegy típus ábrázolható:
A PHP támogatja mind a megnevezett függvények deklarálását, mind az első osztályú névtelen függvényeket , például:
// Egy elnevezett függvény deklarációja function get_hello_world () : string { return 'Hello World!' ; } // Névtelen függvénydeklaráció $getHelloWorld = function () : string { return 'Hello World!' ; }; // Rövid szintaxis $getHelloWorld = fn () : string => 'Hello World!' ;Érdemes megjegyezni, hogy az anonim függvények esetében a különbség nem csak a vizuális különbségekben van, hanem a külső kontextusváltozók rögzítésének módjában is. A jelölés bármely "rövid" formája lezárás , míg a lezárás megvalósításához szükséges hosszú jelölésekhez explicit módon kell megadni az operátoron belüli változókat useegy külső kontextusból, hogy rögzítsék őket:
$variable = 'Hello World!' ; // Utasítás használata use function () use ( $variable ) : string { return $változó ; }; // Alternatív megoldás, rövid fn () szintaxis használatával : string => $változó ;$A változókat a szimbólummal , majd a változó nevével lehet elérni . Ez a konstrukció dinamikus változók és függvények létrehozására is használható. [41] Például:
$a = 'A vagyok' ; // Érték írása a $a echoba $a ; // $a kimeneti változó $b = 'a' ; echo $$b ; // $a változó megjelenítése (extra $ a $b változó előtt) echo $ { 'a' }; // $a kimeneti változó függvény_neve (); // Funkció hívása függvény_neve $c = 'függvény_neve' ; $c (); //A függvény_neve függvény meghívása $d = 'Osztálynév' ; $obj = új Osztálynév ; // Osztálynév objektum létrehozása $obj = new $d (); // Osztálynév objektum létrehozása $obj -> b osztályból ; // Az objektum b tulajdonságának elérése $obj -> c (); // Az objektum c() metódusának meghívása $obj -> $b ; // Az objektum a tulajdonságának elérése, mivel $b = 'a' $obj -> $c (); // Az objektum function_name() metódusának meghívása, mivel $c = 'function_name'A PHP echo-ben, printbár függvényeknek tűnnek, az előbbi egy [42] operátor , az utóbbi pedig egy kifejezés (vagyis printértéket ad vissza, ellentétben a -val echo). Használatuk során a zárójelek elhagyhatók.
A PHP szuperglobális tömbjei előre meghatározott tömbök, amelyek globális hatókörrel rendelkeznek az irányelv használata nélkül . A legtöbb ilyen tömb tartalmazza a felhasználó kérésének bemeneti adatait ( GET kérés paraméterei, űrlapmezők, ha POST metódussal küldik , cookie -k stb.). global
$GLOBALSA és kivételével minden szuperglobal $_REQUESTrendelkezik elavult, hosszú nevű megfelelőivel, amelyek az 5.3-as verzióig elérhetők. x (mivel az 5.4.0-t eltávolították). Így a $_GET['year']és a meghívások $HTTP_GET_VARS['year']azonosak (kivéve a hatókört: a "hosszú" nevű tömbök nem szuperglobálisok).
$GLOBALS Az összes globális változó tömbje (beleértve a felhasználói változókat is). $_SERVER(analóg az elavulthoz - $HTTP_SERVER_VARS) Olyan környezeti változókat tartalmaz, amelyeket az operációs rendszer továbbít a kiszolgálónak. $_ENV(száj $HTTP_ENV_VARS) Jelenlegi környezeti változók ( eng. Environment variables ). A készletük arra a platformra vonatkozik, amelyen a szkript fut. $_GET(száj $HTTP_GET_VARS) A " " kérdőjel után az URI-ban átadott GET-kérés paramétereit tartalmazza ?. $_POST(száj $HTTP_POST_VARS) HTML űrlapmezőértékek asszociatív tömbje, amikor a POST módszerrel küldik el. Az elemindexek namea HTML-űrlap objektumai (gombok, űrlapok, rádiógombok, jelölőnégyzetek stb.) egy tulajdonságának az értékének felelnek meg. $_FILES(száj $HTTP_POST_FILES) Egy asszociatív tömb a POST metódussal küldött fájlok információival. Minden elemnek van egy indexe, amely megegyezik az űrlapon lévő "name" attribútum értékével, és egyben egy tömb is a következő elemekkel:A kulcsszó classa nyelv harmadik változatában le van foglalva. A negyedik változatban lehetővé vált osztályok és ezek alapján objektumok létrehozása. Az OOP elveket azonban csak részben támogatták, például minden tag (változók és módszerek) nyilvános volt. Ráadásul az objektumok létrehozása drága és lassú volt.
A PHP teljes OOP -támogatással rendelkezik az 5-ös verzió óta . Az osztályokkal való munkavégzést optimalizálták, és most az ilyen kód meglehetősen gyorsan működik.
A PHP-ben egy osztályclass a következővel van deklarálva . Az osztálymetódusok és -tulajdonságok lehetnek nyilvánosak ( public, alapértelmezett), védettek ( protected) és rejtettek ( private). A PHP mindhárom fő OOP-mechanizmust támogatja - a beágyazást , az altípus-polimorfizmust és az öröklődést (a szülőosztályt az osztály neve után egy kulcsszó határozza meg extends). Az interfészek támogatottak (leképezve: implements). A végleges , absztrakt metódusok és osztályok deklarálása megengedett. Az osztályok többszörös öröklése nem támogatott, azonban egy osztály több interfészt is megvalósíthat. A kulcsszó a szülőosztály metódusainak elérésére szolgál parent.
Az 5.4.0 - s verzió óta a többszörös öröklődés is megvalósítható a tulajdonságmechanizmus segítségével . A funkciók hasonlóak a mixinekhez , azzal a különbséggel, hogy közvetlenül nem példányosíthatók . A kód újrafelhasználása abban rejlik, hogy több osztályban használjuk a szolgáltatáskódot. Egy osztályban több szolgáltatás használata megengedett. A szolgáltatások mechanizmusának van egy eszköze a névütközések feloldására. Amikor a program fut, a szolgáltatás kódja „le lesz fordítva” az azt tartalmazó osztály kódjába.
A PHP osztályaiban számos „mágikus” metódus található ( eng. magic method ), két aláhúzásjellel kezdve - egy konstruktorral ( __construct(), az 5.0 előtti verziókban a konstruktor az osztályéval azonos nevű metódus volt) és a destruktorral ( __destruct()), valamint olvasási ( __get()) és írási ( __set()), hajtogatási ( __sleep()) és bővítési ( __wakeup()), klónozási ( __clone()), stb. módszerek. Ezek a módszerek meglehetősen rugalmas eszközök: újradefiniálásával jelentős változást érhetünk el a tárgy.
Minden tagfüggvény virtuálisként van megvalósítva, ezért mindegyik metódus.
Egy osztály példányai a kulcsszó használatával jönnek létre new, az objektum tulajdonságai és metódusai az operátor segítségével érhetők el ->. A változó az osztály tagjainak eléréséhez használható a metódusaiból $this.
osztály C1 kiterjeszti C2 implements I1 , I2 { private $a ; védett $b ; public function __construct ( $a , $b ) { szülő :: __construct ( $a , $b ); $this -> a = $a ; $ez -> b = $b ; } public function plus () { return $this -> a + $this -> b ; } /* ............... */ } $d = új C1 ( 1 , 2 ); echo $d -> plusz (); 3A PHP 5 óta az objektumok hivatkozással kerülnek átadásra:
class A { public $color = 'piros' ; } $a = újA ( ); visszhang $a -> szín ; // piros $b = $a ; $b -> szín = 'kék' ; visszhang $a -> szín ; // kék"Paamayim Nekudotayim" ( héberül : פעמיים נקודתיים) vagy egyszerűen "kettős kettőspont". Ezzel a tokennel a programozó hozzáférhet az osztály állandóihoz, statikus vagy túlterhelt tulajdonságaihoz vagy metódusaihoz. Amikor ezekre az elemekre az osztályon kívülről hivatkozik, a programozónak az osztály nevét kell használnia. A "Paamayim Nekudotayim" első pillantásra furcsa kifejezésnek tűnhet a kettős kettőspontra. Azonban a Zend Engine 0.5-ös verziójának (amely a PHP3-ban szerepelt) létrehozásakor Andi és Zeev ezt a jelölést választották [43] . A "Paamayim Nekudotayim" valójában azt jelenti, hogy "kettős kettőspont" (szó szerint: "kettős kettőspont") héberül. Ez a jelölés soha nem változott a PHP fejlesztése során [44] .
class MyClass { public const CONST_VALUE = 'Állandó érték' ; } // A :: használata az osztálydeklaráción kívül echo MyClass :: CONST_VALUE ;A PHP szkripteket általában a tolmács olyan sorrendben dolgozza fel, amely biztosítja, hogy a kifejlesztett alkalmazás többplatformos legyen:
Korábban az alkalmazások teljesítményének növelése érdekében speciális szoftvereket , az úgynevezett gyorsítókat lehetett használni . Működésük elve az, hogy az egyszer generált bájtkódot gyorsítótárazzák a memóriában és/vagy a lemezen , így az 1-3. Az 5.5-ös verzió óta az egyik gyorsító, az opcache be van építve a kernelbe, így a harmadik féltől származó megoldások már nem népszerűek.
Fontos jellemzője, hogy a fejlesztőnek nem kell aggódnia a memória lefoglalása és felszabadítása miatt. A PHP magja lehetővé teszi az automatikus memóriakezelést; az összes lefoglalt memória visszakerül a rendszerbe, miután a szkript leáll [45] .
Az értelmező egy magból és beépülő modulokból , "kiterjesztésekből" áll , amelyek dinamikus könyvtárak . A bővítmények lehetővé teszik a nyelv alapvető funkcióinak kiegészítését, lehetővé téve az adatbázisokkal , socketekkel , dinamikus grafikával , kriptográfiai könyvtárakkal, PDF -dokumentumokkal és hasonlókkal való munkavégzést. Bárki kifejlesztheti saját kiterjesztését és csatlakoztathatja azt. Rengeteg kiterjesztés létezik, mind a szabványos, mind a külső cégek és a rajongók által készített bővítmények, de csak néhány tucat, jól bevált bővítmény található a standard csomagban. Számos kiterjesztés érhető el a PECL - tárolóban .
A 7.4.0-s verzió óta FFI támogatással bővült a PHP, ami nagymértékben leegyszerűsíti a bármilyen más nyelven írt könyvtárakkal való interakciót (beleértve az operációs rendszer által biztosított API-t is). Ez az új funkció viszont alternatívát jelentett a kiterjesztések írására. Így az FFI használatával kódot írhat PHP-ben, és interakcióba léphet a rendszer bármely könyvtárával, amely biztosítja a cdecl-t fastcallvagy az stdcall ABI -t .
A PHP interpreternek van egy speciális konfigurációs fájlja - php.ini, amely számos beállítást tartalmaz, amelyek megváltoztatása befolyásolja az értelmező viselkedését [46] . Lehetőség van számos funkció használatának letiltására, a szkript által használt RAM korlátainak, a végrehajtási időnek, a letöltött fájlok méretének módosítására, a hibanaplózás konfigurálására, a munkamenetek és levelező szolgáltatásokkal való munkavégzésre, további bővítmények csatlakoztatására, ill. sokkal több. Lehetőség van egy nagy konfigurációs fájl részekre bontására. Például általános gyakorlat, hogy a kiterjesztési beállításokat külön fájlokban helyezik el. Az értelmező beállításai felülbírálhatók a HTTP-kiszolgáló konfigurációs fájljaiban (például .htaccessaz Apache -ban ), vagy magában a szkriptben futás közben a ini_set[47] paranccsal .
A SAPI egy külső absztrakciós réteg , amelyet arra terveztek, hogy értelmezőt ágyazzon be más alkalmazásokba, és felelős annak működéséért (indítás, leállítás, szkriptek átadása végrehajtáshoz, külső adatokhoz való hozzáférés). Számos fő SAPI létezik, amelyek meghatározzák a PHP futtatását és használatát:
A PHP 5.4.0-tól kezdődően a SAPI CLI képes futtatni a PHP-t önálló HTTP-kiszolgálóként. Ez a mód azonban kizárólag fejlesztési célokat szolgál, mivel csak egy értelmezői folyamatot futtat, és minden lekérdezést tisztán szekvenciálisan hajt végre.
A PHP-ben van néhány easter egg (vicc). Speciális GET paraméterek átadása bármely php szkriptnek különféle képek kimenetét eredményezi.
Például:
any_script.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42Ha beírja ezt az értéket a böngésző címsorába, az értelmező verziójától függően különböző képeket láthat:
A következő két érték lehetővé teszi a szabványos PHP és a ZEND logó megtekintését [49] :
any_script.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
any_script.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42Ezek az értékek közvetlenül a PHP szkriptben is beszerezhetők a függvények segítségével php_logo_guidés zend_logo_guida Zend logóhoz.
Van egy speciális érték is az összes PHP (4,5) [49] szerző listájának megjelenítéséhez :
any_script.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
A PHP nyelv népszerűsége és az arra épülő webes alkalmazások sebességének növelése miatt több olyan alternatív fordító is született , amelyek közel állnak a PHP nyelvhez. Így 2010 februárjában a Facebook megnyitotta [ 50] [51] PHP-fordítóját - a HipHop -ot (HPHP, Hyper-PHP), amely C++ kódot generál, majd a gcc segítségével gépi kódra fordítja . 2013 júliusában az orosz VKontakte cég bejelentett egy hasonló terméket, a KPHP -t [52] .
A táblázat a jelenleg létező alternatív megvalósítások listáját tartalmazza.
Név | PHP verzió (kb.) | Engedély | Összeállítás eredménye |
---|---|---|---|
PHP | 7.4 | GPL | C++ , natív kód |
hip-hop | 5.4 | PHP licenc | C++ , natív kód |
Roadsend PHP | 5.3 | GPL / LGPL | C , gépi kód |
Phalanger | 5.5 | Ms SS-PL [53] ( Megosztott forrás ) | Microsoft IL |
Quercus ( a Resin webszerver része ) | 5.2 | GPL vagy kereskedelmi | JVM |
PHC | 5.2 | BSDL | C , gépi kód |
Pipp [54] | 5.3 | Művészi licenc és GNU GPL | Papagáj |
JPHP [55] | 7.1 (részben 7.2, 7.3 és 7.4) [56] | Apache 2.0 | JVM |
PHP | 5.4 | MIT | PHP |
PH7 | 5.5 | Saját (Symisc nyilvános licenc) | C , gépi kód |
HippyVM | 5.6 | MIT | RPython/PyPy |
Egyes fordítók összehasonlító elemzése elérhető a phpclasses.org webhelyen [57] .
A PHP a legnépszerűbb nyelv a tartalomkezelő rendszerek (CMS) fejlesztésében.
Név | Engedély |
---|---|
Codelobster | Ingyenes szoftver |
Komodo | Mozilla háromlicenc ( MPL / LGPL / GPL ) [58] |
phpstorm | Saját szoftver |
PHP fejlesztői eszközök | Eclipse nyilvános licenc |
zend stúdió | shareware |
Aptana Stúdió | GNU GPL |
phpDesigner | shareware |
PHP szakértői szerkesztő | Shareware [59] |
NetBeansIDE | CDDL |
RadPHP XE | próba |
NuSphere | próba |
KDevelop [60] | GNU GPL |
Microsoft Web Matrix | Ingyenes szoftver |
Jegyzettömb++ | GNU GPL |
Magasztos szöveg | Saját szoftver |
VS.Php a Visual Studio számára | Saját szoftver |
PHP eszközök a Visual Studio számára | próba |
DevelNext | MPL-2.0 |
jEdit | GNU GPL -2.0 |
A PHP Standard Recommendation ( röv. PSR [ ) egy PHP specifikáció, amelyet olyan mérvadó PHP projektek csoportja fejlesztett ki, fogadott el és tesz közzé, mint a CakePHP, a Composer , a Joomla, a PEAR , a Phalcon, a phpDocumentor , a TYPO3, a Yii keretrendszer [61]. . A specifikáció a PHP programozási koncepciók szabványosításaként szolgál, és valós tapasztalatokon, valamint kutatásokon és kísérletezéseken alapul [62] . Az ajánlások célja a különböző fejlesztők által fejlesztett webalkalmazás -összetevők kompatibilitásának biztosítása.
A PHP nyelv hívei fő előnyeként a széles körű alkalmazást, a PHP fejlesztők iránti keresletet a munkaerőpiacon és a könnyű tanulást említik. A nyelv előnyei közé tartozik meglehetősen gyors fejlődése.
A többbyte-os kódolású karakterláncok (például UTF-8 ) támogatása külön kiterjesztéseken keresztül valósul meg , mbstringés iconvkernel szinten nincs támogatás, azonban a PHP 4.2.0 óta lehetőség van a karakterláncokkal való munka standard funkcióinak felülírására, helyettesítve az mbstring analógjaival. A többbájtos kódolások támogatása az összes karakterlánc-függvényben az 5.4.0-s verzió (2012. március) óta elérhető.
A nyelv nem teszi lehetővé többszálú alkalmazások létrehozását, és nem támogatja az erőforrásokhoz való szinkronizált hozzáférést, azonban PCNTL kiterjesztéssel [63] valósul meg (az angol process controlból ), de nem alkalmas konkrét problémák megoldására.
Bár a „becsületes” szálakhoz telepíthető a pthreads kiterjesztés, ehhez az értelmezőt a szálbiztonsági jelzővel kell lefordítani, és magát a kiterjesztést is lejáratták a párhuzamos javára (ugyanattól a szerzőtől).
Egy modernebb alternatíva a Swoole kiterjesztés használata.
A közösségi hálózatokon | ||||
---|---|---|---|---|
Tematikus oldalak | ||||
Szótárak és enciklopédiák | ||||
|
PHP | |
---|---|
Emberek | |
Erőforrások |
|
Megvalósítások | |
Keretrendszerek | |
Tesztelés |
|
ORM | |
IDE | |
Fordítóprogram | Phalanger |
eszköztár | |
Kategória |
Programozási nyelvek | |
---|---|
|
Ingyenes és nyílt forráskódú szoftver | |
---|---|
A fő dolog |
|
Közösség |
|
Szervezetek | |
Licencek | |
Problémák | |
Egyéb |
|
|
Web és weboldalak | |
---|---|
globálisan | |
Helyileg | |
Webhelyek és szolgáltatások típusai |
|
Alkotás és karbantartás | |
Elrendezések, oldalak, webhelyek típusai | |
Műszaki | |
Marketing | |
Társadalom és kultúra |
Interakciós protokollok | |
---|---|
Átjárók |