Mynule jsme si probrali základy PHP, a tak se dnes podíváme na věci další - konečně si můžeme probrat základní rozdíly mezi použitím uvozovek, apostrofů, rozdíly mezi funkcemi PRINT a ECHO. Dnešní díl bude tedy o základních rozdílech, které si musíte vštěpit do paměti. A co to jsou proměnné? I to si dnes povíme...
Žádné programování by se neobešlo bez proměnných. Jak již název napovídá, tak ona proměnná je něco... proměnného. Je to jakási zásuvka, do které můžete něco uložit. Po dobu běhu celého skriptu. Proměnné zatím nemůžete předávat mezi jednotlivými skripty (tedy soubory), to si ukážeme až později. Do proměnné tedy můžete vložit nějaký řetězec s tím, že je jedno jestli je to číslo, věta nebo dokonce obsah nějakého souboru. Do proměnné také ale můžete uložit i takzvanou vlajku (flag) což je buď true nebo false.
K čemu tyto vlajky jsou? Především se uplatní v podmínkách a cyklech, o kterých jistě rádi uslyšíte v příštím, třetím díle seriálu.
A k čemu vlastně proměnné potřebujeme? Jsou potřeba především k zobrazování textu, k uploadu souborů, prakticky ke všemu co budete chtít v PHP dělat, neboť s klasickými funkcemi si nevystačíte. Ještě dříve než vůbec začnu popisovat způsob použití proměnných, tak vám vysvětlím rozdíl mezi funkcemi print a echo
PRINT a ECHO
Dělají prakticky to samé - vždy tisknou na obrazovku text, který jim nadefinujete. Rozdíl je ale v jejich použití. Samozřejmě, v tomto příkladu jsou funkce naprosto stejné:
print ´Text´;
echo ´Text´;
?>
Jakou funkci tedy používat? V tomto příkladu je to jedno. Ale, funkce echo má své jisté kouzlo, a proto já raši používám funkci print . Funkce print je skutečně jen a pouze funkcí, a proto by měla mít své závorky, které ale dnes již nikdo nepoužívá. Násludjící způsob zápisu udělá vždy to samé:
print(´Text´);
print ´Text´;
?>
Jak si můžete všimnout v ukázce (zdroj), na stránce máte vytisknuto "TextText", a ne pod sebou, jako je to uvedeno zde v příkladu. Je to logické, neboť jsme nevytiskli funkcí žádné html tagy pro nový řádek (< br >). Funkce PRINT ani ECHO netisknou tak, jak jsou napsány. V HTML jazyku platí přesná pravidla zobrazování textu, a my si musíme uvědomit, že za pomocí PHP pouze generujeme HTML stránky které mohou mít (a většinou mají) dynamický obsah. Co to je dynamický obsah? Jednoduše řečeno, proměnlivý. A jak již z tohoto slova možná vyplívá, jsou k tomu potřeba proměnné.
Funkce print a echo jsou si velmi podobné. Když zkusíme použít následující kód
print "Tento
text je na
více řádků";
echo "Tento Text
je také na více
řádků";
?>
Tak, jak ostatně můžete vidět v ukázce a jejím zdroji , tak se text opět vytisknul vedle sebe. Pokud si ale zobrazíte zdrojový kód, tak uvídíte, že se text skutečně vytisknul na více řádků tak, jak jsme ho zadali. Zde přitom nehraje roli, jaké uvozovky použijete. Ale, jak jsem již řekl nahoře, nevytiskli jsme žádné html tagy pro nový řádek, takže se text zobrazil v prohlížeči v jedné řádce. Znovu zde opakuji, že PHP weblog, a PHP všeobecně, je určeno těm, kteří zvládají programovat v HTML a HTML znají. Je to stejné, jako kdyby jste se učili vařit a nevěděli by jste, jak se používá pánev...
print má jen jeden argument, a jen dva způsoby zápisu. Není rozdíl, jak print napíšete, vždy udělá to samé - poslušně vytiskne text na místo, kde je umístěn. U funkce echo to ale neplatí...
echo je totiž jazykový konstrukt, a tudíž s ním lze využívat všechny tyto typy zápisu:
echo "Nazdar světe";
echo "Toto zabírá
několik řádků. Konce řádků se
vytisknou také";
echo <<<END
Toto používá "dokumentovou" syntaxi pro víceřádkový výstup.
Uvědomte si, že ukončovací řetězec se středníkem musí být na
začátku nového řádku (bez mezer či tabulátorů).
END;
?>
(přílad - zdroj). Největší kouzlo konstruktu echo je ale v práci s proměnnými...
Proměnná se anglicky nazývá string. Tento výraz se používá i v českém překladu manuálu funkcí na www.php.net, a proto je dobré si ho pamatovat. Čsem ho zde začnu používat i já, neboť tento výraz je -dle mého názoru- hezčí, než český překlad. Jak jsem již napsal, do proměnné se dá uložit cokoliv. Jak tuto proměnnou napsat?
$string = ´hodnota´;
?>
Obecný zápis proměnné bych tedy udělal asi takto:
$název_proměnné
Důležitý je onen dollar, který udává, že je to proměnná. C++ programátory to dost možná bude mást, ale i v PHP jsou "proměnné" bez onoho znaku dollaru, ale to jsou konstanty. Proto, nikdy nezapomínejte psát $ před název proměnné. Další základní poučkou je
Název proměnné může obsah pouze písmena bez háčků a čárek, všechny číslice a podtržítko. Všechny následující názvy proměnných jsou tedy špatné:
$nazev-promenne
$nazev.promenne
$nazev0.1promenne
$nazev>promenne
$název
a tyto názvy jsou naopak zprávné:
$nazevpromenne
$promenna01
$dlouhy_nazev_promenne_s_cislem_1
Výše jsem již uvedl způsob nadefinování hodnoty do proměnné. Toto, je jediný způsob, jak do proměnné cokoli dostat. Je to vždy $string -rovná.se- hodnota. viz malý příklad:
Všechny následující zápisy jsou zprávné
$string = ´hodnota´;
$string = "hodnota";
$string = 15;
$string = true;
$string = false;
$string = $jina_promenna;
$string = funkce();
?>
Jak jste si všimli, do proměnné lze nadefinovat hodnotu, číslo, vlajku, i jinou proměnnou. Důležité je, že číslo se musí definovat bez uvozovek, protože kdyby se definovalo v uvozovkách, tak by to PHP bralo jako TEXT a ne jako ČÍSLO Co se stane, když po definici $string = $jina_promenna nadefinuji do $jina_promenna jinou hodnotu? Nic. V proměnné $string zůstane původní hodnota:
$jina_promenna = ´Text v promenne´;
$promenna = $jina_promenna;
$jina_promenna = 15;
// S $promenna se nic nestalo, můžeme si to ověřit:
print $promenna; //vytiskne: Text v promenne
print ´´;
echo $jina_promenna; //vytiskne: 15
?>
viz příklad a jeho zdroj . Jak jste si všimli, mohu proměnnou vytisknout pomocí funkce print i echo. Proč se to v příkladu vytisklo na dva řádky? Podívejte se do zdroje, a uvidíte, že mezi obě funkce jsem ještě vytisknul tag pro nový řádek - < br >
A jaký je teda rozdíl mezi funkcemi print a echo ? Malý ale jednoduchý. Print umí jen tisknout, a pokud chcete vytisknout proměnnou, tak musíte přerušit uvozovky, napsat proměnnou a dapsat znovu uvozovky. Vše ale musíte spojit spojovacím výrazem - tečkou
// Toto je špatně
print ´Text´$string´text´;
// Zozo je zprávně
print ´Text´.$string.´Text´;
?>
U příkazu echo platí to samé, ale pokud chcete tisknout jen proměnné, tak to lze udělat dvěma způsoby:
echo $string.$string2.$string3;
echo $string, $string2, $string3;
?>
přičemž druhý způsob je rychlejší na provedení.
K tomu se ale pojí také rozdíl mezi apostrofy a uvozovkami. Ten první, jeden ze dvou zásadních a také jediný který si dnes ukážeme, je rozdíl v proměnných. Pokud do uvozovek napíšete proměnnou, tak se vám na její místo dá její obsah. Zatímco když to samé uděláte u apostrofů, tak tam dostanete pouze její jméno. Proč to tak je? Dejme tomu, že máte soubor config.php , ve kterém máte definici jedné proměnné, a tuto definici potřebujete změnit. Nebo potřebujete změnit název proměnné (skriptem). Pak , když budete vyhledávat $string v uvozovkách, tak budete hledat prázdný řetězec. Pokud ale budete hledat $string v apostrofech, tak ho najdete určitě (pokud se v souboru nachází). Více malý příklad a jeho jeho zdroj:
$string = ´text v promenne´;
$string2a = ´v promenne string je text: $string´;
$string2u = "v promenne string je text: $string";
print ´$string´; /* vytiskne: $string */
print ´´;
print "$string"; /* vytiskne: text v promenne */
print ´´;
print $string2a; /* vytiskne: v promenne string je text: $string */
print ´´;
print $string2u; /* vytiskne: v promenne string je text: text v promenne */
?>
Také vám nemohlo ujít, že v mynulém díle a díle tomto používám dvě lomítka nebo lomítko a hvězdičku. Co to je? Komentáře. Další užitečná věc, kterou velmi rádi oceníte. Jaký je rozdíl mezi oběma způsoby?
// Dvě uvozovky zakomentují pouze celý řádek.
Proto když napíši dostatečně dlouhý text, tak zbytek nebude zakomentovaný
/* JEDNO lomítko a hvězdička zakomentují pouze část, ale klidně i více řádků - je jim to totiž jedno. Ignorovaný (tzn. zakomentovaný text) končí tam, kde je sekvence: */
print /* Také se dá komentovat část řádku */ ´text´;
?>
To bude pro dnešek vše, co si řekneme. Myslím si, že už i tak je dnešní díl našeho seriálu poměrně dost dlouhý. Nezapomínejte se dívat na příklady a jejich zdroje, je to opravdový příklad, jak to vypadá v praxi. A pokud nevěříte že to tak opravdu v tom skriptu je napsané, tak si to vyzkoušejte u sebe doma, na localhost.
Zítra se podíváme na cykly a podmínky, kde nejvíce využijeme práci s proměnnými. Právě proměnné a cykly včetně podmínek dělají z programování opravdu programování...
Pavel Ptáček
<<< Díl nultý a První :: Úplné základy PHP | Díl třetí :: Podmínky >>>
| Pavel Ptáček
ABC Brouzdej ; blog @ brouzdej.cz | Přihlásit se Vytvořil Pavel Ptáček © 2003 - 2005 ( o webu ) | Web neměří žádnou návštěvnost, ani nesbírá osobní údaje. Proto tady není cookie lišta.