Načrtovanje in razvoj spletnih aplikacij

Podatkovni tipi v PHP

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.

  • bool vsebuje le vrednosti true ali false, medtem ko int predstavlja cela števila.
  • int predstavlja cela števila, float pa števila z decimalnim delom.
  • string je besedilo, tudi če vsebuje številke, na primer "123".
  • null pomeni, da vrednost ni določena, zato ni enak prazen niz "", številu 0 ali vrednosti false.
  • array hrani zbirko vrednosti, object pa 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 so is_int(), is_string() in is_array().

Pogoste napake

  • Številska vrednost in niz s številkami sta obravnavana kot enak podatek, čeprav imata različen tip.
  • Vrednost null je obravnavana enako kot 0, prazen niz ali false.
  • Polje array in objekt object sta 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 tip float.

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.