Web-technológia PHP-vel A PHP programnyelv 2, futtatókörnyezet beálĺıtások Erős Bence February 26, 2013 Erős Bence () Web-technológia PHP-vel February 26, 2013 1 / 19
Szuperglobális változók $ GET : request query paraméterek asszoc. tömbje $ POST : a kérés törzse, parszolva $ COOKIE : a kliens által küldött sütik $ REQUEST : az előbbi 3 tartalma $ SERVER : a HTTP prefixű kulcsok a kérés fejléceit tartalmazzák, a többi általában szerver-beálĺıtásokat $ ENV : a host szerveren definiált környezeti változókat tartalmazza $ FILES : ha a HTTP kéréssel fájlok is jöttek (a felhasználó fájlokat szeretne feltölteni), akkor azok ebben a tömbben lesznek Erős Bence () Web-technológia PHP-vel February 26, 2013 2 / 19
Megjegyzések idézőjelekkel közrezárt sztringkonstansban az adott hatáskörben létező változókat értékükkel helyettesíti a környzetet: $var = b ; echo a{$b}c ; // abc skalár érték típuskonverziója kényszeríthető cast-olással: $myint = (integer) $myvar; eddig egyetlen függvényről beépített sem volt szó HTTP válaszfejlécek ill. státuszkód a header(string $string, bool $replace = true, int $http response code ) függvénnyel álĺıthatóak Erős Bence () Web-technológia PHP-vel February 26, 2013 3 / 19
Függvények - változó hosszúságú paraméterlist alapértelmezett paraméterek: $<formális-paraméter>= <érték> - az érték csak literál lehet, tömbliterál esetén abban minden kulcsnak és értéknek literálnak kell lenni - ha egy paraméternek van alapértelmezett értéke a formális paraméterlistában, akkor az összes további paraméternek szintén kell hogy legyen változó hosszúságú paraméterlista: - func num args(): a hívott függvényben meghívva visszaadja a függvényhívásban megadott aktuális paraméterek számát - func get arg($i): megadja az i. aktuális paraméter értékét Erős Bence () Web-technológia PHP-vel February 26, 2013 4 / 19
Visszatérési érték alapértelmezetten érték szerint adja vissza a függvény a visszatérési értékét ha a függvénydefinícióban a függvény nevét & karakter előzi meg, és a függvényhívást szintén & előzi meg, akkor cím szerint. ha a függvény futása nem return <kifejezés>; utasítással ér véget, akkor a visszatérési érték NULL Erős Bence () Web-technológia PHP-vel February 26, 2013 5 / 19
Névtelen függvények a névtelen függvény egy érték: $sum = function(a,b) { return $a + $b; }; echo $sum(2, 2); ha a névtelen függvényben használni akarjuk a függvényt tartalmazó hatáskörben definiált változókat, akkor ezt a use kulcsszóval kell deklarálni. A use záradékban deklarált változó azt az értéket reprezentálja, melyet a változó a szülő-hatáskörben a névtelen függvény definíciójának pontján felvett. Erős Bence () Web-technológia PHP-vel February 26, 2013 6 / 19
callable pszeudo-típus olyan sztring, mely egy (már definiált) függvény neve vagy névtelen függvény vagy egyéb... (ld. OOP) boolean is callable($var) Erős Bence () Web-technológia PHP-vel February 26, 2013 7 / 19
Tömbfüggvények boolean is array($var) int count($arr) array array keys($array) boolean array key exists($array) boolean array walk(&$array, $fn) mixed array search($needle, $arr); boolean in array($arr, $needle); int extract($arr); (...) http://php.net/manual/en/ref.array.php Erős Bence () Web-technológia PHP-vel February 26, 2013 8 / 19
A tömb mint kétvégű sor mixed array shift(&$array) : törli és visszaadja a tömb első elemét int array unshift(&$array, $var1 [, $var2...]) : hozzáfűzi a változókat a tömb elejéhez mixed array pop(&$array) : törli és visszaadja a tömb utolsó elemét mixed array push(&$array, $var1 [, $var2...]) : hozzáfűzi a változókat a tömb végéhez Erős Bence () Web-technológia PHP-vel February 26, 2013 9 / 19
A futtatókörnyezet beálĺıtásai: php.ini A következőket illik ismerni: short open tags disable functions, disable classes expose php max execution time max input time memory limit error reporting display errors request order magic quotes gpc (ld. majd adatbázis-kezelésnél) Erős Bence () Web-technológia PHP-vel February 26, 2013 10 / 19
PHP OOP alapok osztály, absztrakt osztály, interfész, adattag, metódus: ugyanaz, mint Java-ban láthatóságok: public, protected, private - alapértelmezett: public - minden osztály és interfész láthatósága public, ezt nem is lehet megváltoztatni minősítés operátora: -> példányosítás: new <osztálynév>(...); $this : nemstatikus metódusokban használható referencia arra az objektumra, amin meghívtuk a mtódust. (ugyanolyan referencia, mint bármilyen más változó) Erős Bence () Web-technológia PHP-vel February 26, 2013 11 / 19
Konstruktorok a konstruktor neve speciális metódus, neve construct(... ) a new operátor hívásakor fut le, az új objektum inicializálására való egy osztálynak csak egy konstruktora lehet lehetnek alapértelmezett értékei a paramétereknek, ugyanúgy, mint minden más metódusnak/függvénynek Java-val szemben a konstruktor PHP-ben öröklődik, és nincs alapértelmezett super() konstruktorhívás üres paraméterlistánál nem kell kitenni a zárójeleket Erős Bence () Web-technológia PHP-vel February 26, 2013 12 / 19
Adattagok deklaráció, definíció: (public protected private var) $<változónév>( = <kezdőérték>); típusa nincs, a változóhoz hasonlóan egy típus nélküli referencia egy értékre (amelynek viszont van típusa) ha nincs megadva explicit kezdőérték, akkor az implicit kezdőérték null az explicit keződérték csak literál lehet nem kell feltétlenül minden adattagot deklarálni (bár ajánlott), a nem deklarált adattagokat az első írási művelet hozza létre (hasonlóan, mint a változóknál) az adattagra való hivatkozás vagy a nevével (azonosító) történik, vagy kapcsoszárójelek közötti kifejezés megadásával metóduson belül a tartalmazó osztály adattagjait is minősíteni kell ( $this->propname ) Erős Bence () Web-technológia PHP-vel February 26, 2013 13 / 19
Metódusok deklaráció, definíció: (public protected private) final? abstract? static? function <metódusnév>(<paraméterlista>) /*... */ abstract metódus szemantikája ugyanaz, mint Java-ban, az abstract módosítóval ellátott metódusoknál a paraméterlistát ; követi, nem pedig az implementációt tartalmazó blokk, ilyenkor csak deklarációról és nem definícióról van szó, a konkrét alosztályok feladata megadni az implementációt final módosítóval ellátott metódus: nem lehet az alosztályban felüldefiniálni az implementációt visszatérési érték: ugyanaz vonatkozik rá, mint a függvényeknél Erős Bence () Web-technológia PHP-vel February 26, 2013 14 / 19
deklaráció, definíció: const <konstansnév>= <érték>; mindig public láthatóságú az érték mindig literál <osztálynév>::<konstansnév>névvel hivatkozunk rá Erős Bence () Web-technológia PHP-vel February 26, 2013 15 / 19
Névterek A Java csomag-fogalmához hasonĺıt, programozó által definiált eszközöket fog össze. Neve azonosító. nevesített konstans függvény osztály interfész - A névtér-deklaráció csak a forrásfájl 1. utasítása lehet - A névtereken belül al-névtereket a \operátorral lehet létrehozni - pl. namespace my\own\ns; - névtér-szintű láthatóság PHP-ben nincsen Erős Bence () Web-technológia PHP-vel February 26, 2013 16 / 19
Elnevezések Ha a MyClass osztály a ns1\ns2 névtérben van, akkor a MyClass az osztály minősítetlen neve, melyet csak a ns1\ns1 \ns2 névtérben használhatunk a ns2\myclass a osztály minősített neve, melyet csak a ns1 névtérből használhatunk a ns1\ns2\myclass szintén minősített név, melyet csak az globális névtérben használhatunk a \ns1 \ns2\fn teljesen minősített név, melyet bárhonnan használhatunk Erős Bence () Web-technológia PHP-vel February 26, 2013 17 / 19
importálás: use kulcsszó Teljesen minősített nevek rövidítésére használjuk. Ha a MyClass osztály a ns1\ns2 névtérben van, akkor use ns1\ns2; deklaráció után ns2\myclass névvel látható use ns1\ns2 \MyClass; deklaráció után MyClass névvel látható use ns1\ns2 as nsalias; deklaráció után nsalias\myclass névvel látható use ns1\ns2 \MyClass as ClassAlias; deklaráció után ClassAlias névvel látható a globális névtérben levő osztályra saját névtérben levő kódból prefix nélküli \operátorral hivatkozunk: namespace myns; function fn() { $obj = new \MyGlobalClass; } Erős Bence () Web-technológia PHP-vel February 26, 2013 18 / 19
Megjegyzések az importálás csak osztályok és interfészek esetében működnek, függvényeket és nevesített konstansokat nem lehet importálni. ha minősítetlen függvényt vagy nevesített konstanst használunk, és ezek az aktuális névtérben nem találhatóak, akkor a futtatókörnyezet a globális névtérben fogja keresni a nevet. Ez azonban osztályok és interfészek esetében nem működik. Erős Bence () Web-technológia PHP-vel February 26, 2013 19 / 19