PHP | |
---|---|
Jazyková třída | multiparadigma , objektově orientovaný , imperativ |
Objevil se v | 8. června 1995 [5] [6] |
Autor | Rasmus Lerdorf [3] |
Vývojář | Rasmus Lerdorf [1] , Andy Gutmans [1] , PHP Group [d] , Zend Technologies [2] a Zeev Sourasky |
Přípona souboru | .php[7] |
Uvolnění | |
Byl ovlivněn | C++ , Perl [8] , C [8] , Java [8] , Tcl [9] , HTML a JavaScript |
Licence | Licence PHP [10] |
webová stránka | php.net _ |
OS | Operační systém podobný Unixu a Microsoft Windows |
Mediální soubory na Wikimedia Commons |
PHP ( /pi:.eɪtʃ.pi:/ anglicky PHP: Hypertext Preprocessor - "PHP: hypertext preprocessor "; původně PHP / FI (Personal Home Page / Form Interpreter), později nazvaný Personal Home Page Tools [11] - " Tools pro tvorbu osobních webových stránek") je univerzální skriptovací jazyk podobný C [12] , který se intenzivně používá pro vývoj webových aplikací. V současnosti jej podporuje velká většina poskytovatelů hostingu a je jedním z předních jazyků používaných k vytváření dynamických webových stránek [13] .
Jazyk a jeho interpret ( Zend Engine ) vyvíjí skupina nadšenců v rámci open source projektu [14] . Projekt je distribuován pod vlastní licencí , která není kompatibilní s GNU GPL .
V oblasti webového programování, zejména na straně serveru, je PHP jedním z populárních skriptovacích jazyků (společně s JSP , Perl a jazyky používanými v ASP.NET ).
Popularita v oblasti tvorby webových stránek je dána přítomností velké sady vestavěných nástrojů a doplňkových modulů pro vývoj webových aplikací [15] . Hlavní jsou:
Používané stovkami tisíc vývojářů od roku 2010; Podle žebříčku TIOBE na základě údajů z vyhledávačů bylo v květnu 2016 PHP na 6. místě mezi programovacími jazyky [13] .
Zahrnuje LAMP - běžnou sadu softwaru pro tvorbu a hostování webových stránek ( Linux , Apache , MySQL , PHP), stejně jako LEMP - stejně běžnou sadu softwaru ( Linux , Nginx , MySql , PHP).
Mezi stránky využívající PHP patří Facebook , Wikipedia , Yahoo! , Baidu .
Jazyk automaticky podporuje HTTP Cookies v souladu se standardy Netscape. To vám umožní nastavit a číst malé segmenty dat na straně klienta. Práce s cookies je organizována prostřednictvím relací (sessions). Relace mají datum expirace (po jeho vypršení se data smažou), v relacích lze ukládat a upravovat různé typy dat, včetně serializovaných - procházející serializací (proces probíhá automaticky), objekty PHP.
PHP není zaměřeno na tvorbu desktopových aplikací, ale je potřeba vytvořit rozhraní pro nastavení serverů, průběžné spouštění, ladění skriptů (skriptů), správu lokálních a testovacích serverů atd. Z toho důvodu vznikla řešení tohoto problému.
RozšířeníHlavním využitím rozšíření je přidání knihoven uživatelského rozhraní (UI libraries).
Rozšíření se obvykle dělí do tří skupin:
Rozšíření, jako je obousměrný wrapper, byla vyvinuta pro použití jiných jazyků při psaní rozšíření PHP a naopak. Například PSV Component Library je projekt sestávající ze tří dílčích projektů:
Je zde také místo pro plnohodnotná vývojová prostředí pro GUI PHP:
Průkopníkem v této kategorii je studio DevPHP-IDE, které použilo Kylix ( Delphi ) jako páteř rozhraní a phpcli pro tvorbu vlastních programů.
Zahrnoval editor kódu, několik nástrojů a vizuální prohlížeč HTML.
Poprvé byl představen v roce 2002, nyní má 3 stabilní verze, ale vývoj nepokračuje - zastavil se kvůli smrti hlavního vývojáře při autonehodě.
Po DevPHP IDE se objevilo rozšíření - sada komponent pro CodeGear Rad Studio 2009 založená na php4delphi s některými vylepšeními (webové prvky, inspektor, debugger), jeho podpora trvala čtyři verze, z nichž druhá byla zahrnuta v placeném rozšíření Rad Studio 2010 : naskytla se příležitost používat skripty, stylové webové komponenty, prohlížet styly a webové stránky před vytvořením programu, spustit lokální server, sestavit program jako samostatnou aplikaci a ladit kód. S vydáním Delphi XE bylo rozšíření pojmenováno RADPHP Xe. Dále se samotné studio stalo známé jako Embarcadero Delphi a práce na tomto rozšíření byly pozastaveny na neurčito.
V roce 2009 začal na bázi php4delphi vývoj prostředí pro tvorbu grafických PHP aplikací, ke kterému se později přidal Rostislav Romanov. Prostředí se jmenovalo PHP DevelStudio, první publikovaná verze byla 0.1.7. DevelStudio mělo v toolboxu malý počet komponent a běželo na zastaralém PHP 4. Ve druhé verzi dostalo DevelStudio podporu pro PHP 5. Byly přidány streamy a bylo provedeno mnoho změn a vylepšení. Sestavovací kód programů byl uzavřen, předchozí verze programu a zprávy na fóru byly odstraněny, aby se zabránilo vetřelcům.
I druhá verze DevelStudio dostala sadu komponent AlphaControls, v důsledku čehož byla pro svou jednoduchost a přehlednost použita k tvorbě malwaru . Antiviry populární v té době (MacAffee, AVG , Avira ) začaly rozpoznávat jakékoli programy kompilované v DevelStudiu jako viry.
Po nějaké době autor AlphaControls podal stížnost vývojářům DevelStudia a sada komponent byla z prostředí zcela odstraněna, nicméně byla zachována v již existující verzi, kterou se tentokrát nepodařilo z fóra odstranit .
V roce 2012 byla vydána nejnovější verze prostředí - 3.0.2, kde se objevila nová sada komponent, včetně prohlížeče Chromium místo IE , což přitáhlo pozornost webových vývojářů a uživatelů prostředí Algorithm. V té době bylo kompilace programů v Algorithmu placená, takže DevelStudio jako nové a bezplatné vývojové prostředí nalákalo většinu publika na sebe.
V roce 2014 začaly první pokusy o obnovu prostředí, tentokrát ze strany komunity . Na konci roku 2018 byl zdrojový kód obnoven a je dostupný na GitHubu .
V roce 2019 komunita oslovila tvůrce DevelStudia, aby změnil distribuční politiku prostředí a zpřístupnil jej pro aktualizaci a úpravy. Kvůli stížnostem na chybějící odkazy na použité knihovny (DCEF, PHP4Delphi, TSizeCtrl, SynEdit) bylo fórum odstraněno a jedna ze stránek popisujících prostředí byla přesměrována na hlavní stránku webu. Od této chvíle je DevelStudio oficiálně vlastněno komunitou.
Paralelně s tím začal hlavní vývojář DevelStudio vytvářet „reinkarnaci“ předchozího prostředí. Jako základ vzal grafickou knihovnu JavaFX , výsledkem bylo zcela nové prostředí s podporou CSS , ale bez plné podpory knihovny Zend PHP - projekt byl založen na vlastním jazyce jPHP. Jeho funkcemi jsou práce na JVM , JIT kompilátor, podpora Unicode , multithreading a objektově orientovaná standardní knihovna.
V 16. verzi dostalo prostředí DevelNext podporu pro php 7 a souběžně s tím bylo jPHP rozšířeno o nadšence pro vývoj pod OS Android .
V tuto chvíli autor a nadšenci pracují na verzi 2020 (dříve 17.).
V roce 2015 začal Alexander Kazantsev studovat algoritmy vývoje rozhraní a vytvořil rozšíření php_qml, které umožňovalo používat widgety z knihovny QT, ale fungovalo to pouze pod Windows.
Tím začal vývoj PHPQt, první verze nevěnovaly velkou pozornost webovým vývojářům, takže autor začal rozšíření do hloubky vylepšovat.
28. července 2015 byla zveřejněna první verze kompilátoru projektu, v té době to byl jednoduchý exekutor skriptu (script), který připojoval php kód k útržku (jako DevelStudio) a měl závislost na Windows API, na adrese v této fázi byly podporovány téměř všechny widgety a multithreading, došlo ke snadné optimalizaci php kódu. Od té chvíle se motor jmenoval PQEngine,
3. srpna 2016 byla vydána pátá verze kompilátoru aplikace (PqBuilder), který přešel na základ PlastiQ a měl podporu pro nejnovější, v té době, php 7, projekty dostaly kompletnější kompilátor a již nevyžadovaly přítomnost PqEngine.dll v blízkosti spustitelného souboru, místo toho se tyto vizuální knihovny začaly přidávat dynamicky - jako soubory a ne všívat do PQEngine.dll. Tento krok byl učiněn kvůli kompatibilitě s jinými systémy a původními knihovnami Qt.
S příchodem šesté verze se projekt stal doplňkem prostředí Qt Studio a z kompilátoru se stal jen optimalizátor kódu před finálním sestavením programu. Objevil se plnohodnotný editor rozhraní, nápovědy v editoru kódu a začala se vytvářet dokumentace. Od té chvíle vydali oznámení o vytvoření prostředí PqStudio, ale jeho vývoj nešel daleko.
V roce 2018 se objevil projekt, který kombinuje možnosti Windows Forms (.NET Framework) a PHP 7. Jeho vývoj stále probíhá pomalým tempem.[ kdy? ] . Momentálně je v motoru k dispozici téměř vše[ co? ] funkce pro OOP. Prostředí je v soukromém vývoji. Výchozí spustitelný soubor je dodáván s php7ts.dll.
Připojení PHP k projektuExistují i rozšíření pro opačné použití - připojení PHP k projektu v jiném programovacím jazyce: Phalanger (C#, php od 5.4 do 7), Peachpie] (C#, php 7), PHP4Delphi (Lazarus, Delphi, C#, C, C++ , php 5.6, JPHP (Java, php 7.0), PHPly (Python, php 5.6)
V roce 1994 dánský programátor Rasmus Lerdorf vyvinul v jazyce C [16] sadu CGI skriptů , které měly sloužit pro návštěvníky jeho online životopisu , který zpracovává šablony HTML dokumentů. Lerdorf nazval sadu Nástroje osobní domovské stránky (Nástroje pro osobní domovskou stránku ). Brzy funkce přestaly stačit a Lerdorf vyvinul nový interpret šablon PHP/FI ( anglicky Personal Home Page / Forms Interpreter - „osobní domovská stránka / interpret formulářů“) [17] .
8. června 1995 byla vydána Personal Home Page (PHP Tools) verze 1.0 - první veřejné vydání.
V roce 1997, po dlouhém beta testování , byla vydána druhá verze handleru napsané v C - PHP / FI 2.0. Používalo ho asi 1 % (cca 50 tisíc) všech internetových domén na světě [11] .
PHP 3.0 prošlo významným přepracováním, které definuje moderní vzhled a styl programovacího jazyka. V roce 1997 dva izraelští programátoři, Andy Gutmans a Zeev Suraski , kompletně přepsali kód tlumočníka. PHP 3.0 bylo oficiálně vydáno v červnu 1998 [11] .
Jednou ze silných stránek PHP 3.0 byla možnost rozšířit jádro o další moduly. Následně rozhraní pro psaní rozšíření přilákalo mnoho vývojářů třetích stran k PHP pracujícím na jejich modulech, což umožnilo PHP pracovat s velkým množstvím databází , protokolů a podporovat velké množství API . Velké množství vývojářů vedlo k rychlému rozvoji jazyka a rychlému růstu jeho popularity. Od této verze zkratka php znamená „PHP: hypertext Preprocessor“ namísto zastaralé „Personal Home Page“.
V zimě roku 1998, téměř okamžitě po oficiálním vydání PHP 3.0, začali Andy Gutmans a Zeev Suraski předělávat jádro PHP. Mezi cíle patřilo zvýšení výkonu komplexních aplikací a zlepšení modularity základny PHP kódu. Nový motor nazvaný Zend Engine se s úkoly úspěšně vypořádal a byl poprvé představen v polovině roku 1999 . PHP 4.0 , založené na tomto enginu a přinášející s sebou sadu dalších funkcí, bylo oficiálně vydáno v květnu 2000 . Kromě vylepšení výkonu mělo PHP 4.0 několik dalších klíčových inovací, jako je podpora relací, ukládání do vyrovnávací paměti výstupu , bezpečnější způsoby zpracování uživatelského vstupu a několik nových jazykových konstrukcí.
Pátá verze PHP byla vydána vývojáři 13. července 2004 . Změny zahrnují aktualizaci jádra Zend ( Zend Engine 2 ), která výrazně zvýšila efektivitu interpretru . Zavedena podpora pro značkovací jazyk XML . Funkce OOP byly zcela přepracovány a jsou velmi podobné modelu používanému v Javě . Konkrétně byl představen destruktor , veřejné, soukromé a chráněné členy a metody , konečné členy a metody, rozhraní a klonování objektů. Následující verze také zavedly jmenné prostory , uzávěry a řadu poměrně závažných změn, kvantitativně a kvalitativně srovnatelných s těmi, které se objevily během přechodu na PHP 5.0.
Šestá verze PHP se vyvíjí od října 2006 [18] . Bylo provedeno mnoho inovací [19] [20] , jako je odstranění regulárních výrazů POSIX a „dlouhých“ superglobálů z jádra a odstranění direktiv safe_mode , magic_quotes_gpc a register_globals z konfiguračního souboru php.ini. Jednou z hlavních novinek měla být podpora Unicode [21] . Nicméně v březnu 2010 byl vývoj PHP6 považován za neperspektivní [22] kvůli potížím s podporou Unicode. Zdrojový kód PHP6 byl přesunut do , a verze 5.4 se stala hlavní linií vývoje.
V roce 2014 proběhlo hlasování, jehož výsledkem byla další verze nazvaná PHP 7 [23] . Vydání nové verze bylo plánováno na polovinu října 2015 [24] . V březnu 2015 vydal Zend infografiku , která nastiňuje hlavní inovace v PHP 7 [25] .
3. prosince 2015 byla oznámena verze PHP 7.0.0 [26] .
Nová verze je založena na experimentální větvi PHP, která se původně jmenovala phpng ( PHP Next Generation „next generation“) a byla vyvinuta se zaměřením na zvýšení výkonu a snížení spotřeby paměti [27] . Nová verze přidává možnost specifikovat typ dat vrácených z funkce [28] , přidáno řízení typu pro data [29] a také nové operátory.
13. června 2019 vyšlo PHP 7.4. Do jádra byly přidány typizované vlastnosti a funkce šipek, stejně jako kovariance typu s ohraničeným návratem a kontravariance typu argumentu [30] .
PHP verze 8.0 byla vydána 26. listopadu 2020 [31] . Hlavní inovace byly [32] : podpora sjednocených typů [33] , kompilace JIT [34] a atributů (také známé jako anotace), také byla nahrazena „konstrukce“ přepínače shodným „výrazem“ a byl zaveden nový operátor Nullsafe přidal.
Dne 9. července 2020 vydal Dale Hirt , projektový manažer PHP ve společnosti Microsoft, zprávu [35] v mailing listu , že po vydání PHP 8.0 Microsoft přestane podporovat vývoj tohoto programovacího jazyka pro Windows [36] . Specialisté Microsoftu kompilovali binární verze interpretu pro Windows a testovali jejich zabezpečení. Komunita vývojářů PHP oznámila, že podnikne všechna nezbytná opatření, aby v blízké budoucnosti nalezla alternativní možnost organizace podpory pro PHP 8.0 a vyšší pro Windows, například vlastními silami [37] . php.internals
Syntaxe PHP je podobná syntaxi jazyka C. Některé prvky, jako jsou asociativní pole a smyčka foreach, jsou vypůjčeny z Perlu .
Lexikální analýza PHP se provádí pomocí utility re2c [38] [39] , která generuje rychlé a snadno vložitelné lexery.
Chcete-li napsat jednoduchý skript, nemusíte popisovat žádné proměnné, použité moduly atd. Jakýkoli skript může začínat přímo příponou <?php.
Nejjednodušší program Hello world v PHP vypadá takto:
<?php echo 'Ahoj světe!' ; ?>Je také možná kratší verze výstupu řetězce:
<?= 'Ahoj, světe!' ?>Značka úvodního pohledu se <?=používá ke zkrácení konstrukcí používaných k zobrazení čáry.
PHP spouští kód, který je uvnitř oddělovačů, jako je <?php ?>. Cokoli mimo meze je na výstupu nezměněno. To se používá hlavně pro vložení PHP kódu do HTML dokumentu, např.
< html > < head > < title > Testování PHP </ title > </ head > < body > <?php echo 'Ahoj světe!'; ?> </ body > </ html >Kromě oddělovačů <?php ?>je povoleno (avšak uznáno za zastaralé a prakticky nepoužívané) použití zkrácené verze <? ?>. Kromě toho, před verzí 7.0, ASP <% %> a <script language="php"> </script>. Funkce zkratek je definována v konfiguračním souboru php .ini .
Názvy proměnných začínají symbolem $, typ proměnné není třeba deklarovat. V názvech proměnných a konstant se rozlišují velká a malá písmena. V názvech tříd, metod tříd a funkcí se nerozlišují velká a malá písmena. Proměnné jsou zpracovávány v řetězcích s dvojitými uvozovkami a řetězcích heredoc ( řetězce vytvořené operátorem <<<). Proměnné v řetězcích uzavřených v jednoduchých uvozovkách a nowdoc nejsou analyzovány.
Příkazy jsou odděleny středníkem ( ;), s výjimkou některých případů po deklaraci konstrukcí a cyklů if/else.
Proměnné lze předat funkci jak hodnotou, tak odkazem (používá se znaménko &).
PHP podporuje tři typy komentářů: C -style (oddělený /* */), C++ (začínající //a pokračující na konec řádku) a UNIX shell (s #do konce řádku).
PHP je dynamicky typovaný programovací jazyk , který nevyžaduje zadání typu při deklaraci proměnných, stejně jako deklaraci samotné proměnné.
Skalární datové typy zahrnují:
Mezi neskalární typy patří:
Rozsah celých čísel (int) v PHP závisí na platformě (u 32bitové architektury rozsah čísel nepřesahuje int32_t, tedy od -2 147 483 648 do 2 147 483 647). Čísla lze zadávat v desítkových, osmičkových a šestnáctkových číselných soustavách. Rozsah reálných čísel (float) závisí také na platformě (u 32bitové architektury umožňuje rozsah pracovat s čísly od ±1,7×10 −308 do ±1,7×10 +308 ).
PHP poskytuje vývojářům booleovský typ , který může nabývat pouze dvou hodnot true("true") a false("false"). Při převodu na logickou hodnotu se číslo 0, prázdný řetězec, nula v řetězci "0" nulla prázdné pole považují za stejné false. Všechny ostatní hodnoty jsou automaticky převedeny na true.
Speciální typ null je pro proměnné bez definované hodnoty. Jedinou hodnotou tohoto typu je doslovný null. Typ null přijímá neinicializované proměnné, proměnné inicializované konstantou nulla také proměnné smazané pomocí unset().
Odkazy na externí zdroje jsou typu zdroj. Proměnné tohoto typu jsou zpravidla deskriptorem , který umožňuje spravovat externí objekty, jako jsou soubory, dynamické obrázky, výsledné databázové tabulky atd. Jak se jazyk vyvíjí, standardní knihovna se postupně zpřesňuje a zdroje jsou nahrazovány objekty . Proto se plánuje úplné odstranění tohoto typu.
Pole (pole) podporují číselné a řetězcové klíče a jsou heterogenní . Pole mohou obsahovat hodnoty libovolného typu, včetně jiných polí. Pořadí prvků a jejich klíče je zachováno. Není úplně správné nazývat php pole pole, ve skutečnosti je to s největší pravděpodobností uspořádaný hash . Neočekávané chování je možné při použití smyčky fors čítačem namísto foreach. Takže například při řazení pole s číselnými indexy podle funkcí ze standardní knihovny se třídí i klíče.
PsaníJazyk umožňuje psaní argumentů, návratových hodnot funkcí a metod tříd a od verze 7.4 také psaní polí tříd . Povolení přísného režimu deaktivuje implicitní převody typů v těchto částech kódu, což přibližuje chování jazyka jazykům se silným psaním .
Typy int, string, float, boolnebo jsou platnými definicemi typu argumentu, pole třídy nebo návratové hodnoty array. objectJe také povoleno používat názvy tříd nebo rozhraní k definování konkrétní implementace. Použití resourcepro definici typu není povoleno a indikace nullje možná s omezeními: Pouze v rámci definice typu součtu , například int|null(nebo ?int).
Moderní PHP implementuje základní podporu pro algebraické datové typy a umožňuje použití konjunkce i disjunkce při definování typu. Jazyk neumožňuje typové aliasy , ale poskytuje několik vestavěných implementací, které se v PHP označují jako "pseudotypy". Podobný termín v jazyce se používá pro jakoukoli definici typu, která není nezávislá, aplikovatelná na hodnotu, ale je implementována pouze jako instrukce kontroly typu v Zend VM.
Pseudotypy zahrnují:
Kromě typových kontrol mohou vestavěné „pseudotypy“ implementovat další kontrolní logiku. Typ může být například callablereprezentován:
PHP podporuje jak deklaraci pojmenovaných funkcí, tak prvotřídní anonymní funkce , například:
// Deklarace funkce pojmenované funkce get_hello_world () : string { return 'Ahoj světe!' ; } // Deklarace anonymní funkce $getHelloWorld = function () : string { return 'Ahoj světe!' ; }; // Krátká syntaxe $getHelloWorld = fn () : string => 'Ahoj světe!' ;Za zmínku stojí, že v případě anonymních funkcí není rozdíl pouze ve vizuálních rozdílech, ale také ve způsobu zachycení externích kontextových proměnných. Jakákoli "krátká" forma zápisu je uzávěr , zatímco dlouhý zápis k implementaci uzávěru vyžaduje explicitní specifikaci proměnných uvnitř operátoru usez vnějšího kontextu, aby je zachytil:
$variable = 'Ahoj světe!' ; // Použití příkazu use function () use ( $proměnná ) : string { return $proměnná ; }; // Alternativa, s použitím krátké syntaxe fn () : string => $proměnná ;K proměnným se přistupuje pomocí symbolu $následovaného názvem proměnné. Tuto konstrukci lze také použít k vytvoření dynamických proměnných a funkcí. [41] Například:
$a = 'Jsem a' ; // Zapíše hodnotu do $a echo $a ; // Výstupní proměnná $a $b = 'a' ; echo $$b ; // Zobrazit proměnnou $a (navíc $ před proměnnou $b) echo $ { 'a' }; // Výstupní proměnná $a název_funkce (); // Volání funkce název_funkce $c = 'název_funkce' ; $c (); //Volání funkce název_funkce $d = 'Název třídy' ; $obj = new ClassName ; // Vytvoří objekt třídy ClassName $obj = new $d (); // Vytvoří objekt třídy ClassName $obj -> b ; // Přístup k vlastnosti b objektu $obj -> c (); // Volání metody c() objektu $obj -> $b ; // Přístup k vlastnosti a objektu, protože $b = 'a' $obj -> $c (); // Volání metody function_name() objektu, protože $c = 'název_funkce'Přestože v PHP echovypadají printjako funkce, první je operátor [42] a druhý je výraz (to znamená, že na rozdíl od ) printvrací hodnotu . echoPři jejich použití můžete vynechat závorky.
Superglobální pole v PHP jsou předdefinovaná pole, která mají globální rozsah bez použití direktivy . Většina těchto polí obsahuje vstupní data požadavku uživatele ( parametry požadavku GET , pole formuláře při odeslání metodou POST , soubory cookie atd.). global
Všechny superglobální společnosti, kromě $GLOBALSa $_REQUEST, mají zastaralé protějšky s dlouhými názvy, které jsou k dispozici až do verze 5.3. x (od verze 5.4.0 byly odstraněny). Vyvolání $_GET['year']a $HTTP_GET_VARS['year']jsou tedy totožná (kromě rozsahu: pole s "dlouhými" názvy nejsou superglobály).
$GLOBALS Pole všech globálních proměnných (včetně uživatelských). $_SERVER(analog pro zastaralé - $HTTP_SERVER_VARS) Obsahuje proměnné prostředí, které operační systém předává serveru. $_ENV(ústa $HTTP_ENV_VARS) Aktuální proměnné prostředí ( angl. Environment variables ). Jejich sada je specifická pro platformu, na které skript běží. $_GET(ústa $HTTP_GET_VARS) Obsahuje parametry požadavku GET předávaného v URI za otazníkem " ?". $_POST(ústa $HTTP_POST_VARS) Asociativní pole hodnot polí formuláře HTML při odeslání pomocí metody POST. Indexy prvků odpovídají hodnotě vlastnosti nameobjektů (tlačítka, formuláře, přepínače, zaškrtávací políčka atd.) formuláře HTML. $_FILES(ústa $HTTP_POST_FILES) Asociativní pole s informacemi o souborech odeslaných metodou POST. Každý prvek má index, který je identický s hodnotou atributu „name“ ve formuláři, a je také polem s následujícími prvky:Klíčové slovo classbylo rezervováno ve třetí verzi jazyka. Ve čtvrté verzi bylo možné na jejich základě vytvářet třídy a objekty. Principy OOP však byly podporovány jen částečně, například všichni členové (proměnné i metody) byli veřejní. Navíc vytváření objektů bylo drahé a pomalé.
PHP má plnou podporu OOP od verze 5 . Práce s třídami byla optimalizována a nyní takový kód funguje poměrně rychle.
Třída v PHP je deklarována pomocí class. Metody a vlastnosti třídy mohou být veřejné ( public, výchozí), chráněné ( protected) a skryté ( private). PHP podporuje všechny tři hlavní OOP mechanismy - zapouzdření , polymorfismus podtypů a dědičnost (nadřazená třída je uvedena s klíčovým slovem extendsza názvem třídy). Rozhraní jsou podporována (mapováno pomocí implements). Deklarování konečných , abstraktních metod a tříd je povoleno. Vícenásobná dědičnost tříd není podporována, ale třída může implementovat více rozhraní. Klíčové slovo se používá pro přístup k metodám nadřazené třídy parent.
Od verze 5.4.0 lze vícenásobnou dědičnost implementovat pomocí mechanismu vlastností . Funkce jsou podobné mixinům , kromě toho, že nemohou být vytvořeny přímo . Opětovné použití kódu spočívá v použití kódu funkce ve více třídách. V jedné třídě je povoleno používat několik funkcí. Mechanismus funkcí má prostředky pro řešení konfliktů jmen. Když je program spuštěn, kód funkce bude „zkompilován“ do kódu třídy, která ji obsahuje.
Třídy v PHP mají řadu „magických“ metod ( angl. magic methods ), počínaje dvěma podtržítky – konstruktorem ( __construct(), ve verzích před 5.0 byl konstruktor metodou stejného jména jako třída) a destruktorem ( __destruct()), stejně jako __get()metody čtení ( ) a zápisu ( __set()), skládání ( __sleep()) a rozšiřování ( __wakeup()), klonování ( __clone()) atd. Tyto metody jsou poměrně flexibilním nástrojem: jejich předefinováním můžete dosáhnout významné změny v chování objekt.
Všechny členské funkce jsou implementovány jako virtuální, a proto jsou všechny metodami.
Instance třídy se vytvářejí pomocí klíčového slova new, k vlastnostem a metodám objektu se přistupuje pomocí operátoru ->. Proměnná se používá pro přístup ke členům třídy z jejích metod $this.
třída C1 rozšiřuje C2 implementuje I1 , I2 { private $a ; chráněno $b ; public function __construct ( $a , $b ) { parent :: __construct ( $a , $b ); $toto -> a = $a ; $toto -> b = $b ; } public function plus () { return $this -> a + $this -> b ; } /* ............... */ } $d = nový C1 ( 1 , 2 ); echo $d -> plus (); // 3Od PHP 5 jsou objekty předávány odkazem:
class A { public $color = 'červená' ; } $a = newA ( ); echo $a -> barva ; // červená $b = $a ; $b -> barva = 'modrá' ; echo $a -> barva ; // modrá„Paamayim Nekudotayim“ ( hebrejsky : פעמיים נקודתיים) nebo jednoduše „dvojtečka“. Pomocí tohoto tokenu může programátor přistupovat ke konstantám, statickým nebo přetíženým vlastnostem nebo metodám třídy. Při odkazování na tyto prvky mimo třídu musí programátor použít název třídy. „Paamayim Nekudotayim“ se na první pohled může zdát jako zvláštní fráze pro dvojtečku. Při vytváření Zend Engine verze 0.5 (který byl součástí PHP3) však Andi a Zeev zvolili tento zápis [43] . „Paamayim Nekudotayim“ v hebrejštině skutečně znamená „dvojtečka“ (doslova: „dvojtečka“). Tento zápis se během vývoje PHP nikdy nezměnil [44] .
class MyClass { public const CONST_VALUE = 'Konstantní hodnota' ; } // Použití :: mimo deklaraci třídy echo MyClass :: CONST_VALUE ;PHP skripty jsou obvykle zpracovávány interpretem v pořadí, které zajišťuje, že vyvíjená aplikace je multiplatformní :
Dříve bylo možné pro zvýšení výkonu aplikací používat speciální software , tzv. akcelerátory . Princip jejich fungování spočívá v ukládání vygenerovaného bajtkódu do mezipaměti a/nebo na disk , takže fáze 1-3 jsou vyloučeny z procesu aplikace, což obecně vede k výraznému zrychlení. Od verze 5.5 byl do jádra zabudován jeden z akcelerátorů, opcache , takže řešení třetích stran již nejsou populární.
Důležitou vlastností je, že se vývojář nemusí starat o alokaci a uvolnění paměti. Jádro PHP implementuje prostředky pro automatickou správu paměti; veškerá přidělená paměť je vrácena systému po ukončení skriptu [45] .
Interpret se skládá z jádra a zásuvných modulů , „rozšíření“ , což jsou dynamické knihovny . Rozšíření umožňují doplnit základní funkce jazyka a poskytují možnosti pro práci s databázemi , sokety , dynamickou grafikou , kryptografickými knihovnami, dokumenty PDF a podobně. Každý si může vyvinout vlastní rozšíření a připojit jej. Existuje obrovské množství rozšíření, jak standardních, tak vytvořených společnostmi a nadšenci třetích stran, ale jen pár desítek osvědčených je součástí standardního balíčku. V úložišti PECL je k dispozici mnoho rozšíření .
Od verze 7.4.0 byla do PHP přidána podpora FFI, což výrazně zjednodušuje interakci s knihovnami napsanými v jakémkoli jiném jazyce (včetně API poskytovaného operačním systémem). Tato nová funkce zase poskytla alternativu k psaní rozšíření. Pomocí FFI tedy můžete psát kód v PHP a komunikovat s libovolnými knihovnami v systému, které poskytují cdecl, fastcallnebo stdcall ABI .
PHP interpret má speciální konfigurační soubor - php.ini, obsahující mnoho nastavení, jejichž změna ovlivňuje chování interpretu [46] . Je možné zakázat používání řady funkcí, změnit limity paměti RAM používané skriptem, dobu provádění, velikost stahovaných souborů, konfigurovat protokolování chyb, pracovat s relacemi a poštovními službami, připojovat další rozšíření a mnohem více. Velký konfigurační soubor je možné rozdělit na části. Běžnou praxí je například vkládat nastavení rozšíření do samostatných souborů. Možnosti interpretru lze přepsat v konfiguračních souborech HTTP serveru (například .htaccessv Apache ) nebo v samotném skriptu za běhu pomocí příkazu ini_set[47] .
SAPI je externí abstraktní vrstva určená k zabudování tlumočníka do jiných aplikací a je zodpovědná za jeho provoz (spouštění, zastavování, předávání skriptů ke spuštění, přístup k externím datům). Existuje několik hlavních SAPI, které definují, jak lze PHP spouštět a používat:
Počínaje PHP 5.4.0 má SAPI CLI schopnost spouštět PHP jako samostatný HTTP server. Tento režim je však čistě pro vývoj, protože spouští pouze jeden proces tlumočníka a provádí všechny dotazy čistě sekvenčním způsobem.
PHP má pár easter eggů (vtipů). Předání speciálních parametrů GET libovolnému skriptu php vede k výstupu různých obrázků.
Například:
any_script.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42když zadáte tuto hodnotu do adresního řádku prohlížeče, můžete vidět různé obrázky v závislosti na verzi interpretu:
Následující dvě hodnoty vám umožní vidět standardní logo PHP a ZEND [49] :
any_script.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
any_script.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42Tyto hodnoty lze také získat přímo v PHP skriptu pomocí funkcí php_logo_guida zend_logo_guidpro logo Zend.
K dispozici je také speciální hodnota pro zobrazení seznamu všech autorů PHP (4,5) [49] :
any_script.php?=PHB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
Vzhledem k popularitě jazyka PHP a touze zvýšit rychlost webových aplikací na něm založených bylo vytvořeno několik alternativních kompilátorů , které jsou jazyku PHP blízké. V únoru 2010 tedy Facebook otevřel [ 50] [51] svůj kompilátor PHP - HipHop (HPHP, Hyper-PHP), který generuje kód C++ , následovaný kompilací do strojového kódu pomocí gcc . V červenci 2013 ruská společnost VKontakte oznámila podobný produkt KPHP [52] .
Tabulka poskytuje seznam aktuálně existujících alternativních implementací.
název | Verze PHP (cca) | Licence | Výsledek kompilace |
---|---|---|---|
PHP | 7.4 | GPL | C++ , nativní kód |
hip hop | 5.4 | Licence PHP | C++ , nativní kód |
Roadsend PHP | 5.3 | GPL / LGPL | C , strojový kód |
Phalanger | 5.5 | Paní SS-PL [53] ( Sdílený zdroj ) | Microsoft IL |
Quercus (součást webového serveru Resin ) | 5.2 | GPL nebo komerční | JVM |
PHC | 5.2 | BSDL | C , strojový kód |
Pipp [54] | 5.3 | Umělecká licence a GNU GPL | Papoušek |
JPHP [55] | 7.1 (částečně 7.2, 7.3 a 7.4) [56] | Apache 2.0 | JVM |
PHP | 5.4 | MIT | PHP |
PH7 | 5.5 | Vlastní (Symisc Public License) | C , strojový kód |
HippyVM | 5.6 | MIT | RPython/PyPy |
Srovnávací analýza některých kompilátorů je dostupná na phpclasses.org [57] .
PHP je nejoblíbenější jazyk pro vývoj systémů pro správu obsahu (CMS).
název | Licence |
---|---|
Codelobster | Freeware |
Komodo | Trojlicence Mozilla ( MPL / LGPL / GPL ) [58] |
phpstorm | Proprietární software |
Vývojové nástroje PHP | Eclipse Public License |
zend studio | shareware |
Studio Aptana | GNU GPL |
phpDesigner | shareware |
PHP Expert Editor | Shareware [59] |
NetBeansIDE | CDDL |
RadPHP XE | soud |
NuSphere | soud |
KDevelop [60] | GNU GPL |
Microsoft Web Matrix | Freeware |
Poznámkový blok++ | GNU GPL |
Vznešený text | Proprietární software |
VS.Php pro Visual Studio | Proprietární software |
Nástroje PHP pro Visual Studio | soud |
DevelNext | MPL-2.0 |
jEdit | GNU GPL -2.0 |
Standardní doporučení PHP ( zkr. PSR [ ) je specifikace PHP, která je vyvinuta, přijata a publikována skupinou autoritativních projektů PHP včetně CakePHP, Composer , Joomla, PEAR , Phalcon, phpDocumentor , TYPO3, Yii framework [61] . Specifikace slouží jako standardizace koncepcí programování v PHP a je založena na reálných zkušenostech i výzkumech a experimentech [62] . Účelem doporučení je zajistit kompatibilitu komponent webových aplikací vyvinutých různými vývojáři.
Zastánci jazyka PHP uvádějí jako jeho hlavní výhody široké používání, poptávku po PHP vývojářích na trhu práce a snadnost učení. Mezi výhody jazyka patří jeho poměrně rychlý vývoj.
Podpora pro řetězce s vícebajtovým kódováním (jako je UTF-8 ) je implementována prostřednictvím samostatných rozšíření mbstringa iconv, na úrovni jádra neexistuje žádná podpora, nicméně od PHP 4.2.0 je možné přepsat standardní funkce pro práci s řetězci a nahradit je s analogy z mbstring. Podpora vícebajtových kódování ve všech funkcích řetězců je k dispozici od verze 5.4.0 (březen 2012).
Jazyk neposkytuje možnost vytvářet vícevláknové aplikace a chybí podpora synchronizovaného přístupu ke zdrojům, je však implementován pomocí rozšíření PCNTL [63] (z anglického process control ), ale není vhodný pro řešení konkrétních problémů.
Ačkoli je možné nainstalovat rozšíření pthreads pro „čestná“ vlákna, k tomu musí být interpret zkompilován s příznakem bezpečnosti vlákna a samotné rozšíření bylo zastaralé ve prospěch paralelního (od stejného autora).
Modernější alternativou je použití nástavce Swoole.
![]() | ||||
---|---|---|---|---|
Tematické stránky | ||||
Slovníky a encyklopedie | ||||
|
PHP | |
---|---|
Lidé | |
Zdroje |
|
Implementace | |
Rámce |
|
Testování |
|
ORM | |
IDE | |
Kompilátor | Phalanger |
nástrojů pro widgety | |
Kategorie |
Programovací jazyky | |
---|---|
|
Bezplatný open source software | |
---|---|
Hlavní věc |
|
Společenství |
|
Organizace | |
licence | |
Problémy | |
jiný |
|
|
Web a webové stránky | |
---|---|
globálně | |
Lokálně | |
Typy stránek a služeb |
|
Tvorba a údržba | |
Typy rozložení, stránek, webů | |
Technický | |
Marketing | |
Společnost a kultura |
Interakční protokoly | |
---|---|
Brány |