- Základní údaje
- Kategorie: PHP
- Zobrazení: 340
Proměnné patří mezi základní stavební kameny každého programovacího jazyka.
Definice – proměnná je název pro nějaké místo, do kterého pak můžeme dosadit libovolnou hodnotu. Příklad – vytváříte program, ve kterém potřebujete několikrát pracovat s číslem 4000000. Jednoduchým přiřazením tohoto čísla do proměnné (např. s názvem x), již pak v samotném běhu programu používáte pouze název této proměnné:
<?php
$x = 4000000;
//proměnné x jsme přiřadili číslo 4000000
echo $x * 2;
//výsledkem bude číslo 8000000 – tedy 4 miliony krát dvě
?>
V PHP se proměnná značí symbolem dolaru - $ (pravý Alt a ů), za kterým následuje jméno proměnné (např. $pokus představuje proměnnou s názvem pokus). Vkládání hodnot do proměnné se nazývá přiřazování hodnot proměnné. Do proměnné samozřejmě nemusíme vždy přiřazovat pouze číslo. Může to být i libovolný text neboli řetězec:
<?php
$adresa = 'Palackého 125, Nová Paka, 542 12';
//vytvořili jsme proměnnou s názvem adresa, která obsahuje delší text
echo $adresa;
?>
Proměnné se mohou během programu měnit. Tedy např.:
<?php
$adresa = 'Palackého 125, Nová Paka, 542 12';
echo $adresa;
echo '<br />';
//vypíše adresu a zařídí, aby se vše následující vypsalo na nový řádek
$adresa = 'Sokolovská 28, Praha 8, 111 50';
echo $adresa;
echo '<br />';
//vypíše adresu a zařídí, aby se vše následující vypsalo na nový řádek
$adresa = 'Kamenická 85, Písek 5, 245 20';
echo $adresa;
echo '<br />';
//vypíše adresu a zařídí, aby se vše následující vypsalo na nový řádek
?>
Tento příklad vypíše jednotlivé adresy vždy na nový řádek:
Palackého 125, Nová Paka, 542 12 Sokolovská 28, Praha 8, 111 50 Kamenická 85, Písek 5, 245 20
Názvy proměnných
Každá proměnná má svůj název. Můžeme používat písmena a také znak podtržítko (_). Ovšem název nesmí začínat číslicí! PHP je programovacím jazykem, který je tzv. „Case sensitive“, neboli je citlivý na velká či malá písmena. Můžete tedy používat jak malá tak velká písmena, ale pamatujte, že je v každém z nich rozdíl. České znaky lze také používat, ale velmi důrazně se to nedoporučuje. Obecně lze říci, že můžete používat všechny znaky, které mají ASCII hodnotu od 127 do 255 (ASCII je standardizovaný způsob, který přiděluje každému znaku určité číslo – hodnotu ASCII). Používejte pokud možno názvy, které alespoň trochu symbolizují to, co daný skript bude vykonávat nebo daná proměnná obsahuje. V programu se pak budete později lépe orientovat.
Když proměnná neexistuje
Pokud se pokusíte v PHP spustit skript s proměnnou, která neexistuje, mohou nastat dvě varianty možností:
- buď je PHP nastaveno tak, aby vypsalo chybové hlášení (o těchto nastaveních později..)
- je PHP nastaveno tak, že nevypisuje chybové hlášení – pak se nic nevypíše
<?php
$pokus=1;
//vytvořili jsme proměnnou s názvem pokus, která obsahuje číslo 1
echo $pkus;
//zde je napsáno místo pokus pkus, tedy takováto proměnná neexistuje
?>
Pokud je PHP nastaveno na vypisování chybových hlášení v tomto případě vypíše: Notice: Undefined variable: c in C:\wamp\www\index.php on line 4 (cesta je samozřejmě dle daného umístění souboru)
Zrušení proměnné
Pokud jednou proměnné přiřadíte určitou hodnotu, bude tato proměnná existovat až do konce skriptu PHP. To sice nemusí, ale také může vadit. Pokud tedy potřebujeme určitou proměnnou zrušit, použijeme tzv. kontrukci unset, za kterou se do závorek vypíše jméno proměnné, kterou potřebujeme zrušit.
unset ($a)
Příklad:
<?php
$a = 1;
// Proměnná $a teď obsahuje jako hodnotu číslo 1
echo $a;
// Vypíše hodnotu proměnné $a tedy 1
unset($a);
// konstrukce unset zruší proměnnou $a. Tedy nyní již proměnná $a už neexistuje.
echo $a;
// Nyní (pokud je tak PHP nastaveno) vypíše stránka chybu
?>
Proměnné uvnitř řetězce
Následující příklad demonstruje užití vytvořené proměnné uvnitř nějakého textu – řetězce.
<?php
$jmeno = 'Alík';
// Vytvoříme proměnnou $jmeno a dáme jí jako hodnotu řetězec 'Alík'
echo "Můj pes se jmenuje $jmeno";
// Vypíše: Můj pes se jmenuje Alík
?>
Další příklad ukazuje, jak je možné spojit proměnnou s určitým textem:
PHP je benevolentní k umístění znaku dolaru – funguje i varianta, kdy dolar není uvnitř závorek:
echo "Máme doma ${jmeno}a";
Spojování řetězců
Spojování řetězců je vlastně spojování kusů textu. Pro spojování textu se v PHP používá tečka (.), vložená mezi tyto řetězce. Např:
<?php
echo 'a'.'b'.'c';
// vypíše se abc
?>
Podobně můžete spojovat proměnné:
<?php
$znak = 'x';
echo $znak . $znak . $znak;
//Vypíše xxx
?>
Další variantou může být připojování nových hodnot k již vytvořené proměnné:
<?php
$a = '1';
// Proměnná $a obsahuje text: 1
$a .= '2';
// Proměnná $a nyní připojí text: 2
$a .= '3';
// Proměnná $a nyní připojí text: 3
echo $a;
// Nakonec se vypíše: 123
?>
Operace s jednotlivými znaky
Každý řetězec má určitý počet znaků. PHP si jednotlivé znaky umí očíslovat. Příklad:
$a = abcd;
//Pořadí znaků je tedy a=0, b=1, c=2, d=3 atd.
První znak má pořadí 0, druhý 1, třetí 2 atd. Tedy oproti klasickému číslování se u PHP ale i u jiných programovacích jakzyků začíná nulou. Pokud potřebujeme nahradit daný znak z určité proměnné, vypadá to následovně:
<?php
$a = '12345';
$a[2] = 'x';
// znak na pozici 2 v řetězci je přepsán znakem x.
echo $a;
// Vypíše: 12x45
?>
Požadovaná pozice se vkládá do hranatých závorek [ a ] (klávesa pravý Alt+F a pravý Alt+G). Nicméně může se používat také složených závorek – { a } (klávesa pravý Alt+B a pravý Alt+N). Oba zápisy fungují stejně. Ovšem je mezinárodně dohodnuto, že verze PHP 6 bude podporovat již jen první způsob zápisu. Pokud znak neexistuje Pokud program požaduje vypsání znaku na pozici, kde nic není (přesněji řečeno, která neexistuje), nevypisuje se nic nebo chybové hlášení (záleží na nastavení výpisu chyb PHP serveru).
<?php
$a = 'ABCDE';
echo $a[5];
// Pokus o výpis znaku na pozici 5.
// Nevypíše nic nebo chybové hlášení (dle nastavení PHP)
?>
Připsání znaku v případě, že neexistuje znak na dané pozici Pokud se pokusíte změnit znak na neexistující pozici, dojde k připsání tohoto znaku do řetězce:
<?php
$a = 'abcd';
$a[4] = 'x';
// Písmeno x se dopíše na 4, tedy v tomto případě neexistující pozici.
echo $a;
// Vypíše: abcdx
?>
Vyzkoušejte ještě variantu, kdy nebude daná pozice navazovat na řetězec. Např. zadáte pozici 8:
<?php
$a = 'abcd';
$a[8] = 'x';
// Písmeno x chceme vypsat na 8. pozici. 4. až 7. ale neexistuje.
echo $a;
// Vypíše: abcd x. Řetězec prostě vytvoří mezeru
?>
Určení pořadí znaku pomocí proměnné O něco složitěji vypadá následující příklad. Namísto přímého uvedení pořadového čísla znaku je použita proměnná:
<?php
$a = 'ABCDE';
$poradi = 3;
echo $a[$poradi];
// Vypíše znak na pozici 3, tedy D
?>
- Základní údaje
- Kategorie: PHP
- Zobrazení: 351
Čísla v PHP
PHP podporuje čísla ve dvojí podobě – celá (dat. typ integer) a reálná čísla (dat. typ float).
Celá čísla
Celá čísla jsou jakákoliv čísla, která nemají desetinnou čárku. Příkladem celých čísel může být např. -7, 9, 145, 2 458, -128 523 atd. Celá jsou ovšem v PHP pouze v rozsahu od -2 147 483 648 do +2 147 483 647. Jakmile se bude jednat o číslo mimo tento rozsah, bude se automaticky jednat o číslo reálné. Zápis celého čísla – 3 (jakmile nenapíšete desetinnou tečku v zápisu čísla, jedná se vždy o číslo celé) POZOR: pokud zapíšete číslo takto – 0x nebo 0X bude to považováno za číslo zapsané v šestnáctkové soustavě. Pokud zapíšete číslo takto – 017, bude to považováno za číslo zapsané v osmičkové soustavě.
Reálná čísla
Reálná čísla jsou čísla, která mohou, ale nemusí obsahovat desetinnou čárku. Na rozdíl od matematiky mají reálná čísla v PHP omezenou přesnost (tedy při výpočtech se zaokrouhlují). V manuálu pro PHP se uvádí, že mají přesnost na 16 číslic. Příkladem pro reálná čísla je např. 9,15 nebo 159,1235 atd. Zápis reálného čísla – 3.0 (pro desetinnou čárku se v zápisu PHP používá tečka) Zápis reálného čísla ve vědecké notaci – číslo, které má za sebou písmeno malé „e“ nebo velké „E“, za kterým pokračuje číslo zvané exponent.
<?php
echo 12e3;
//vypíše se 12000
?>
Proč se vůbec tedy používají celá i reálná čísla, když by vlastně stačila čísla reálná?
- Výpočty s celými čísly bývají o něco rychlejší (tato vlastnost se projeví jen u velmi složitých výpočtů)
- Celá čísla jsou zcela přesná, nezaokrouhlují se, u reálných dochází k zaokrouhlování, tedy nepřesnostem
Matematické výpočty s čísly
PHP umí jak základní, tak složitější matematické operace. Pro začátek jeden z příkladů:
<?php
echo 12 + 6
//vypíše 18
?>
Jak už bylo zmíněno, mezi základní datové typy patří také čísla. PHP podporuje dva základní číselné typy a to celá a reálná čísla. Základní vlastností je to, že se s nimi dá počítat. Nabídka matematických schopností PHP jazyka nevybočuje z toho, co nabízí většina programovacích jazyků. Zápis matematických operací vychází z jazyka C. V PHP můžete běžně sčítat, odčítat, násobit a dělit. Základní operace vypadají následovně:
+ | sčítání |
- | odčítání |
* | násobení |
/ | dělení |
% | zbytek po dělení |
Příklad základních matematických operací:
<?php
echo 10 * 2 + 4;
// Vypíše: 24
?>
Dělení čísel Dělení čísel má svá přesná pravidla. Pokud dělíme dvě čísla a výsledkem bude jiné číslo než celé, bude výsledným datovým typem tohoto čísla reálné číslo, tedy číslo s desetinnou čárkou:
<?php
$a = 10 / 5;
var_dump($a);
echo "</br>";
// Výsledkem je celé číslo, vypíše int(2)
$b = 10 / 3;
var_dump($b);
// Výsledkem je reálné číslo, vypíše float(3.3333333333333)
?>
Pozn.: int a float jsou výrazy pro vyjádření datového typu (int = celé číslo, float = reálné číslo). Více o označování datových typů později.
Operace inkrementace a dekrementace
Jedná se o speciální matematické operace, které zvětšují, respektive zmenšují hodnotu proměnné o jednu. Princip je v podstatě jednoduchý - inkrementace (++) způsobí zvětšení hodnoty proměnné o jednu a naopak dekrementace (--) způsobí zmenšení hodnoty proměnné o jednu. Zápis může vypadat takto: $x++ ale také ++$x Oba zápisy jsou možné, ale každý se chová poněkud jinak. V prvním případě - $x++ vydá takovýto výraz nejprve stav proměnné x a potom k ní přičte jedničku. Tedy vydá číslo 3. Ve druhém případě - ++$x se nejprve k proměnné x přičte jednička a pak výraz vydá stav této proměnné, tedy číslo 4. Viz následující příklad:
<?php
$x = 3;
$y = $x++;
echo $y;
//Vypíše 3
echo "</br>";
echo $x;
//Vypíše 4
?>
Přiřazování a jeho další možnosti
Přiřazování zde již bylo probíráno z počátku. Ovšem existují další varianty než jen obyčejné přiřazení hodnot do proměnné.
- Přiřazení hodnoty do několika proměnných naráz: $a = $b = $c = 25; Po takovém přiřazení se do všech tří proměnných přiřadí hodnota 25
- Kombinované přiřazení: $a = ($b = 3) + 4; V tomto případě se nejdříve přiřadí hodnota 3 proměnné $b, následně se tato hodnota přičte k číslu 4 a tento výsledek se přiřadí proměnné $a.
- Přiřazení s operací: $a = $a + 3; Zde se proměnné $a přičte číslo 3. PHP však umožňuje zkrácený zápis: $a += 3;
- Následující tabulka obsahuje několik příkladů normální a zkrácených zápisů přiřazení proměnné s operací:
Normální zápis | Zkrácený zápis |
$a = $a + 33 | $a += 33 |
$a = $a - 5 | $a -= 5 |
$a = $a * 10 | $a *= 10 |
$a = $a / 8 | $a /= 8 |
$a = $a % 3 | $a %= 3 |
- Základní údaje
- Kategorie: PHP
- Zobrazení: 299
Činnost většiny programů (a to nejen v PHP) je řízena tzv. podmínkou. Podmínka je jednoduše řečeno zápis, který PHP vyhodnotí a zjistí, zda je pravdivý nebo ne. Další program pak může pokračovat a to jak pro stav, kdy je podmínka pravdivá (je splněna) či naopak nepravdivá (není splněna).
Podmíněný příkaz if
Podmínky v PHP jsou řešeny pomocí příkazu if. Dělíme jej na úplný a neúplný.
Úplný podmíněný příkaz if
Úplný podmíněný příkaz je takový, který řeší nejen stav, kdy je daná podmínka splněna, ale i stav, kdy podmínka není splněna. Celá konstrukce příkazu if vypadá zjednodušeně takto:
if (podmínka)
příkaz který se má vykonat pokud je podmínka pravdivá
else
příkaz který se má vykonat pokud podmínka není pravdivá
Jak je z příkladu patrno, podmínka, která se má vyhodnotit, je za slůvkem if (volný překlad „pokud“) v kulatých závorkách. Může to být jakýkoliv výraz, kterému PHP rozumí. Může to být nějaká hodnota, třeba číslo, nebo řetězec, proměnná nebo matematická operace, apod. Po vyhodnocení podmínky s výsledkem „pravda“ se vykoná nějaký další krok, umístěný hned na dalším řádku. Pokud však výsledkem vyhodnocení podmínky je nepravda (podmínka není splněna), vykoná se to, co následuje za slovem else (volný překlad „jinak“). Příklad:
<?php
if (10 > 2)
echo 'Podmínka je pravdivá';
else
echo 'Podmínka není pravdivá';
?>
V tomto případě se po spuštění vypíše text Podmínka je pravdivá, protože je pravda, že číslo 10 je větší než 2. Pokud si zkusíte zaměnit obě čísla (tedy – 2 > 10), vypíše se text Podmínka není pravdivá. Pozn.: všimněte si, že se za závorkami nepíše středník!
Neúplný podmíněný příkaz if
Velmi často se v praxi stává, že nepotřebujeme celou funkčnost konstrukce if. V mnoha případech nám stačí, aby se v případě pravdivé podmínky něco vykonalo a v případě nepravdivosti nevykonalo nic. V tomto případě můžeme zcela vynechat část konstrukce else.
<?php
echo 'Toto je kontrola na pravdivost. Pokud bude výsledkem nepravda, nic se nevypíše.';
// Tento text se vypíše vždy. V tomto případě pouze informuje o činnosti programu
echo '<br />';
// zde se zařídí, že se vše následující vypíše na nový řádek
if (3 > 2)
//toto je samotná podmínka, která se vyhodnocuje
echo 'Podmínka je pravdivá';
//pokud bude pravdivá, tak se tento text vypíše. Pokud ne, nic dalšího se nestane
?>
V uvedeném příkladu se to, co je součástí konstrukce if (všimněte si, že konstrukce if končí až se středníkem!), tzn. text „Podmínka je pravdivá“ vypíše, protože podmínka byla splněna tedy je pravdivá. Pokud však tato podmínka pravdivá nebude, není zde definován příkaz else a tak se nevykoná nic. Zkuste si nyní vyzkoušet tento příklad tak, že zaměníte obě číslice 3 a 2.
Operátory v podmínce
O operátorech bude zmínka v následující kapitole. Tady je jeden příklad:
<?php
$a = 10;
$b = 0;
if ($b != 0)
// Nebude-li proměnná b rovna nule, pak proveď následující výpočet
{
$vysledek = $a / $b;
echo('Výsledek dělení: ' . $vysledek);
}
if ($b == 0)
echo('Nulou nelze dělit!');
?>
Zobrazení času s kombinovanou podmínkou:
<?php
$presnycas = date('H:i');
$hodina = date('H');
echo ('Na serveru je přesně: '.$presnycas.'</br>Tak že ');
if ($hodina>0 and $hodina<6)
{
echo 'je po půlnoci.';
}
else if ($hodina>6 and $hodina<12)
{
echo 'je dopoledne.';
}
else if ($hodina>12 and $hodina<18)
{
echo 'je odpoledne.';
}
else if ($hodina>18)
{
echo 'je večer.';
}
?>
Ukázka načtení obsahu pokud je splněna podmínka (správné heslo):
<form action="" method="post">
Zadej heslo: <input type="password" name="heslo"><br />
<input type="submit" value="Odeslat heslo" />
</form>
<?php
$heslo = $_POST['heslo'];
echo "Následující obsah se ukáže jedině pokud znáš správné heslo.";
if ($heslo == 'tajne-heslo')
echo '<h1>Tady je tajný obsah stránky</h1>';
else
echo '<p>Neznáš heslo, neuvidíš tajný obsah...</p>';
?>
Funkce die
V souvislosti s příkazem if se velmi často používá funkce die, která slouží k okamžitému skončení skriptu PHP. Před tím, než se skript PHP ukončí, se ještě naposledy vypíše nějaká zpráva, která je umístěna uvnitř funkce die:
die('Ukončení programu...');
Často se tato funkce používá jako reakce na nějakou chybu (příklady později).
- Základní údaje
- Kategorie: PHP
- Zobrazení: 303
Operátorem se nazývá zápis matematické operace. Při použití se ptáme, zda je jedno číslo menší než druhé nebo např. zda se tyto čísla rovnají apod.
Příklad | Kdy je podmínka pravdivá |
$a == $b | Hodnota proměnné a je rovna hodnotě proměnné b |
$a != $b | Hodnota proměnné a není rovna hodnotě proměnné b |
$a <> $b | |
$a < $b | Hodnota proměnné a je menší než hodnota proměnné b |
$a <= $b | Hodnota proměnné a je menší nebo rovna hodnotě proměnné b |
$a > $b | Hodnota proměnné a je větší než hodnota proměnné b |
$a >= $b | Hodnota proměnné a je větší nebo rovna hodnotě proměnné b |
Příklad:
<?php
$a = 100;
// Zkuste zadat i jiné číslo.
if ($a == 100)
//pokud je proměnná rovna číslu 100, pak se vypíše následný text
echo 'Proměnná $a je rovna číslu 100.';
?>
Datový typ boolean Když PHP pracuje s podmínkami, zajímá ho vlastně jen jedno: zda je podmínka pravdivá nebo nepravdivá. Používá k tomu hodnoty true – pravda a false – nepravda. Tomuto typu dat říkáme logický datový typ – v PHP boolean. Pro ilustraci jeden příklad, kdy se hodnota vypíše:
<?php
$a = (3 != 4);
// Do proměnné a se uloží výsledek vyhodnocení podmínky, zda se číslo 3 nerovná číslu 4
var_dump($a);
// Vypíše bool(true)
?>
Jak již bylo napsáno, funkce var_dump vypisuje informaci o typu dat i její hodnotu (diagnostická funkce). Tak že v tomto případě je to typ dat bool (takto se označuje logický datový typ) a hodnota, tedy true (neboť je pravda, že 3 není rovno 4). Operátory porovnávání hodnot s kontrolou typu Kromě základních operátorů, které byly vyjmenovány v předchozí kapitole, PHP používá ještě dva speciální nejen pro porovnání hodnoty, ale zároveň také pro porovnání typu těchto dat:
$a === $b | Hodnota proměnné a je rovna hodnotě proměnné b a navíc jsou stejného typu |
$a !== $b | Hodnota proměnné a není rovna hodnotě proměnné b nebo nejsou stejného typu |
Rozdíl mezi běžným porovnáváním a porovnáváním s kontrolou typu dat je vidět na dalším příkladu:
<?php
var_dump(1.0 == 1);
// Podmínka je pravdivá, protože reálné číslo 1.0 se rovná celému číslu 1.
// Vypíše se bool(true)
echo '<br>';
// Zajistí, aby se další výpis vypsal na další řádku.
var_dump(1.0 === 1);
// Podmínka je nepravdivá, protože 1.0 a 1 nejsou shodné typy.
// Číslo 1.0 patří do typu reálných čísel a číslo 1 patří do typu celých čísel.
?>
Porovnávání řetězců Porovnávání čísel není nic složitého. Ovšem pokud potřebujeme porovnat řetězce (tedy text), je situace o něco složitější. PHP k tomuto účelu využívá tzv. tabulku ASCII (American Standard Code for Information Interchange). Každému znaku je přiřazen nějaký číselný kód (např. A má přiřazeno 65, B má 66, atd…). Kompletní ASCII tabulku najdete např. na adrese: http://cs.wikipedia.org/wiki/ASCII Postup porovnávání řetězců:
- Začnou se porovnávat znaky obou řetězců od začátku
- Nejdříve se porovnají první znaky obou řetězců, pak druhé, třetí atd.
- Jakmile se narazí na první rozdíl nebo jeden z řetězců skončí, je rozhodnuto.
- Pokud se při porovnávání řetězců narazí na konec jednoho z nich, je ten kratší menší než ten delší.
Podle tabulky ASCII platí, že libovolné velké písmeno je menší než libovolné malé písmenko. Ukázky porovnávání řetězců:
První řetězec | Druhý řetězec | Výsledek porovnání |
'abc' | 'abx' | První řetězec je menší než druhý |
'XX' | 'xx' | První řetězec je menší než druhý |
'sova' | 'sova' | Oba řetězce jsou shodné |
'xy' | 'xyz' | První řetězec je menší než druhý |
Složitější porovnávání: Následující příklad ukazuje porovnávání hodnot s kontrolou typu:
<?php
var_dump ('xy' === 'xyz');
// Vypíše bool(false)
?>
Výsledkem je výpis bool(false) Porovnávání kombinovaných řetězců: Řetězce se porovnávají poněkud složitěji. PHP se totiž nejdříve podívá, jestli jdou oba řetězce převést na číslo. Pokud ano, porovná je jako čísla. Pokud minimálně jeden nejde převést na číslo, porovná je jako texty. Příklad:
<?php
var_dump('30' == '+30');
// Podmínka je pravdivá, protože PHP porovná řetězce jako čísla, vypíše se tedy bool(true)
echo '<br>';
// Zajistí, aby se další výpis vypsal na další řádek.
var_dump('30x' == '+30x');
// Podmínka není pravdivá, protože PHP porovná řetězce jako texty, vypíše se tedy bool(false)
?>
Ukázky porovnávání složitějších řetězců: Pozn.: řetězce jsou „kousky“ textu, řetězec poznáme podle uvozovek nebo apostrofů.
Podmínka | Výsledek podmínky |
'+10.0' == '10' | pravdivá (porovnávají se jako čísla) |
'2' == '2a' | nepravdivá (porovnávají se jako řetězce) |
'abc' != 'xyz' | pravdivá (porovnávají se jako řetězce) |
'8' == '+8' | pravdivá (porovnávají se jako čísla) |
Porovnávání řetězce s číslem Pokud PHP porovnává řetězec s číslem, chová se jednoznačně tak, že převede řetězec na číslo a pak provádí porovnání. Např.:
<?php
var_dump('100' > 40);
// Výsledkem je pravda, protože PHP zde porovnává jakoby se jednalo o dvě čísla.
// Tedy zjišťuje, zda je číslo 100 větší, než číslo 40. Vypíše se tedy bool(true)
?>
Převádění řetězce na číslo provádí PHP tak, že se „podívá“ na první znak. Pokud zde nenajde číslo, výsledkem je číslo nula (0). Výjimku tvoří znaky + a -. Ty fungují jako v matematice. Ilustrační příklady převodu řetězce na číslo:
Řetězec před převodem | Výsledek po převodu PHP na číslo |
"10slonů" | 10 |
'postel' | 0 |
'1.2 m' | 1.2 |
'333 stříbrných stříkaček' | 333 |
"9e2" | 900 (zápis 9e2 je zápis reálného čísla ve vědecké notaci) |
Nejvíce se převod řetězce na čísla projeví při matematických výpočtech:
Zápis | Výsledek |
1 + "1 pes" | 2 |
'1.2 kg' – '0.8 kg' | 0.4 |
8 * "lev" | 0 |
0 + "3e4xxx" | 30000 (zápis 3e4 je zápis reálného čísla ve vědecké notaci) |
Další ukázky porovnávání řetězců s čísly:
Podmínka | Výsledek podmínky |
'+1' > 0 | pravdivá (řetězec '+1' se převede na jedničku) |
’23 psů' == 23 | pravdivá (řetězec '23psů' se převede na číslo 23) |
'-2abc' > 10 | nepravdivá (řetězec '-2abc' se převede na číslo -2) |
0 != 'cihla' | nepravdivá (řetězec 'cihla' se převede na nulu) |
- Základní údaje
- Kategorie: PHP
- Zobrazení: 377
Často se stává, že potřebujeme kombinovat více podmínek dohromady. Pro tyto účely existují v PHP tzv. logické operace. Logická operace vyhodnocuje vždy hodnotu ano či ne, resp. true nebo false, nebo také jedničku či nulu. Logická negace (!) Jedná se o nejjednodušší operaci, tedy obrácení podmínky. Provádí vlastně jen to, že z pravdivé podmínky udělá nepravdivou a naopak. V PHP se logická negace zapisuje tak, že podmínce přiřadíme znak vykřičník - !
<?php
var_dump(10 > 20);
// Tato podmínka je nepravdivá. Vypíše: bool(false)
echo '<br>';
// Zajistí, aby se další výpis vypsal na další řádku.
var_dump(!(10 > 20));
// Podmínka je pravdivá, protože je použita operace negace, která otočila pravdivost podmínky.
// Vypíše: bool(true)
?>
Podmínku, kterou chcete obrátit (negovat) je vždy dobré umisťovat do závorek. Logické operace and a or Tyto logické operace slouží ke spojení dvou podmínek tak, aby se výsledek tvářil jako jedna podmínka. Obě operace se liší tím, jak vypočítavají výslednou hodnotu podmínky v závislosti na obou původních podmínkách, ze kterých jsou složeny. Logickou operaci and lze jinak také vyjádřit slovním spojením „a zároveň“. Tato operace považuje dvě podmínky za pravdivé jedině tehdy, pokud jsou obě pravdivé. Oproti tomu logické operaci or (nebo) stačí, aby alespoň jedna ze dvou podmínek platila.
Logická operace and |
|
Logická operace or |
||||
Podmínka 1 |
Podmínka 2 |
Výsledek |
Podmínka 1 |
Podmínka 2 |
Výsledek |
|
pravda | pravda | pravda | pravda | pravda | pravda | |
pravda | nepravda | nepravda | pravda | nepravda | pravda | |
nepravda | pravda | nepravda | nepravda | pravda | pravda | |
nepravda | nepravda | nepravda | nepravda | nepravda | nepravda |
Příklad s logickou operací and:
<?php
$znamka = 1;
// Zde zadáme školní známku. Vyzkoušejte si sem zadávat různá čísla.
var_dump( $znamka >= 1 and $znamka <= 5 );
// Podmínka je pravdivá, pokud je v proměnné $znamka uložena platná školní známka.
?>
Pokud budete do proměnné místo současné jedničky zadávat známky jedna až pět, bude stále výsledkem pravda. Jakmile zadáte známku nižší než jedna nebo vyšší než pět, stane se minimálně jedna ze dvou porovnávaných podmínek nepravdivou a tím pádem celý výsledek funkce var_dump bude nepravda. Příklad s logickou operací or:
<?php
$a = 2;
var_dump($a > 10 or $a == 2);
// Výsledek je pravdivá podmínka, protože alespoň jedna podmínka je pravdivá. Vypíše: bool(true)
?>
Dvojí zápis logické operace and a or Kromě klasických slov and a or můžete v PHP použít také zápis && (pravý Alt+C) a || (pravý Alt+W, programátoři tento znak nazývají „roura“). Tak že např. tyto dva zápisy jsou totožné:
$a > $b and $a != 3
//stejné jako:
$a > $b && $a != 3
I když jsou obojí zápisy možné, je mezi mini nepatrný rozdíl a to v tzv. prioritě (přednosti). Slova and a or mají tzv. nižší – příznivou prioritu, obvykle odpovídající programátorovým záměrům. Obecně je doporučováno raději používat právě tyto slovní vyjádření. Neúplné vyhodnocování logických výrazů pomocí and a or PHP se obecně snaží postupovat co nejúsporněji. Ctí zásadu „zdravé lenosti“. Právě v případě logické operace and je to velmi zřejmé. Jak již bylo napsáno, je u logické operace and potřeba k pravdivému výsledku, aby obě dvě části podmínky byly pravdivé. V každém jiném případě bude výsledek nepravdivý. Vysvětlení je v následujícím příkladu:
<?php
$a = 1;
$b = 2;
$c = 20;
$d = 20;
var_dump ($a > $b and $c == $d);
// Vypíše: bool(false)
?>
PHP postupuje tak, že jakmile zjistí, že je první část podmínky nepravdivá (není pravda, že proměnná a je větší než proměnná b), nemusí se již vůbec zabývat tím, co je ve druhé části podmínky (tedy to, že je proměnná c rovna proměnné d). Touto částí se již PHP vůbec nezabývá. Tím se skripty nepatrně zrychlují. V našem případě to nebude zcela jistě patrné, ovšem u složitějších programů to může hrát významnou roli. Tento způsob postupu se nevyužívá jen kvůli rychlosti zpracování, ale také z jiných důvodů, kdy je např. na proměnné navázán další složitější skript apod. (viz dále).