Változók, adattípusok
A PHP-ben használhatunk változókat és adattípusokat is. A változókban értékeket tárolhatunk. A változó neve előtt mindig $ jel található. A PHP félig típusos nyelv, ami annyit jelent, hogy a változó létrehozásakor (deklaráció) nem kell meghatároznunk az adattípust, amit majd tárolunk benne.
A változó neve
A változó neve betűvel vagy aláhúzás jellel kezdődik és bármilyen alfanumerikus karakterrel, illetve 127...255 ASCII kódú karakterrel folytatódhat. A kis és nagybetűk különböznek! Ilyen lehet pl. $a, $A, $szia, $_sajat,stb...
Amikor először értéket adunk egy változónak, akkor jön létre, ekkor foglal le memóriát.
Ha egy változó értékét azelőtt vizsgáljuk meg, mielőtt értéket adunk neki, az értéke NULL lesz (SEMMI) és a PHP egy NOTICE (megjegyzés) üzenetet küld nekünk.
<?php
$a = 5;
$todo = ”szöveg”;
?>
A változó típusának megadása
Egy változó típusát a legegyszerűbben úgy lehet meghatározni, hogy értéket adunk a változónak.
Típuskonverziót alkalmazunk. Az alkalmazható típusok ugyanazok, mint a fenti példában, hozzávéve, hogy az ”integer” lehet ”int” is, a ”double” lehet ”float” és ”real” is.
<?php
$a = (int) $b;
$c = (string) $d;
?>
A változók értékadásakor használhatunk ilyen trükköt:
<?php
$a = $b = 5;
?>
A fenti kifejezést úgy kell értelmezni, mintha az alábbiakat írtuk volna le:
<?php
$b = 5;
$a = $b;
?>
A későbbiekben foglalkozunk részletesen az operátorokkal, amelyek egy változó értékét meghatározzák.
Ha a változónak bármilyen módon értéket adtunk, akkor a típusát is meghatároztuk.
A változók és kifejezések típusai
A különböző programozási nyelveken megszokott típusok a PHP-ban is megtalálhatók:
Numerikus típusok:
int, integer - egész típus – értéke –32768-32767-ig tart
Float, double, real – Lebegőpontos
String - A C#-ben használt string fogalomhoz hasonló, ”...” vagy ’....’ jelek közé írt ASCII karaktersorozat.
Array- Tömb típus. A tömb elemei vegyes típusúak lehetnek
Egy tömb lehet egy, két vagy több dimenziós tömb is. A tömb indexelése történhet hagyományosan 0-tól kezdődő indexeléssel, vagy lehet úgynevezett asszociatív tömböt is létrehozni, amikor a tömbindex valamiféle string, vagy egyéb érték.
Ebben a példában egy dimenziós tömböt hozunk létre.
<?php
$a = array (1, "hello", 2, "world", "hello");
?>
Az alábbi példában kétdimenziós asszociatív hozunk létre.
<?php
$tomb = array (
"a"=> "orange",
"b"=> "banana",
"c"=> "apple",
"numbers" => array (1, 2, 3, 4, 5, 6),
"holes" => array ("first", 5 => "second", "third")
);
?>
array ("a"=> "orange", "b"=> "banana", "c"=> "apple"), "numbers" => array (1, 2, 3, 4, 5, 6), "holes" => array ("first", 5 => "second", "third") ) ?>
A hagyományos tömbök feldolgozásához for vagy pedig while ciklust használunk, az asszociatív tömbökéhez foreach ciklust. A ciklusokról később bővebben szólunk.
Object - Objektum. A típus hasonlít a C# objektumaira, de vannak lényeges különbségek is.
Egy objektum típusú változó létrehozásához először definiálni kell magát az osztályt a class kulcsszóval, hasonlóképpen, mint C#-ban. ezzel később foglalkozunk.
boolean – Logikai értékek. Két érték előre definiált, a TRUE és a FALSE (lehet: true és false is)
NULL - Olyan változók, amelyeknek nincsen beállított értékük
Resource – Erőforrások, mint például file vagy adatbáziskezelő mutatója. Valójában ezek a memória egyes helyére mutató pointerek!
Unknown type - Ismeretlen típusok
Változók és kifejezések visszatérési értékének típusát le lehet kérdezni az alábbi függvényekkel:
bool empty ($a) |
Megadja, hogy a változó üres volt-e vagy nem. |
string gettype ($a) |
Visszaadja a változó típusát. A lehetséges típusok az alábbiak: "integer", "double", "string", "array", "object", "unknown type" |
void settype($var,$type) |
Beállítja egy változó típusát. A lehetséges típusok ($type) lehet: "integer", "double", "string", "array", "object" |
int intval($a,[$alap]) |
Visszaadja a változó értékét egésszé konvertálva a megadott alapú számrendszerben. Az alap default értéke 10. |
bool is_array($a) |
Megadja, hogy a változó tömb vagy sem
|
bool is_bool($a) |
Megadja, hogy a változó logikai típusú vagy sem |
bool is_float ($a) bool is_double ($a) bool is_real ($a) |
Megadja, hogy a változó lebegőpontos-e, vagy sem. |
bool is_long ($a) bool is_integer ($a) bool is_int ($a) |
Megadja, hogy a változó egész vagy sem.
|
bool is_numeric ($a) |
Megadja, hogy a változó numerikus, numerikus szöveg vagy sem. |
bool is_object ($a) |
Megadja, hogy a változó objektum vagy sem |
bool is_resource ($a) |
Megadja, hogy a változó erőforrás azonosító vagy sem (pl. file handler) |
bool is_string ($a) |
Megadja, hogy a változó string vagy sem. |
bool isset (változó) |
Megadja, hogy be van-e állítva a változó. A visszatérési értéke hamis, ha nem és Igaz, ha van értéke a változónak |
void print_r(kifejezés) |
Ember számára olvasható információt ad egy változóról. <?php $a = array (1, 2, array ("a", "b", "c")); print_r ($a); ?> |
Konverzió adattípusok között
A PHP automatikusan, és meglehetősen szabadon kezeli a típusokat. Néha szükség lehet egy bizonyos adattípus alkalmazására. Ekkor használhatjuk az alábbi módszereket:
Típuskényszerítés, mint a C-ben, C#-ben:
$a = (float) $b;
$c = (int) $c;
Használhatjuk a bool settype ( $valtozo, ”tipus”) függvényt. Ekkor a tetszőleges típusú $változó-t átkonvertáljuk az adott típusra. A konverzió sikerességéről bool eredményt ad vissza a függvény.
Lehetséges tipus értékek:
- "boolean" (vagy a PHP 4.2.0 óta "bool")
- "integer" (vagy a PHP 4.2.0 óta "int")
- "float" (csak a PHP 4.2.0 óta, korábban "double")
- "string"
- "array"
- "object"
- "null" (a PHP 4.0.8 óta)
TRUE értéket ad siker esetén, FALSE értéket egyébként.
$ize = "5valami"; // string
$valami = true; // boolean
settype($ize, "integer"); // $ize most 5 (integer)
settype($valami, "string"); // $valami most "1" (string)
Előre definiált változótömbök
ezek úgynevezett szuperglobális változók, azaz minden függvényben, osztályban el lehet érni őket, tartalmukat módosítani lehet, ezért a leggyakrabban olvassuk a tartalmukat és csak ritkán írjuk közvetlenül. A feldolgozásukkor ügyelni kell arra, hogy az esetleges törési próbálkozásokat kikerüljük a használatukkor.
A változók között vannak olyanok, amelyek a rendszerben előre definiáltak. Ezeknek a változóknak a nevét és pillanatnyi értékét a phpinfo() függvény segítségével lehet kiíratni. A változókra hivatkozva természetesen az értékeket fel tudjuk használni, és azt tudjuk manipulálni.
Ezen változóknak az értékét a PHP.INI file-ban lehet beállítani, néhány érték a használt WEB szervertől függ, további értékek pedig a futtató operációs rendszertől függnek.
A változók másik nagy csoportjai a rendszerben alkalmazott modulok értékei. Néhány fontosabb változó csoport
Formok kezelésénél használható változók listája
a GET metódussal elküldött változók listája és értékei. A GET tömb indexe a HTML oldalról elküldött formban lévő INPUT tag name paramétere:
pl. <input name="family" VAL="Fabian"> esetén létrejön a GEt tömbben egy $_GET["family"] indexű elem, aminek az értéke "Fabian"
$_GET[”valtnev”]
POST metódussal elküldött változók listája és értékei. Hasonlóan, mint fent, a FORM-ból eküldött INPUT (vagy más mezők) name paramétere lesz a tümbindex és a value érték lesz a POST tömbelemének értéke.
$_POST[”valtnev”]
Minden elküldött és átvett változó tömbje. Ez tartalmazza az összes GET és POSt változót is. ha ugyanolyan nevű változó érkezik az oldalhoz POST és GET metódussal is, akkor a PHP.INI beállításaitól függően. Általában a POST változók felülírják a GET változókat.
$_REQUEST[”valtnev”]
A korábbi tanulmányainkbó lismert cookie paramétereknek is van tömbje. Ebben jelenik meg a szerver oldali PHP kódban a böngészőben tárolt cookie-k listája egy tömbben:
$_COOKIE["valtnev"]
Mivel a cookie-k a böngészőben tárolódnak, ezért bennük titkos adatok nem tárolhatók, csak esetleges azonosítók.
Ha egy oldalon a setcookie("nev", ertek, lejarati idő) függvényt használjuk, akkor létrejön a böngészőben a megfelelő cookie.
A cookiek adatait tartalmazó változók.
$_COOKIE[”valtnev”]
File-ok feltöltésénél használható tömb: $_FILES
Ebbe a tömbbe akkor kerülnek adatok, amikor a böngészőből file-okat töltünk fel a HTML <INPUT type="FILE"> paranccsal. A tömb tartalmaz minden szükséges információt ahhoz, hogy később a fájlt megfelelő módon tudja a PHP kód kezelni. Erre részletesen később térek ki.
SESSION-ök (munkamenetek)
A Sessionok az adatok átmeneti tárolására való biztonságos tárolási módszert jelentik. A böngészőben ilyenkor egy véletlenszerűen létrejött változót tárol a szerver cookie-ként, amely a szerveren azonosít egy tárolót. Ha a szerveren a felhasználó kilép egy sessionből, akkor a szerver oldali adatok megsemmisülnek és a böngészőben használt session azonosító már nem fog azonosítani a szerveren semmiféle értékeket.
Sessionokben használt változók listája és értékei
$_SESSION[”valtnev”]
egy PHP oldalon a session_start() utasítás indítja el a session használatát és minden olyan oldalon, ahol akarjuk használni a session adatokat ennek az utasításnak pontosan egyszer le kell futnia.
Ha a session_destroy() utasítást futtatjuk le, akkor megsemmisül a session és érvénytelenné válik a böngészőben a session cookie, tehát nem lesz elérhető a szerveren tárolt adat.
Environment változók
Az operációs rendszerről, a környezeti beállításokról, a WEB szerverről, a böngészőről, az aktuálisan meghívott lapról és a kliensről minden lényeges adatot felsorol, beleértve az IP címeket is.
A környezeti változók. Ez leginkább fejlesztői gépen használandó, éles környezetben semmiképpen sem!
$_ENV[”valtnev”]
A HTTP protokollban definiált további változók. Ezek közül a változók közül néhány megtalálható a környezeti változók között is.
A szerver IP címe
$_SERVER[”REMOTE_ADDR”]
a szerver neve
$_SERVER[”REMOTE_HOST”]
a lekért oldal azonosítója
$_SERVER[”HTTP_REFERER”]
a szerverhez kapcsolódó böngésző fajtája, az operációs rendszer fajtája
$_SERVER[”HTTP_USER_AGENT”]
a WEB oldalnak átadott paramétersztring (a.php?A=proba)
$_SERVER[”QUERY_STRING”]
Az aktuálisan futtatott PHP oldal azonosítója:
$_SERVER["PATH_TRANSLATED"]
A szerveren lévő WEB szerver gyökérkönyvtára
$_SERVER["DOCUMENT_ROOT"]
Az alábbiakban egy példát mutatok be a fenti változók használatából:
A pár sort beszúrva egy script elejére előállítja konstans formában az aktuálisan futó script elérési útvonalát, továbbá a WEB szerver dokumentumainak elérési útvonalát.
$path=dirname($_SERVER["PATH_TRANSLATED"]);
DEFINE("PATH",$path);
DEFINE("DOCROOT", $_SERVER["DOCUMENT_ROOT"]);
Konstansok
A PHP-ben vannak előre definiált konstansok, továbbá mi is definiálhatunk a
define(nev, érték) parancs segítségével.
Az előre definiált konstansok közül néhány:
Az éppen futtatott file neve: __FILE__
Az éppen futó programsor: __LINE__
PHP_VERSION a futtatott rendszer verziószáma
A futtató operációs rendszer: PHP_OS
logikai értékek: TRUE, FALSE