9.05. Változók, adattípusok

Default book

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