IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

2. diel - Tipy pre začiatočníkov v PHP

Vitajte v 2. diele série Tipy pre začiatočníkov v PHP. Dozviete sa, ako sa vyhodnocujú podmienky, zistíte rozdiel medzi hodnotou NULL v PHP a SQL, naučíte sa dvoma spôsobmi pretypovať premennú, neurobíte chybu pri výpise prvku poľa a možno skrátite časť svojho zdrojového kódu. :-)

Vyhodnotenie podmienky

Pre začiatok je dôležité vedieť, čo je to výraz (expression) a čo príkaz (statement). Výraz môže byť napríklad nejaká matematická operácia. U neho možno vždy vyhodnotiť, či je pravdivý alebo nepravdivý (TRUE / FALSE). Jednoduchým výrazom môže byť napríklad súčet dvoch premenných:

$a + $b

code

Ak chceme u výrazu zistiť jeho pravdivostnú hodnotu, využíva sa predovšetkým konštrukciou, kde je nejaká podmienka (if, ElseIf, while, switch atp.).

Na rozdiel od toho je príkaz niečo, čo sa má vykonať. Napríklad 'ulož do premennej túto hodnotu'. Na konci každého príkazu je bodkočiarka. Niektorí začiatočníci v jazyku PHP si tieto dva pojmy pletú a niekedy na bodkočiarku zabúdajú, alebo ho naopak napíšu tam, kam nemajú. $vysledek = $a + $b je výraz, zatiaľ čo $vysledek = $a + $b; je príkaz.

Do podmienok sa vždy zadáva výraz (ak by ste sa pokúsili odovzdať príkaz, skončilo by to chybou). Vždy sa vyhodnocuje, či je zadaný výraz pravdivý. Inými slovami, či sa výraz rovná pravdivostná hodnote TRUE.

Znamená to, že miesto:

if ($vyraz == true)

code

stačí zapísať len:

if ($vyraz)

code

Niektorí začínajúci programátori si to príliš neuvedomujú, ale napríklad vie, že pri negáciu možno zapísať iba:

if (!$vyraz)

code

namiesto zápisu vrátane == true. Ide o ten istý prípad.

Iným prípadom ale je, keď nechceme testovať len hodnotu výrazu, ale aj jeho dátový typ. Podmienky automaticky prevádza dátový typ výrazu na pravdivostnú hodnotu (tj. TRUE / FALSE). Znamená to, že ak podmienke odovzdáme treba nejaký reťazec, prevedie ho. My ale môžeme v určitých prípadoch chcieť porovnávať bez prevodu hodnoty, preto sa používajú tri rovná sa (tzv. Operátor identity).

$retezec = "cokoli";  // všimněte si, že je to řetězec, ne pravdivostní hodnota

if ($retezec == true) {  // nebo stačí jen if ($retezec)
  // tato podmínka projde, protože neprázdný řetězec PHP převede na true. Kdyby byl prázdný, neprovedla by se
}

if ($retezec === true) {
  // tato podmínka neprojde, protože datové typy nepřevádíme
}

code

Výrazom nemusí byť len jedna hodnota. Výrazom môže byť aj celá matematická operácia, napríklad sčítanie. V takýchto prípadoch sa väčšinou testuje, či je hodnota naľavo napríklad väčšia ako hodnota napravo. To celé je ale stále jeden výraz, ktorý sa vyhodnotí (či je pravdivé alebo nepravdivé) a podľa toho sa rozhodne, či sa spustí kód.

$a = 5;
$b = 10;

if ($a + $b > 20) {
  // kód se logicky nespustí, protože 5 + 10 není větší než 20 a výraz je FALSE
}

code

Aj tento príklad je skrátený. Pokiaľ si výraz uložíme do premennej, dostaneme sa späť na začiatok - nemusíme uvádzať == true

$a = 5;
$b = 10;
$vysledek = $a + $b > 20;

if ($vysledek) {
  // kód
}

code

Je možnosť vyhodnotiť podmienku a zároveň do premennej uložiť hodnotu. Musíme ale výraz obaliť zátvorkami.

$a = 5;
$b = 10;
if ($vysledek = $a + $b > 2)

code

Tu sa do premennej $ vysledok uloží až výsledok celého výrazu '$ a + $ b> 2', čo bude TRUE. My ale chceme uložiť do premennej výsledok súčtu. Využijeme na to zátvorky:

$a = 5;
$b = 10;
if (($vysledek = $a + $b) > 2) {
  echo $vysledek;  // vypíše 15
}

code

Teraz sa prvýkrát uloží do premennej výsledok súčtu a až potom sa vyhodnotí, či je to vyšší ako 2. Znamená to teda, že premenná $ vysledok obsahuje číslo 15 a môžeme s ňou v bloku pracovať.

Rozdiel medzi NULL v PHP a SQL

Oba jazyky obsahujú dátový typ NULL. V oboch jazykoch ale funguje trochu inak. V PHP znamená 'prázdny', zatiaľ čo v SQL znamená 'neznámy'.

V PHP sa výraz:

NULL == NULL

code

vyhodnotí ako pravdivý, pretože prázdna hodnota sa rovná prázdne hodnote.

V SQL sa ale tento výraz správa inak. Výsledkom je opäť NULL, pretože rovná sa neznáma hodnota inej nepoznáme hodnote? To nevieme, preto nie je možné určiť, či je to TRUE alebo FALSE. Z toho dôvodu výsledkom je opäť 'neznáma hodnota', čiže NULL.

Pretypovanie premenných

Pretypovanie premenné inými slovami znamená zmeniť jej dátový typ. Často sa pretypovanie používa napríklad u databázových dotazov, kedy hľadáme podľa určitého ID. Pretypovať možno dvoma spôsobmi:

Použitím funkcie

K tomu slúži funkcia settype (). Prvým parametrom je premenná, ktorá má byť pretypovaná, a druhý je dátový typ. Ten môže nadobúdať hodnoty boolean (skrátene bool), integer (skrátene int), float, string, array, object, null.

$cislo = 1;
$pravdivostniHodnota = settype($cislo, "bool");  // $cislo je nyní TRUE

$cislo = 0;
$pravdivostniHodnota = settype($cislo, "bool");  // $cislo je nyní FALSE

code

Ak by sme naopak chceli zistiť dátový typ premennej, použijeme na to funkciu gettype ().

$cislo = 1;
echo gettype($cislo);  // integer

code

Použitie zátvorky pred výrazom

Namiesto funkcií sa častejšie používa aj kratšie zápis s pomocou zátvoriek pred výrazom.

$cislo = 1;
$pravdivostniHodnota = (bool) $cislo;

code

Ako bolo napísané vyššie, pretypovanie sa často používa napríklad u databázových dotazov, kde hľadáme podľa určitého ID. Aby sme si boli istí, že do databázového dopytu určite odovzdávame číslo, možno vstupnú hodnotu pretypovať.

$id = (int) $_GET["id"];

code

Teraz sa nemusíme báť, že by v premennej $ id bolo niečo iné ako číslo.

Niekedy sa pretypovanie používa aj kvôli jednoduchšiemu zápisu pri manipulácii s objektom miesto poľom.

$pole = array("klic" => "hodnota");
echo $pole["klic"];  // musíme psát závorky, v některých případech i uvozovky...

code

Pri objekte stačí napísať iba šípku. Ak v PHP přetypujeme poľa na objekt, automaticky sa vytvorí objekt triedy stdClass, kde sú vlastnosti ako kľúče poľa.

$pole = array("klic" => "hodnota");
$objekt = (object) $pole;

echo $objekt->klic;

// lze ale přetypovat i rovnou při vytváření pole
$objekt = (object) array(
  "klic_1" => "hodnota",
  "klic_2" => "hodnota"
)

code

Vypísanie prvku poľa

Ak ste sa s dátovým typom 'pole' už stretli, určite viete, že sa k jeho prvku dostanete pomocou kľúča.

$pole = array("klic" => "hodnota");
echo $pole["klic"];  // vypíše 'hodnota'

code

V takom prípade ale môže dôjsť k chybe, ak sa pokúsime hodnotu prvku vypísať v reťazci.

echo "řetězec včetně $pole["prvek"] nějakého prvku v poli.";

code

V tomto príklade sa stane, že sa ukončí reťazec hneď za prvú hranatou zátvorkou. Po ňom bude nasledovať sada znakov, ktorým PHP nerozumie a preto vyhodí chybu. Máme hneď niekoľko spôsobov, ako sa chyby vyvarovať.

// použití apostrofů pro klíč
echo "řetězec včetně $pole['prvek'] nějakého prvku v poli.";

// ukončení řetězce
echo "řetězec včetně " .  $pole["prvek"] . " nějakého prvku v poli.";

// použití svorek (tento způsob se mi zdá nejlepší)
echo "řetězec včetně {$pole["prvek"]} nějakého prvku v poli.";

code

Existuje ešte jedna možnosť a to úvodzovky a apostrofy úplne vynechať.

echo "řetězec včetně $pole[prvek] nějakého prvku v poli.";

code

Tento spôsob ale neodporúčam začiatočníkom, pretože funguje len v reťazci. Ak by sme sa pokúsili vypísať hodnotu samostatne:

echo $pole[prvek];

code

tak skončí zápis chybou, pretože sa PHP bude snažiť dosadiť hodnotu konštanty, ktorá neexistuje.

Návrat pravdivostná hodnoty z funkcie

Vďaka tomu, že sa po príkaze return nespracováva ďalší kód, môžeme vynechať niekedy aj niekoľko riadkov. Ukážme si jednoduchý príklad:

function vetsiNez($a, $b)
{
  $jeVetsi = $a > $b;
  if ($jeVetsi) {
    return TRUE;
  } else {
    return FALSE;
  }
}

code

Vyššie je primitívne funkcie, ktorá zistí, či je hodnota prvého parametra väčšia než hodnota druhého. Podľa toho vráti TRUE alebo FALSE. Telo tejto funkcie možno však skrátiť na jeden riadok. Ako?

A) Vyhodiť else

Vďaka tomu, že sa po príkaze return nespracováva žiadny kód, môžeme else vyhodiť.

function vetsiNez($a, $b)
{
  $jeVetsi = $a > $b;
  if ($jeVetsi) {
    return TRUE;
  }

  return FALSE;
}

code

Ak sa podmienka splní, vráti sa TRUE a ďalšie kód neprebehne.

B) Vyhodiť if

Keďže máme výsledok výrazu uložený v premennej $ jeVetsi, môžeme zahodiť aj podmienku if.

function vetsiNez($a, $b)
{
  $jeVetsi = $a > $b;

  return $jeVetsi;
}

code

C) Vyhodiť premennú

Daný výraz vôbec nie je potreba ukladať do premennej a jeho výsledok môžeme rovno vrátiť.

function vetsiNez($a, $b)
{
  return $a > $b;
}

code

Pozn .: Jedná sa len o príklad toho, ako možno daný kód skrátiť, taká funkcia by bola zbytočná.

Uloženie pravdivostná hodnoty do premennej

Ide o veľmi podobný prípad ako u predchádzajúceho príkladu. Jednoduchá ukážka:

if ($a + $b > 10) {
  $vysledek = TRUE;
} else {
  $vysledek = FALSE;
}

code

Tento kód možno taky skrátiť na jeden riadok. Môžeme k tomu využiť napríklad ternárne operátor.

$vysledek = $a + $b > 10 ? TRUE : FALSE;

code

Ternárne operátor zistí pravdivostnú hodnotu výrazu a ak je pravdivá, použije sa výraz za otáznikom. Naopak ak nie je pravdivá, použije sa výraz za dvojbodkou. Ak je výsledným výrazom pravdivostná hodnota, môžeme výraz za otáznikom vynechať.

$vysledek = $a + $b > 10 ?: FALSE;

code

Pri tomto príklade možno ale sazmořejmě vynechať aj samotný ternárne operátor.

$vysledek = $a + $b > 10;

code

To je z druhého dielu všetko. Budúci diel bude zameraný skôr na prácu s dátami z databázy - ako znížiť záťaž a ako prenášať len tie dáta, ktorá naozaj potrebujeme.


 

Predchádzajúci článok
Tipy pre začiatočníkov v PHP
Všetky články v sekcii
Tipy pre začiatočníkov v PHP
Článok pre vás napísal Martin Konečný (pavelco1998)
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se o IT moc nezajímá, raději by se věnoval speciálním jednotkám jako jsou SEALs nebo SAS. Když už to ale musí být něco z IT, tak tvorba web. aplikací v PHP. Také vyvýjí novou českou prohlížečovou RPG hru a provozuje osobní web http://www.mkonecny.cz
Aktivity