A PHP nyelv alapjai
Web-Sky Consulting Kft Tóth Imre 2009
Előadások címei 1.
2. 3. 4. 5. 6. 7. 8. 9. 10.
11. 12. 13.
PHP nyelv alapjai Objektumorientáltság a PHP-ben A Http és a PHP kapcsolata Adatbázis kezelés a PHP-ben MVC alapjai Zend Framework és az MVC Zend Framework alapelemei Adatbázis modell Zend Framework részletei Form kezelés és validáció Ajax és jQuery bemutatása jQuery felületek beágyazása Authentikáció és jogosultság kezelés, OpenID
A PHP nyelv története 1994-ben Rasmus Lerdorf írt egy egyszerű PERL script
függvénykönyvtárat weboldala funkcionalitásának bővítésére 1995-ben Rasmus C nyelven újraírta az alkalmazást sebesség problémák miatt, ezt nevezte el Personal Home Page Tools-nak. Készített egy másik alkalmazást, amivel webes űrlapokat tudott lementeni adatbázisba, ennek a neve: Form Interpreter 1997-ben egyesítette a két alkalmazást, és így született meg a PHP programnyelv, ami weblapokba illesztve lehetett futtatni, ez volt a PHP/FI 2.0
PHP: Hypertext Preprocessor 1998-ban Zeev Suraski és Andi Gutmans csatlakozott a
projekthez, újraszervezték a PHP parancs-feldolgozó motorját, rengeteg új funkciót építettek be az új magba, amit Zend-nek neveztek el. Ezzel a maggal jelent meg a PHP 3.0. A PHP rövidítés új értelmezése: „PHP: Hypertext Preprocessor”. 2000-ben jelent meg a PHP 4.0, ami sokkal jobban szervezett volt mint elődje, támogatta modulok hozzáírását (PECL), kompatibilis lett az összes web kiszolgálóval, valamint a nyelvben megjelent az objektumorientáltság. 2002-ben a PHP 4.3-as verziójára megoldott a PHP szinte minden gyerekded problémája.
PHP 5.0 az OO PHP A PHP4 objektumorientáltsága elmaradt a többi
objektumorientált nyelvtől, pl: nem létezett referencia változó, az objektumpéldányok mindig másolódtak, nem volt láthatóság, illetve nem volt kivételkezelés. 2004-ben jelent meg a PHP 5.0 a Zend Engine 2.0 nevű motorral, ami teljes mértékben támogatta az objektumorientált programozást. Újdonságok: névterek (namespace) objektumkezelés – beépített és speciális függvényekkel
Mi a PHP?
Általános célú szkriptnyelv Weboldalakba ágyazható Egyszerűen használható Interpreteres értelmező Az interpreter közvetlenül a forráskódot értelmezi Platform független, minden környezetben elérhető
(Linux,
Unix, Windows, Mac, OpenBSD, …)
Professzionális szolgáltatásokat nyújt A PHP több nyelv formalitását ötvözi: C, Perl, JavaScript Gyengén típusos nyelv Objektumorientált
Hol használható? Szerver oldali Legelterjedtebb használati formája a PHP-nek. Három komponensből áll: PHP értelmező, web kiszolgáló és web böngésző. A PHP szinte minden kiszolgálót támogat: Apache, MS IIS, Netscape, OmniHTTP, CGI és modulos futtatási lehetőség Parancssori (CLI) PHP programot közvetlenül parancssorból lehet futtatni böngésző és szerver nélkül. Kliens oldali (GTK) Hagyományos „ablakos” asztali alkalmazást lehet készíteni. Ez egyáltalán nem tipikus felhasználási mód.
Szerveroldali futtatás (CGI) CGI esetén a web kiszolgáló (Apache) külső alkalmazásként
hívja meg a PHP interpretert átadva a HTTP kérést és a futtatandó állományt. CGI problémája: lassú a futtatás, mert minden kérésnél újra indul az értelmező. FastCGI megoldással kikerülhető a probléma, ebben az esetben az értelmező a memóriában marad és több szálon fut, viszont sok kérésnél nagy a memória igénye. CGI előnye: osztott rendszereken is biztonságos, mivel a PHP értelmező különböző felhasználók jogaival is futhat, így a különböző weboldalak szeparáltan működnek. (suPHP vagy suExec)
Szerveroldali futtatás (modulos) Modulos futás esetén a PHP interpreter beépül közvetlenül
a web kiszolgálóba, így folyamatosan rendelkezésre áll, nem indul új szál, ezzel sok erőforrás megspórolható. HTTP kérések között is a memóriában marad az interpreter, így perzisztens eszközöket is használhatunk (adatbázis kapcsolat, memcache) Osztott rendszerben nem használható biztonságosan, mivel a felhasználók nem szeparálhatóak el. XCache segítségével a modulos futtatás tovább gyorsítható, a változók és az előfordított forráskódok automatikusan gyorstározódnak.
Kiterjesztések A nyelv csak néhány alap függvénytárat tartalmaz, a
továbbiakat külön modulokba szervezték. A modulok C nyelven íródtak. A PHP programból egyszerűen meghívhatóak, nem különbözik a beépített függvényektől. Nagyon sok kiterjesztés van (PECL), egyszerűen bekapcsolhatóak a php.ini-ben. .so vagy .dll kiterjesztésúek mysql: mysql függvénytár
gd2: képmanipuláló függvények imap, curl, oracle, mssql, ldap, sqlite, zip …
PEAR függvénytár Egységbe szervezett függvénykönyvtár. PHP nyelven írt függvények és osztályok. Parancssorból egyszerűen telepíthetőek és frissíthetőek. pear install
Megkeresi az adott nevű csomagot, letölti, kitömöríti a megfelelő helyre, függőségek esetén az összes többi szükséges csomaggal ugyanezt teszi.
Egyszerűen használhatóak, a PEAR eszközök elérési
útvonala szerepel az alapértelmezett útvonalak között. Rengeteg csomag található különféle kategóriákba szedve a http://pear.php.net weboldalon.
Az első PHP programunk
Az első PHP programunk A kódok a HTML fájlba vannak ágyazva, általában .php kiterjesztésűek. jelek között van maga a php kód, a forma is használatos. Több egymás utáni PHP kódblokk is szerepelhet, html kódokkal vegyesen Egy php blokkot akár fizikailag is szétvághat egy html kódrész. kifejezés egy rövidített változata az
Változók A PHP gyengén típusos nyelv. Speciális karakterrel kezdődik az azonosítója: $ Nincs explicit változó deklarálás. Kezdő értékadással történik meg a változók deklarálása.
A változó értékadáskor felveszi a kifejezés típusát. Van automatikus kezdő értékadás, így automatikus
deklaráció is. A php.ini-ben beállítható, hogy figyelmeztessen. A változó a NULL értéket veszi fel. Egy változó típusa futásidőben változhat: értékadáskor és implicit vagy explicit típuskonverziókor
PHP nyelv típusai A PHP nyolc primitív típust támogat. A négy skalár típus: boolean (logikai) $boolean = true; $boolean = false; integer (egész szám) $int = 1234; // decimális szám $int = 0123; // oktális szám (83 decimálisan) $int = 0x1A; // hexadecimális szám (26)
float (lebegőpontos szám, vagy double) $float = 1.25; $float = 1.25e0;
PHP nyelv típusai string (karakterlánc, karaktersorozat) $string = 'Szöveg';
A két összetett típus: array (tömb) $array = array(1, 2, 'a', 'b');
object (objektum) $osztaly = new Osztaly();
Végül két speciális típus: resource (erőforrás)
NULL (nincs értéke) $nincs_erteke = NULL;
Típus konverzió C és Java szintaktikához hasonlóan $valtozo = (uj_tipus)$valtozo;
A következő típusokra lehet így konvertálni: (integer)$var; (boolean)$var; (double)$var; (float)$var; (string)$var; (array)$var; (object)$var;
// egésszé konvertál // logikai értékké konvertál // lebegőpontos számmá konvertál // sztringgé konvertál // tömbbé konvertál // objektummá konvertál
Változókezelő függvények Váltózó típus beállítása: settype($valtozo, $uj_tipus);
Változó típus lekérdezés: gettype($valtozo); // A típus nevét tartalmazó \ sztringet ad eredményül.
Változó létezésének ellenőrzése: isset($var); // true, ha egy változónak van \ értéke, azaz nem NULL unset($var); // megszünteti a változót empty($var); // true, ha az értéke üres, vagy 0
Változókezelő függvények Típus feltétel függvények: is_int($egesz); // true-t ad vissza, ha egész is_float($lebegopontos); // true, ha tört is_bool($boolean); // true, ha true vagy false is_numeric($szam); // ha szám, akár sztring is is_scalar($var); // a változó skalár típusú-e is_string($string); is_array($array); is_object($object); is_null($null);
Automatikus típusegyeztetés A PHP a változókat az operátoroknak megfelelő típusá
konvertálja. Egyedül az === és a !== operátorok esetén nincs típusegyeztetés! Boolean típusra való konvertálás esetén: 0, 0.0, NULL, ””, ”0”, array() => false
Integer típusra konvertálás esetén: false => 0; true => 1;
Törtszámoknál az egészrész lesz az eredmény. Számot tartalmazó sztring esetén balról jobbra értelmezi a
szöveget számként, amíg oda nem illő karaktert talál.
Sztring típus Sztringek létrehozása aposztróf jelek között: $str ='karakterek'; idézőjelek között: $str ="szöveg"; heredoc szintaxissal:
$str = <<<EOT Első sor Második sor EOT; Az első esetben (')
nincs se escape karakterezés, se változó
behelyettesítés. Escape karakterek: \n a sortörés, \t a tabulátor, \r a kocsivissza, \” az idézőjel, \\ a visszaperjelet jelölik. A sztring első karaktere a nullodik karakter.
Sztring típus A változó behelyettesítés: a sztringben lévő változók
helyére az értékük kerül beillesztésre. $str $str $str $str
= = = =
"Az q értéke: $q"; "A tömb eleme: $array[2]"; "A tömb eleme: ${array['key']}"; "Az objektum attrib: ${obj->attrib}";
A változó behelyettesítést érdemes {} jellel körülhatárolni,
hogy ne legyen értelmezési probléma. A sztring karakterei megfoghatóak, illetve módosíthatóak: $str2 = $str{12}.$str{$i}; $str2{2} = 'k';
Sztringek összefűzése: $str = $str1.(1.5).$str2."itt".1.5.($a==5?'I':'N');
Automatikus típusegyeztetés A boolean TRUE érték az "1" sztringgé, a FALSE pedig az
üres sztringgé konvertálódik. Sztring számmá konvertálása: ""
$str $str $str $str $str $str $str $str
= = = = = = = =
1 + "10.5"; // float (11.5) 1 + "-1.3e3"; // float (-1299) 1 + "bob-1.3e3"; // integer (1) 1 + "bob3"; // integer (1) 1 + "10db alma"; // integer (11) 4 + "10.2 kg körte"; // integer (14) "10.2 kg körte" + 1; // integer (11) "10.2 kg körte" + 1.5; // float (11.7)
Sztringkezelő függvények chr(), ord() - Egy megadott kódú karaktert ad vissza és fordítva substr() - Rész sztring strlen() - Sztring hossza strtolower(), strtoupper() trim() - Üres karakter eltávolító str_replace() - csere strpos() - sztringben sztringet keres (ir) md5(), crypt(), crc32()
Tömbök Sorszámozott (0-val kezdődik) $tomb = array("első elem", "masodik" "…"); $tomb2[] = "első elem"; $tomb2[] = "masodik"; $tomb2[] = "…";
Asszociatív $tomb = array("azon1" => "első elem", "azon2" => "masodik"); $tomb2["azon1"] = "első elem"; $tomb2["azon2"] = "masodik"; $valtozo = $tomb["azon1"]; $tomb[1] = "valami";
A sorszámozott tömb is asszociatív tömb!
Tömbkezelő függvények
count() - tömbelem számlálás explode() - Sztring feldarabolása implode() - Tömbből sztringet készít array_key_exists() - ellenőrzi a keresett index/kulcs létezését a tömbben array_keys() - Visszaadja egy tömb összes indexét reset() - a tömb belső mutatóját az első elemére állítja next() - előre mozgatja a tömb belső mutatóját in_array() - TRUE-val tér vissza, ha létezik az érték a tömbben end() - Az utolsó elemre állítja a tömb belső mutatóját
Változó változók Lehetőség van egy sztring karaktersorozatot
felhasználni futási időben változó azonosítására. $azonosito = "valtozo_neve"; $$azonosito = "Érdekes …"; echo $valtozo_neve; // Érdekes …
Debug Lehetőség van egy változó tartalmának a kiíratására, legyen
az skalár vagy összetett típus. Megjelenik a változó értéke és típusa var_dump($valtozo); alakkal használjuk, érdemes egy <pre> tag-be tenni. array(3) { [0]=> int(1) [1]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } }
Konstansok kezelése Konstans magadása define("allando", "Helló világ!"); Konstans létezésének ellenőrzése defined("allando") Konstans értékének visszanyerése echo allando; // Helló világ! echo constant("allando"); // Helló világ! Az interpreter előfeldolgozója kezeli le.
Operátorok
aritmetikai: + - * / % összehasonlító: < > <= >= <> != !== === növelő, csökkentő: ++ -logikai: ! && || (and, or, xor) sztring konkatenáció: . Hozzárendelő operátorok $a = ($b = 4) + 5; // $a most 9, és $b 4 Minden két változós operátornak van egy értékadással kombinált párja. += -= *= /= %= .= A $a *= 4+2; egyenértékű a $a = $a * (4+2); kifejezéssel.
Függvények function kulcsszó // függyvény deklaráció function fuggveny($valtozo, $valtozo2="valami"){ print($valtozo." ".$valatozo2); return $valtozo2; } // függvény hívás fuggveny("Írd", "ki!"); // Írd ki! fuggveny("Írd"); // Írd valami $fg_nev = "fuggveny"; $fg_nev("Írd"); // Írd valami call_user_func("fuggveny", "Írd", "ki!"); // Írd ki!
Függvény létrehozása futási időben create_function($parameter, $code);
$ujfuggveny = create_function('$a, $b', 'return $a+$b;'); echo $ujfuggveny(4,5); // 9
Változók hatásköre Egy változót értékadással hozunk létre Függvényen belül: function fuggveny($a){ echo $b; // semmit nem ír ki $a = 3; $b = 4; } $a = 1; $b = 2; fuggveny($b); echo $a; //kiírja az 1-et echo $b; //kiírja az 2-et
Globális változók global kulcsszó használatával kiterjeszthető a változók hatásköre function fuggveny($a){ global $b; echo $b; // kiírja az 2-et $a = 3; $b = 4; } $a = 1; $b=2; fuggveny($a); echo $a; //kiírja a 1-t echo $b; //kiírja a 4-t
Elágaztató utasítás I
Elágaztató utasítás II
if ($kifejezes) { ?>
<strong>Ez igaz. } elseif ($kifejezes2) {
?>
<strong>Ez is igaz. } else {
?>
<strong>Ez hamis. }
Ciklus utasítások while ($feltetel) { … } for ($i = 0; $i<10; $i++){
… } foreach ($tomb as $kulcs => $value) { … } Érdemes egy if ($tomb) feltételt elé tenni.