Hlavní navigace

PHP: Proměnné, typy, výrazy ...

Michal Samek 11. 6. 1999

Druhý díl miniseriálu o programování v PHP, tentokrát zaměřený na možnosti a konstrukce samotného jazyka.

Jak už jsem minule zmínil, program v jazyce PHP vkládáme přímo do html stránek do tagu <script language=„php“>…</­script>, případně <? … >, &lt?php … > nebo <% … %> (tyto další způsoby nemusí vždy fungovat, záleží na verzi PHP a konfiguraci). Jednotlivé příkazy oddělujeme středníkem tak jako v C; céčku je vlastně PHP podobné hodně – až na odlišný způsob práce s proměnnými. V následujících odstavcích se pokusím stručně rozebrat některé důležité aspekty jazyka z pohledu programátora, hlavně s ohledem na některé specifické vlastnosti PHP ve srovnání s běžnými programovacími jazyky. Samozřejmě nemá smysl zde opisovat manuál, tam najdete veškeré další podrobnosti – odkazy z tohoto článku vedou přímo na server php, kde je uživateli komentovaný manuál – velmi užitečná věc, je zde vysvětleno mnoho nedokumentovaných funkcí a vlastností PHP. Sám jsem tam už taky něco připsal :)

Proměnné

… se v jazyce PHP zapisují podobně jako v Perlu – $var – a nedeklarují se. Typ hodnoty proměnné se může libovolně měnit, záleží na posledním přiřazení (nic vám nebrání napsat něco takového: $a = 10; $a = ‚deset‘; Typ hodnoty proměnné zjistíte funkcí Gettype(). Kromě jednoduché hodnoty může proměnná obsahovat i několikarozměrné pole nebo odkaz na objekt. Podle viditelnosti můžeme proměnné rozdělit na globální a lokální – zde se PHP chová trochu jinak než ostatní jazyky, se kterými jsem se setkal. Lokální proměnné jsou přístupné pouze uvnitř definice funkce (a metody) – vlastně všechny proměnné uvnitř funkce jsou implicitně považovány za lokální; má-li funkce přistupovat přímo ke globální proměnné (každá použitá mimo definici funkce), musíte ji před použitím deklarovat global $var1, …, $var2 ; – podrobnosti najdete zde. Můžete dokonce proměnnou určit pomocí jiné proměnné – $var = ‚other_var‘; $$var = ‚Nazdar‘; echo $other_var;. K polím, objektům, objektovým proměnným, HTTP proměnným a parametrům funkcí se ještě vrátím.

Typy, výrazy, operátory

PHP umí pracovat s (jednoduchými) typy integer, double, string (podrobnosti) a v případě potřeby provádí automatickou konverzi typů – například $text = ‚100‘; $text = $text +20; echo $text; vytiskne (kupodivu pro mne) správně 120. Konverzi typu můžete provést také explicitně (tak jako v C) $var = ‚15‘; $var2 = (double) $var; nebo přímo funkcí Settype() – opět doporučuji podrobněji prostudovat. Kromě přiřazovacího operátoru = jsou v PHP i += -= .=, poslední z nich slouží ke spojování řetězců. Detaily k výrazům a operátorům najdete tady.

HTTP proměnné GET, POST a COOKIES

Jednou ze sympatických vlastností PHP je, že se nemusíte starat o přijetí proměnných GET a POST z formulářů – PHP je pro program automaticky zpřístupní jako globální proměnné. Totéž platí pro cookies, tedy sušenky :) Pokud potřebujete zjistit, zda byla hodnota z formuláře opravdu přijata, otestujte proměnnou na existenci funkcí Isset(). Jako proměnné formuláře můžete použít i jednorozměrná pole – to se hodí třeba v případě výběru několika hodnot prvkem select multiple. Automaticky byste měli mít k dispozici také proměnné prostředí, i když zde dokumentace doporučuje raději použití funkce getenv().

Jazykové konstrukce

Zde by vás PHP nemělo nijak překvapit. Je zde klasický if, for, while, switch tak jako v céčku:

while ($vek<60) {
  for ($mesic = 1; $mesic <=12; $mesic++) {
    if (! $marod) {
       makat($mesic);
       ...
    } else {
       valetse($mesic);
       ...
    }
  }
  $vek++
}

Uživatelské funkce umožňují nastavení default hodnot parametrů a umí předání parametru jak hodnotou, tak odkazem (pokud potřebujete, aby funkce mohla změnit obsah proměnné, předávané jako parametr). Funkce musí být definována dříve, než je poprvé použita. Podrobnosti k jazykovým konstrukcím najdete zde.

Pole

… mohou být jedno- i vícerozměrná a kromě přístupu k prvku pomocí indexu (číslováno od 0) můžete prvku pole přiřadit i „textový“ index. Pole nemusíte nějak zvlášť vytvářet, je možno hned přiřadit hodnotu určitému prvku pole nebo přidat nový prvek (bez určení indexu):

$pole[1] = 'Cosi';
$pole['dva'] = 'Neco jineho';
$pole[] = 'Treti prvek';

Opět přidávám odkaz na další podrobnosti z manuálu.

Třídy a objekty

Troufám si říct, že kdo jednou okusí výhody objektového programování, velmi nerad se vrací ke klasickému strukturovanému programování. Naštěstí v případě PHP ani o toto nejste ochuzeni. I když implementace OOP zde není tak propracovaná jako třeba v C++ nebo Javě, to hlavní PHP umí – vytvářet a používat objekty definované vlastní třídou a jednoduchou dědičnost. Vše by mělo být jasné z následujícího kousku kódu (alespoň těm, kteří se už s objekty setkali):

Class Menu {
  var $names;
  var $links;
  function Menu () { ... }
  function AddItem ($name, $link) {
   $this->names[] = $name;
   $this->links[] = $link;
   ...
  }
  function HTMLOutput() { ... }
}

Class Menu2 extends Menu {
  function Menu2 () { ... }
  function HTMLOutput() { ... }
}

$mymenu = new Menu();
$mymenu->AddItem('Prvni','http://nekam.cz/');
...
$mymenu->HTMLOutput();

Jak je vidět z příkladu, proměnná $this uvnitř definic metod slouží k přístupu ke vlastním proměnným objektu. Konstruktor se definuje jako metoda se stejným názvem, jako má třída (slouží k inicializaci objektu ihned po vytvoření). Třída Menu2 vytváří nabídku trochu jinak než Menu, proto dědí všechny vlastnosti třídy Menu a přepisuje Konstruktor a metodu HTMLOutput. Použití objektů v PHP začíná být velmi zajímavé, jakmile zjistíte, že na mnoha stránkách píšete pořád dokola velmi podobný kód :) Myslím, že o využití OOP při vytváření dynamických webů by se dala (a měla) napsat samostatná část. Na závěr opět odkaz na další dokumentaci.

Sdílení kódu mezi stránkami

… tak trochu souvisí s předchozím odstavcem – definice tříd nebo funkcí, které použijete na několika různých stránkách, můžete uložit zvlášť do souborů (třeba do nějakého podadresáře jako include/) a pomocí volání Include(‚inclu­de/soubor.i‘) nebo Require(‚inclu­de/soubor.i‘) jej vložit všude tam, kde je třeba. Obsahem vkládaného souboru může být třeba i kus často používaného html kódu. Require() zajistí, že je obsah souboru vložen právě jednou, kdežto pomocí Include() můžete v cyklu vložit obsah souboru opakovaně. Pozor na vkládané soubory s kódem php, ty musí být vždy „obklíčeny“ tagem <script>, jinak nejsou považovány za php kód, ale „holé“ html. Kromě explicitního vkládání souborů umožňuje PHP automaticky vkládat do všech php stránek na začátek a konec obsah nějakých souborů, určených v konfiguraci.

Příště se podíváme na bohatou knihovnu předdefinovaných PHP funkcí …

Našli jste v článku chybu?

16. 6. 1999 18:51

Bohumil Jurencak (neregistrovaný)

Muzete prosim poradit jak korektne nainstalovat a nakonfigurovat PHP na stanici s Windows9x? S Apache 1.3.6 nebyl zadny problem, ale PHP se mi zprovoznit proste nedari.



13. 6. 1999 0:20

Jakub Steiner (neregistrovaný)

Uvital bych podrobnesi uvod do objektoveho programovani pomoci prostredku PHP. Neco pro objektoveho zacatecnika. Stacilo by neco o vyhodach a vubec. Nejak to jde ouplne mimo me a chtel bych se nechat poucit ;)

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Root.cz: 250 Mbit/s po telefonní lince, když máte štěstí

250 Mbit/s po telefonní lince, když máte štěstí

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Vitalia.cz: Často čůrá a má žízeň? Příznaky dětské cukrovky

Často čůrá a má žízeň? Příznaky dětské cukrovky