PHP podpira več vgrajenih podatkovnih tipov. Med najpogosteje uporabljene sodijo bool, int, float, string, array, object, null in resource. Razumevanje podatkovnih tipov je pomembno, ker vplivajo na način shranjevanja, obdelave in preverjanja podatkov v programu.
Osnovna pravila
- Vsaka spremenljivka v PHP vsebuje vrednost določenega podatkovnega tipa.
- Podatkovni tip določa, kako PHP vrednost razume in kako jo lahko obdeluje.
- Nekateri tipi predstavljajo eno samo vrednost, drugi pa več povezanih vrednosti.
- Pri delu s podatki je pomembno razlikovati med vrednostjo in njenim tipom.
Pomni: Enaka vsebina ni nujno tudi enakega tipa. Na primer 5 je število, "5" pa niz znakov.
Skalarni podatkovni tipi
Skalarni tipi predstavljajo eno samo vrednost. Mednje sodijo bool, int, float in string.
bool
Logični tip bool ima samo dve vrednosti: true in false. Uporabljamo ga predvsem pri pogojih, primerjavah in preverjanjih.
<?php
$avto = true;
$motor = false;
?>
Pri pretvorbah se število 0 obravnava kot false, vrednosti, različne od 0, pa praviloma kot true.
int
Tip int predstavlja cela števila. PHP podpira desetiški, osmiški, šestnajstiški in dvojiški zapis celih števil.
17 // desetiško število
-693 // negativno desetiško število
0o352 // osmiško število
0x4ac6 // šestnajstiško število
0b1010 // dvojiško število
V sodobnem PHP je za osmiški zapis priporočljiv zapis 0o....
float
Tip float predstavlja decimalna števila oziroma števila s plavajočo vejico.
2.856
81.0
22.7e+2
43.34E+10
Tip float uporabljamo pri podatkih, kjer cela števila niso dovolj, na primer pri meritvah, cenah ali izračunih z decimalnimi vrednostmi.
string
Tip string predstavlja niz znakov. Niz lahko zapišemo z dvojnimi narekovaji, enojnimi narekovaji ali z daljšimi zapisi, kot je heredoc.
- niz z dvojnimi narekovaji:
"to je niz" - niz z enojnimi narekovaji:
'tudi to je niz' - dolg niz: heredoc
V nizih z dvojnimi narekovaji lahko uporabljamo posebna zaporedja, kot so \n, \t in \$. Pri enojnih narekovajih se vsebina večinoma obravnava dobesedno.
Sestavljeni podatkovni tipi
Med sestavljene tipe najpogosteje uvrščamo array in object. Ti tipi lahko vsebujejo več podatkov oziroma bolj zapletene strukture.
array
Polje array lahko vsebuje več vrednosti. Te vrednosti so dostopne prek ključev, ki so lahko števila ali nizi.
Primer numeričnega polja:
<?php
$drzave = ["Slovenija", "Hrvaška", "Avstrija"];
?>
Primer asociativnega polja:
<?php
$drzave = [
"Ljubljana" => "Slovenija",
"Zagreb" => "Hrvaška",
"Dunaj" => "Avstrija"
];
?>
Polja so lahko enodimenzionalna ali večdimenzionalna.
object
Objekti so osnova objektno usmerjenega programiranja. Razred določimo z rezervirano besedo class, nato pa ustvarimo objekt z uporabo besede new.
<?php
class Avto {
public string $znamka;
public function nastaviZnamko(string $znamka): void {
$this->znamka = $znamka;
}
}
$avtomobil = new Avto();
$avtomobil->nastaviZnamko("BMW X1");
?>
Pozor: Polje array in objekt object nista enaka podatkovna tipa. Polje hranimo kot zbirko elementov, objekt pa predstavlja primerek razreda z lastnostmi in metodami.
Posebni podatkovni tipi
Med posebne tipe, ki imajo poseben namen, uvrščamo predvsem null in resource.
null
Spremenljivka z vrednostjo null nima določene vrednosti. To ni isto kot 0, prazen niz ali false.
V PHP do vrednosti null pridemo na primer takrat, ko:
- spremenljivki izrecno priredimo
null, - spremenljivka ni definirana,
- spremenljivko odstranimo s funkcijo
unset().
resource
Tip resource predstavlja povezavo oziroma ročico do zunanjega vira, kot so datoteka, omrežni tok ali drug sistemski vir.
Primer odpiranja datoteke:
<?php
$podatki = fopen("dir/data/dat.txt", "r");
?>
Preverjanje tipa
Tip podatka lahko preverimo s funkcijo gettype(). Pri tem je treba vedeti, da funkcija pri vrednosti tipa float zaradi zgodovinskih razlogov vrne niz "double".
<?php
$test = 5;
echo gettype($test);
?>
Primerjave
Pri učenju podatkovnih tipov je pomembno razlikovati med tipi, ki so si na prvi pogled podobni, vendar pomenijo nekaj drugega.
boolvsebuje le vrednostitruealifalse, medtem kointpredstavlja cela števila.intpredstavlja cela števila,floatpa števila z decimalnim delom.stringje besedilo, tudi če vsebuje številke, na primer"123".nullpomeni, da vrednost ni določena, zato ni enak prazen niz"", številu0ali vrednostifalse.arrayhrani zbirko vrednosti,objectpa predstavlja objekt z lastnostmi in metodami.
Pomni: Pri delu v PHP je treba razlikovati med vrednostjo in tipom podatka. Enak izpis še ne pomeni nujno enakega tipa.
Priporočila
- Pri pisanju kode naj bo jasno, kateri podatkovni tip posamezna spremenljivka predstavlja.
- Pri primerjanju vrednosti je priporočljivo uporabljati natančnejše operatorje, kadar želimo upoštevati tudi tip podatka.
- Pri delu s polji in objekti je smiselno dosledno izbirati ustrezno strukturo glede na namen podatkov.
- Pri preverjanju tipov je poleg funkcije
gettype()koristno poznati tudi funkcije, kot sois_int(),is_string()inis_array().
Pogoste napake
- Številska vrednost in niz s številkami sta obravnavana kot enak podatek, čeprav imata različen tip.
- Vrednost
nullje obravnavana enako kot0, prazen niz alifalse. - Polje
arrayin objektobjectsta zamenjana, čeprav imata različno vlogo. - Pri preverjanju tipa se upošteva le izpis vrednosti, ne pa tudi njen dejanski podatkovni tip.
- Pri funkciji
gettype()je rezultat"double"napačno razumljen kot drug tip, čeprav pomeni tipfloat.
Pozor: Napačno razumevanje podatkovnih tipov lahko vodi do težje opaznih napak pri primerjanju, izračunih in pogojih. Jasno razlikovanje med tipi je zato pomemben del pravilnega programiranja.