PHP je jeden z najbežnejších programovacích jazykov pre programovanie na strane servera. Postupom času sa stal neoddeliteľnou súčasťou moderných webových stránok a internetových technológií. Napriek tomu môže byť zvládnutie PHP pre začiatočníkov náročné. V tomto tutoriáli PHP vám ukážeme základy tohto populárneho programovacieho jazyka a jeho najdôležitejšie operátory, slučky a funkcie.

Čo potrebujete mať pred začatím tutoriálu PHP

Náš tutoriál je určený predovšetkým pre začiatočníkov. Základné znalosti moderného webového vývoja a HTML však môžu byť užitočné. Ak chcete sledovať a reprodukovať príklady na svojom počítači, uistite sa, že máte pripravené nasledujúce veci:

  • Webový server vrátane interpretéra PHP
  • Inštalovaný PHP
  • Webový prehliadač
  • Textový editor

Ako server odporúčame lokálne testovacie prostredie XAMPP, ktoré Apache Friends poskytuje bezplatne pre operačné systémy Windows, Linux a macOS. XAMPP je čistý testovací server. Weboví vývojári môžu tento softvér použiť na jednoduché nastavenie testovacích prostredí pre skripty, HTML stránky a štýly. Bezpečná prevádzka webového servera na internete však nie je zaručená. Podrobné inštrukcie na inštaláciu nájdete v našom tutoriáli XAMPP.

Aká je syntax PHP?

Po nastavení lokálneho webového servera (napríklad pomocou XAMPP) je dobré otestovať, či je PHP správne nainštalované a pripravené na spúšťanie skriptov. Skript je program, ktorý nie je skompilovaný do binárneho kódu. Namiesto toho sa spúšťa prostredníctvom interpretéra. Otvorte svoj obľúbený textový editor a použite nasledujúci skript PHP:

<?php
phpinfo();
?>
php
Obrázok: PHP code in text editor
A text editor like Notepad++ supports programming with syntax highlighting.

Skripty PHP majú špecifickú štruktúru. Otváracia značka PHP <?php iniciujeprostredie skriptu. Nasleduje skutočný kód PHP vo forme príkazov. V uvedenom príklade ide o volaniefunkciephpinfo(). Väčšina funkcií PHP vyžaduje jeden alebo viacero parametrov, ktoré sú uzavreté v zátvorkách. Prephpinfo() sú tieto parametre voliteľné:phpinfo(INFO_ALL). Každý príkaz končí bodkočiarkou (;). Na ukončenie skriptu použite uzatváraciu PHP značku:?>.

Definícia

Funkcie sú podprogramy, ktoré umožňujú externé spracovanie častí programového kódu. Aby sa zabránilo opakovaniu, opakujúce sa úlohy je možné definovať raz ako funkciu a potom ich volať pomocou názvu funkcie. Weboví vývojári na tento účel používajú preddefinované funkcie PHP alebo vytvárajú vlastné podprogramy.

Uložte textový súbor pod názvom test vo formáte .php (skript PHP) a spustite webový server. Ak používate testovacie prostredie XAMPP, uložte súbor test.php do adresára XAMPP v priečinku htdocs (C:\xampp\htdocs).

K vzorovému súboru sa dostanete prostredníctvom nasledujúcej adresy URL vo webovom prehliadači: http://localhost/test.php. Ak používate alternatívny webový server alebo individuálnu konfiguráciu softvéru XAMPP, vyberte adresu URL podľa príslušnej cesty k súboru.

Keď zadáte URL http://localhost/test.php, webový prehliadač požiada webový server o súbor test.php. Apache HTTP Server (alebo akýkoľvek iný typ webového servera, ktorý používate) načíta súbor z príslušného adresára. Prípona .php znamená, že súbor obsahuje kód PHP. V tomto momente sa aktivuje interpret PHP, ktorý je integrovaný do webového servera. Spracuje dokument a narazí na otváraciu značku PHP <?php, ktorá signalizuje začiatok kódu PHP. Interpret pokračuje vo vykonávaní kódu PHP a generuje výstup HTML, ktorý webový server odošle webovému prehliadaču na zobrazenie. Ak bol PHP nainštalovaný správne, vykonanie skriptu bude mať za následok nasledujúcu webovú stránku:

Obrázok: The PHP function phpinfo()
When a script is executed using the *phpinfo()* function, the browser displays information about the PHP configuration.

Funkcia phpinfo() je skratka pre predvolenú funkciu phpinfo( INFO_ALL ). Táto funkcia vypíše podrobné informácie o konfigurácii PHP vášho webového servera. Ak sa nepodarí nájsť žiadnu verziu PHP, webový prehliadač zobrazí chybovú správu alebo odošle kód PHP do prehliadača bez jeho interpretácie.

„Hello World!“ – Ako vypísať text pomocou echo

Po úspešnej inštalácii PHP je čas napísať svoj prvý skript. Na to môžete použiť PHP echo. Na rozdiel od phpinfo() nie je echo funkcia. Je to skôr jazykový konštrukt, ktorý umožňuje výstup nasledujúceho reťazca ako text.

Definícia

Jazykové konštrukcie sú príkazy používané v PHP na riadenie toku programu. Okrem echo, jazykové konštrukcie zahŕňajú príkazy ako if, for, do, include, return, exit alebo the. Na rozdiel od funkcií nie sú potrebné zátvorky.

Pre váš prvý vlastný skript vytvorte nový súbor PHP a zadajte nasledujúci kód:

<?php
echo 'Hello World!';
?>
php

Otváracia značka <?php spustí prostredie skriptu. Nasleduje jazykový konštrukt echo a reťazec Hello World!, ktorý je uzavretý v jednoduchých úvodzovkách. Na ukončenie skriptu použite značku ?>. Všimnite si bodkočiarku za príkazom. Namiesto Hello World! môžete použiť akýkoľvek text.

Skript uložte ako hello.php do adresára htdocs na vašom webovom serveri. Potom otvorte súbor pomocou adresy URL http://localhost/hello.php vo vašom webovom prehliadači. Ak bol kód prenesený správne, v okne prehliadača by sa mal zobraziť reťazec, ktorý ste použili:

Obrázok: Text output with language construct echo
The language construct *echo* instructs the web server to output the string *Hello World!*

Akýkoľvek text, ktorý vytvoríte pomocou echo, môže podľa potreby obsahovať HTML tagy. Tieto tagy budú interpretované webovým prehliadačom v súlade so špecifikáciami HTML. Vyskúšajte si tento koncept napríklad pomocou nasledujúceho skriptu:

<?php
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
?>
php

Pri vyvolaní vo webovom prehliadači sa výsledok vykonania skriptu zobrazí nasledovne.

Obrázok: Result of script execution with HTML tags
If the result of the script execution contains HTML tags, they’ll automatically be interpreted by the web browser.

Text Hello World!, ktorý je uzavretý v <h1> značkách, je webovým prehliadačom interpretovaný ako primárna hlavička. Nasleduje automatický riadkový zlom a textový odsek medzi značkami <p>.

V závislosti od vašich požiadaviek môžete echo používať buď s jednoduchými úvodzovkami () alebo s dvojitými úvodzovkami (). Ak vypíšete len text, výber úvodzoviek nie je dôležitý. Tento rozdiel je však významný pri práci s premennými PHP.

Premenné

Konštrukcia jazyka echo ponúka viac než len zobrazenie textu. Zatiaľ čo prezentácia textu sa už dá efektívne realizovať pomocou HTML, skutočná výhoda použitia konštrukcie jazyka PHP echo spočíva v jej schopnosti dynamicky vytvárať text pomocou premenných.

Používatelia PHP sa často stretávajú s premennými v nasledujúcom formáte: $example

Každá premenná sa skladá zo znaku dolára ($) nasledovaného názvom premennej. Premenné sa používajú v skriptoch PHP na začlenenie externých údajov do webových stránok. Môžu zahŕňať rôzne typy hodnôt, od základných čísel a reťazcov až po kompletné texty alebo štruktúry dokumentov HTML. PHP rozlišuje sedem rôznych typov premenných:

Variabilný typ Popis
Reťazec Reťazec je sekvencia znakov. Môže predstavovať slovo, frázu, časť textu alebo dokonca celý HTML kód webovej stránky.
Celé číslo Celé číslo je celé číslo bez desatinných miest. Môže byť kladné alebo záporné.
Plávajúca desatinná čiarka Číselný údaj je číslo s desatinnou čiarkou. Ide o číselnú hodnotu s desatinnými miestami. PHP podporuje až 14 číslic za desatinnou čiarkou.
Boolean Booleovské premenné sú výsledkom logických operácií a majú len dve hodnoty: TRUE (pravda) a FALSE (nepravda). Tento typ premennej sa používa pri práci s podmienkami.
Pole Pole je premenná, ktorá môže obsahovať viacero prvkov. Je to zoskupenie viacerých podobne štruktúrovaných údajov, ktoré boli kombinované do poľa.
Objekt Typ premennej objekt umožňuje programátorom definovať vlastné typy údajov. Používa sa v objektovo orientovanom programovaní. Do tohto tutoriálu PHP sme zahrnuli premenné objektu.
NULL Hodnota NULL predstavuje premennú bez hodnoty. Pre premenné tohto typu je NULL jedinou možnou hodnotou.

Centralizácia obsahu sa zvyčajne spravuje prostredníctvom databázových systémov. Variabilné hodnoty však možno priradiť aj priamo v skripte. Tento typ priradenia používa nasledujúci vzor:

$example = "value";
php

Za znakom dolára nasleduje názov premennej (v tomto prípade example). Je prepojený znakom rovná sa (=) s hodnotou uzavretou v úvodzovkách. Hodnoty premenných typu integer a float sa zapisujú bez úvodzoviek (napríklad $example = 24;a $example= 2.7;).

PHP poskytuje flexibilitu pri pomenúvaní premenných. Platia však určité obmedzenia:

  • Každá premenná začína znakom dolára.
  • Názov premennej je akýkoľvek reťazec písmen, čísiel a podčiarkovníkov (napríklad $example_1).
  • Platný názov premennej vždy začína písmenom alebo podčiarknutím ($example1 alebo $_example), nikdy číslicou (nesprávne: $1example).
  • PHP rozlišuje veľké a malé písmená. Skriptovací jazyk rozlišuje medzi veľkými a malými písmenami ($example ≠ $Example).
  • Názov premennej nesmie obsahovať medzery ani riadkové zlomy (nesprávne: $example 1).
  • Reťazce vyhradené PHP na iné účely nemožno použiť ako premenné definované používateľom (napr. ,$this).

Ilustrujme to na príklade:

<?php
$author = "John Doe";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>";
?>
php

Za otváracou značkou PHP nasleduje definícia premennej. V tomto prípade je premennej $author priradená hodnota John Doe. Po spustení skriptu je každá inštancia premennej $author v skripte nahradená hodnotou John Doe v prostredí skriptu. Vizuálne znázornenie tohto procesu vo webovom prehliadači je ilustrované na nasledujúcom obrázku:

Obrázok: Dynamic text generation with variables
As a result of script execution, the variable $author was assigned the value John Doe

Ak má byť webová stránka pripísaná Maxovi Mustermannovi, nemeckému kolegovi Johna Doe, a nie Johnovi Doe, môžete to opraviť zmenou premennej $author.

Obrázok: Variables are used to create web pages dynamically
For the variable $author, the value Max Mustermann is used.

Toto je obzvlášť efektívne, ak sa premenná vyskytuje vo skripte viackrát. V takomto prípade by bolo potrebné vykonať opravu len na jednom mieste. Konkrétne tam, kde je definovaná hodnota premennej.

To ilustruje schopnosti PHP: obsah môže byť vložený pomocou premenných. Táto charakteristika tvorí základ dynamického vývoja webových stránok. Na rozdiel od statických webových stránok, ktoré existujú ako vopred vykreslené HTML stránky, dynamické webové stránky sa generujú až v momente, keď sa na ne pristupuje. Interpreter PHP načíta rôzne prvky požadovanej webovej stránky z rôznych databáz prostredníctvom premenných a skompiluje ich do prispôsobenej HTML stránky, ktorá zodpovedá konkrétnej požiadavke.

Výhody tohto prístupu sú zrejmé. Keď sa upravia prvky webovej stránky (napr. v sekcii päty stránky), nie je potrebné ručné prispôsobovanie každej jednotlivé podstránky. Stačí aktualizovať príslušný záznam v databáze. Výsledkom je, že revízie sa automaticky uplatnia na všetky webové stránky, ktoré obsahujú príslušné údaje ako premenné. Ak je premenná definovaná viackrát v rámci skriptu, nová definícia prepíše predchádzajúcu. Následné echo vždy vypíše aktuálnu hodnotu premennej.

<?php
$author = "John Doe";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>";
$author = "Max Mustermann";
echo " <p>Supported by $author.</p>";
?>
php
Obrázok: Overwriting variables
The value John Doe is overwritten with the value Max Mustermann

V príklade kódu bola premenná $author najskôr priradená hodnota John Doe a potom nahradená hodnotou Max Mustermann.

Teraz sa venujme téme úvodzoviek. Na rozdiel od reťazcov, jednotlivé premenné nemusia byť uzavreté v úvodzovkách:

<?php
$author = "John Doe";
echo $author;
?>
php

Okrem prípadov, keď je potrebné premennú použiť v reťazci. V takomto prípade použite dvojité úvodzovky (). Tým sa interpret PHP naučí vyhľadávať premenné v reťazci a podľa potreby ich nahradiť zodpovedajúcimi hodnotami. Reťazce uzavreté v jednoduchých úvodzovkách () sa interpretujú a zobrazujú ako informácie v podobe obyčajného textu, aj keď obsahujú premenné.

<?php
$author = "John Doe";
echo '<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>';
?>
php
Obrázok: Plain text output with single quotes
Single quotes result in plain text output. Variables are not interpreted.

Možno sa teraz pýtate, čo sa stane, ak úvodzovky úplne vynecháte. V takom prípade PHP označí syntaktickú chybu.

Chybové správy a maskovanie

Ak sa vyskytnú syntaktické chyby, neexistuje platný kód PHP a interpret PHP vydá chybovú správu. To sa dá očakávať napríklad v prípade, ak použijete príkaz echo s reťazcom bez úvodzoviek:

<?php
echo Hello World!;
?>
php

Chybové správy vo väčšine prípadov obsahujú informácie o mieste, kde došlo k chybe, a poskytujú dôležité informácie o tom, ako ju odstrániť.

Obrázok: Error message from web browser: Parse error
An error message indicates syntactical errors in the program code.

V aktuálnom príklade sa predpokladá chyba v riadku 2 nášho programového kódu. Práve tu sme vynechali úvodzovky.

Syntaxové chyby sa vyskytujú aj vtedy, keď chcete ako text vydať znaky, ktoré sú spojené s konkrétnou úlohou v PHP. Príkladom je úvodzovka (). Takéto znaky je možné v PHP vydať ako text len vtedy, ak interpretovi oznámite, že vlastná funkcia znaku bola neutralizovaná. V prípade jednoduchých úvodzoviek existujú dva spôsoby, ako to urobiť. Môžete uzavrieť reťazec v jednoduchých úvodzovkách do dvojitých úvodzoviek alebo môžete úvodzovky zamaskovať predchádzajúcim spätným lomítkom (\):

<?php
echo '\'Hello World!\' ';
?>
php
Obrázok: The backslash as a masking character
If characters are masked with a backslash, they are stripped of their function in the PHP syntax.

Kombinácia jednoduchých a dvojitých úvodzoviek je tiež vhodným riešením:

<?php
echo " 'Hello World!' ";
?>
php

Avšak nie tento pravopis:

<?php
echo ' 'Hello World!' ';
?>
php

Medzery medzi úvodzovkami boli v príkladoch vložené z dôvodu lepšej čitateľnosti.

Operátory zlučovania

Ak chcete vo skripte PHP vygenerovať viacero premenných naraz, môžete využiť doteraz nadobudnuté vedomosti a postupovať takto:

<?php
$author1 = "John Doe";
$author2 = "Max Mustermann";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author1 and $author2.</p>";
?>
php

Jednoducho napíšte obe premenné do reťazca v úvodzovkách spolu s ostatným textom, ktorý sa má vypísať. PHP automaticky rozpozná premenné podľa znaku dolára ($) a vloží príslušné hodnoty.

Obrázok: Text output with two variables
Variables in the string are only accepted by PHP if the script does not contain functions.

Medzi programátormi je však tento postup považovaný za nečistý. Existuje programátorské pravidlo, že premenné by nemali byť súčasťou reťazca. Jedným z dôvodov je to, že mnoho programovacích jazykov vyžaduje toto oddelenie. Ešte dôležitejšie je, že PHP tiež vyžaduje oddelenie reťazca a premennej pri práci s volaniami funkcií alebo zložitejšími premennými. Z tohto dôvodu je najlepšie ich oddeľovať aj v prostom textovom výstupe, aj keď to v tomto prípade nie je úplne nevyhnutné.

Pri práci s premennými budete vždy musieť pracovať s viacerými prvkami, ktoré je potrebné zložiť dohromady počas výstupu. V PHP sa na tento účel používa operátor zloženého reťazca (.). Ak je kód napísaný „čisto“, mal by vyzerať takto:

<?php
$author1 = "John Doe";
$author2 = "Max Mustermann";
echo '<h1>Hello World!</h1> 
<p>This dynamic web page was created by ' . $author1 . ' and ' . $author2 . '.</p>';
?>
php
Obrázok: Connecting strings and variables with concatenation operators
Concatenation operators connect strings and variables

Tu máme tri reťazce a dve premenné, ktoré boli zlučené do jedného reťazca.

Reťazec1 Premenná1 Reťazec2 Premenná2 Reťazec3
’<h1>Hello World!</h1> <p>Táto dynamická webová stránka bola vytvorená ’ . $author1 . ’ a ’ . $author2 . “.</p>“

Je dôležité spomenúť, že operátor zlučovania spája reťazce alebo premenné bez vkladania medzier. Ak je medzera zamýšľaná, musí byť explicitne zahrnutá v úvodzovkách v reťazci, ako je ukázané v príklade.

Programátori používajú operátor zlučovania nielen na kombinovanie reťazcov a premenných pre textový výstup, ale aj na rozširovanie premenných. Nasledujúci príklad ilustruje, ako sa to dosahuje:

<?php
$example = 'Hello ';
$ example .= 'World';
echo $ example;
?>
php

Ak chcete rozšíriť hodnotu premennej, definujte ju znovu, ale pred znamienkom rovná sa vložte zlučovací operátor bodka (.). Toto je bežný skrátený zápis pre $example = $example . ‘world’.

PHP pripojí novú hodnotu k predtým definovanej hodnote. Ak chcete medzi týmito dvoma hodnotami medzeru, napíšte ju na koniec prvého reťazca, ako je to v príklade.

Obrázok: Extending the value of a variable
The string Hello has been extended to Hello World

Vloženie PHP do HTML

V zásade sa interpret PHP zaujíma iba o kód, ktorý sa nachádza medzi otváracou a uzatváracou značkou PHP:

<?php [This section is parsed by the PHP interpreter] ?>

Interpreter ignoruje všetky zostávajúce časti dokumentu a bez zmien ich odošle na webový server. Vďaka tomu je možné PHP kód podľa potreby bezproblémovo začleniť do HTML dokumentov, napríklad pri tvorbe šablón pre systémy správy obsahu. Je dôležité ukladať HTML dokumenty obsahujúce kód PHP s príponou súboru PHP. V opačnom prípade sa dokument zobrazí priamo vo webovom prehliadači bez predbežného spracovania interpretom PHP. V takomto prípade by sa kód zobrazil ako text na webovej stránke.

Interpreter PHP si môžete predstaviť ako lenivého kolegu webového servera, ktorý pracuje len vtedy, keď je o to výslovne požiadaný, napr. otvorením PHP tagu.

Ak chcete kombinovať HTML a PHP, napíšte svoju HTML stránku v klasickej štruktúre dokumentu a uložte ju s príponou súboru .php:

<html lang="de">
    <head>
        <meta charset="utf-8">
        <title>My first PHP page</title>
    </head>
        <body>
    <h1>Hello World</h1>
    <p>What is the current time and date?</p>
    </body>
</html>
html

Teraz pridajte skript PHP do svojho dokumentu HTML. Uistite sa, že celý kód je vnútri značiek PHP.

<html lang="de">
    <head>
        <meta charset="utf-8">
        <title>My first PHP page</title>
    </head>
    <body>
    <h1>Hello World</h1>
    <p>What is the current time and date?</p>
    <p>Your current time and date is: 
    <?php 
    echo date("d.m.Y H:i:s");
    ?>.</p>
    </body>
</html>
html

V tomto prípade sme zlúčili jazykovú konštrukciu echo s funkciou PHP date(), aby sme ako text na strane servera vygenerovali aktuálny dátum a čas. Parameter funkcie určuje preferovaný formát, ktorý je označený ako reťazec:

d.m.Y H:i:s = deň.mesiac.rok hodina:minúta:sekunda.

Keď webový prehliadač požiada o takýto súbor, interpret PHP najskôr spustí skript a vloží aktuálny čas ako text do dokumentu HTML. Následne webový server odošle tento dokument, ktorý sa potom zobrazí v prehliadači ako webová stránka.

Obrázok: Integration of PHP in HTML
The HTML document contains an integrated PHP script that outputs the current date including time.

Funkcia komentára PHP

Podobne ako v kóde HTML, aj v kóde PHP môžete zanechať komentáre. Komentáre v zdrojovom kóde sú interpretom PHP ignorované, pokiaľ dodržiavajú syntaktické pravidlá. PHP ponúka tri rôzne metódy komentovania .

Ak chcete označiť celý riadok ako komentár a tým ho vylúčiť z interpretácie, môžete použiť buď hashtag (#) alebo dve po sebe idúce lomítka (//). Obidve možnosti sú použité v nasledujúcom príklade kódu:

<?php
#This is a single-line comment!
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
//This is also a single-line comment!
?>
php

Textový editor Notepad++ zvýrazňuje komentáre zelenou farbou. Na rozdiel od komentárov v HTML, textové časti označené ako komentáre v prostredí skriptu sa nedostanú do webového prehliadača. Tento rozdiel vzniká preto, že interpret PHP ich už počas vykonávania skriptu ignoruje.

Obrázok: Single-line comments
Lines marked as comments are not visible in the output.

Okrem toho môžete vkladať komentáre, ktoré sa rozprestierajú na viacerých riadkoch. Za týmto účelom označte začiatok komentára lomítkom nasledovaným hviezdičkou (/*) a koniec hviezdičkou nasledovanou lomítkom (*/).

<?php
/*
This is a multiple-line comment block
that spans over multiple
lines
*/
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
?>
php

Takéto komentáre nie sú analyzované a nezobrazujú sa na webovej stránke.

Obrázok: Example of a multiline comment
The multiline comment is not visible in the output.

Programátori používajú komentáre na štruktúrovanie zdrojového kódu svojich skriptov, zanechávajú poznámky na neskoršiu úpravu alebo pridávajú do zostavenia interné informácie, ako napríklad autora alebo dátum. Komentáre sú voliteľné a mali by sa používať s mierou, aby bola zabezpečená dobrá čitateľnosť zdrojového kódu.

Počítanie s premennými

V našom tutoriáli PHP ste sa už stretli s premennými, ktoré obsahujú predovšetkým reťazcové hodnoty. Teraz sa pozrime na premenné reprezentujúce celé čísla alebo desatinné čísla. Keď premenné ukladajú číselné hodnoty, PHP umožňuje s nimi vykonávať výpočty. Začnime sčítaním dvoch celých čísel:

<?php
$number1 = 237;
$number2 = 148;
$result = $number1 + $number2;
echo "result: " . $result;
?>
php

Najskôr priradíme celé čísla 237 a 148 premenným $number1 a $number2 a potom definujeme premennú $result. Tá sa používa na uloženie súčtu premenných $number1 a $number2. Na túto operáciu použijeme aritmetický operátor +(plus). Nakoniec vygenerujeme súčet ako text pomocou konštrukcie jazykaecho. Upozorňujeme, že pri priraďovaní číselných hodnôt premenným nie je potrebné používať úvodzovky.

Obrázok: Addition of integers using a PHP script
The result of the addition is output as text in the web browser.

Nasledujúci príklad kódu ukazuje výber matematických výpočtov, ktoré je možné vykonávať na strane servera pomocou PHP. Použité operátory PHP zodpovedajú vo väčšine prípadov štandardným matematickým symbolom.

Aritmetický operátor Operácia Výsledok
$číslo1 + $číslo2 Sčítanie Súčet $číslo1 a $číslo2
$číslo1 - $číslo2 Odčítanie Rozdiel $číslo1 a $číslo2
$číslo1 *$číslo2 Násobenie Súčin $číslo1 a $číslo2
$číslo1 / $číslo2 Delenie Podiel $číslo1 a $číslo2
$číslo1 **$číslo2 Mocnina $číslo2-tá mocnina $číslo1
<?php
$number1 = 10;
$number2 = 5;
$addition = $number1 + $number2; //addition
$subtraction = $number1 - $number2; //subtraction
$multiplication = $number1 * $number2; //multiplication
$division = $number1 / $number2; //division
$power = $number1 ** $number2; //power
?>
php
<?php 
echo "Result of addition: " . $addition ."<br />"; 
echo "Result of subtraction: " . $subtraction . "<br />"; 
echo "Result of multiplication: " . $multiplication . "<br />";
echo "Result of division: " . $division . "<br />";
echo "10 to the 5th power (10^5): " . $power . "<br />";
echo "root of 81: " . sqrt(81) . "<br />";
?>
php
Obrázok: Calculating with variables
Arithmetic operations at a glance

Pre zložité výpočty je možné v jednom skripte kombinovať rôzne aritmetické operácie:

<?php
$number1 = 10;
$number2 = 5;
$result = 2 *$number1 + 5* $number2 - 3 * sqrt(81);
echo "Result: " . $result; 
?>
php

Interpreter PHP určí hodnoty premenných a vypočíta:

2 *10 + 5* 5 - 3 * √81 = 20 + 25 - 27 = 18

Funkcia sqrt() vypočíta druhá mocnina parametra v zátvorkách. Platí klasické poradie operátorov v matematike: bodka pred pomlčkou. Inštrukcia echo vypíše výsledok ako reťazec pre webový prehliadač.

Obrázok: Mathematical calculation with two variables and different arithmetic operators
PHP follows the dot-before-dash rule.

PHP tiež najskôr vyhodnocuje výrazy v zátvorkách. Tentoraz budeme pracovať s číslami s pohyblivou desatinnou čiarkou:

<?php
$number1 = 2.5;
$number2 = 3.7;
$result = 2 *($number1 + 5)* ($number2 - 3) * sqrt(81);
echo "Result: " . $result; 
?>
php
Obrázok: Calculation with floating point numbers and bracketed terms
PHP calculation with the result 94.5

Rovnako ako všetky bežné programovacie jazyky, aj PHP umožňuje operátorom zvyšovať alebo znižovať číselné hodnoty o hodnotu 1. Rozlišuje sa medzi operátorom pred zvýšením, operátorom pred znížením, operátorom po zvýšení a operátorom po znížení.

Prevádzka Operátor Výsledok
Predinkrement ++$číslo Operátor ++ inkrementuje hodnotu premennej $číslo. Hodnota sa inkrementuje o 1. Výsledok sa vráti ako nová hodnota $číslo.
Predzníženie –$number Operátor dekrementuje hodnotu premennej $number. Tým sa hodnota dekrementuje o 1. Výsledok sa vráti ako nová hodnota $number.
Post-inkrement $number Najskôr sa vráti aktuálna hodnota $number a potom sa zvýši o 1.
Post-dekrement $number– Najskôr sa vráti aktuálna hodnota $number a potom sa zníži o hodnotu 1.

Najskôr si ukážeme, ako vykonávať aritmetické operácie s operátormi inkrementácie a dekrementácie, a to na príklade s preinkrementáciou. Nasledujúci skript inkrementuje hodnotu premennej $number o 1, uloží novú hodnotu do premennej $result a potom vypíše jej hodnotu ako reťazec:

<?php
$number = 0;
$result = ++$number;
echo "Result: " . $result;
?>
php

Ak zvýšite hodnotu 0 o 1, dostanete výsledok 1.

Obrázok: Pre-increment the number 0
The ++ operator increments 0 by the value 1.

Na výpočet predbežného zníženia premennej $number použijeme rovnaké skripty, ale operátor predbežného zvýšenia (++) nahradíme operátorom predbežného zníženia ():

<?php
$number = 0;
$result = --$number;
echo "Result: " . $result;
?>
php

Tu znížime hodnotu 0 premennej $number a dostaneme výsledok -1.

Obrázok: Pre-decrement the number 0
The operator -- decrements the number 0 by the value 1

Nárast hodnoty pred a po výstupe (pred vs. po…) možno demonštrovať pomocou nasledujúceho skriptu:

<?php
$x = 0;
echo '<p>result: ' . ++$x;
echo '<br>x has the value ' . $x;
echo '<p>result: ' . $x++;
echo '<br>x has the value ' . $x, '</p>';
?>
php

V oboch prípadoch dostaneme rovnaký výsledok. Pri predbežnom inkremente sa hodnota x zvýši pred výstupom v riadku 3, zatiaľ čo pri následnom inkremente sa zvýši po výstupe v riadku 5.

Obrázok: The difference between pre- and post-incrementations
Pre- and post-incrementations in comparison

Ako používať superglobálne premenné $_GET a $_POST

Teraz ste sa oboznámili so základmi jazyka PHP. Viete pracovať s premennými, spájať a vykonávať výpočty. Ďalej si ukážeme kľúčovú úlohu premenných v skriptovaní.

Dôležitou funkciou skriptovacích jazykov je ich schopnosť vyhodnocovať vstupy používateľov a prenášať hodnoty do iného skriptu. PHP využíva na prenos dát superglobálnepremenné $_GET a $_POSTpreddefinované systémové premenné dostupnévo všetkých rozsahoch. Ako asociatívne polia (dátové polia) ukladajú*$_GET a $_POST* súbor premenných vo forme reťazcov v premennej.

PHP polia možno prirovnať k skrini s viacerými zásuvkami. Každá z týchto zásuviek poskytuje priestor na ukladanie údajov. Aby ste mali prehľad o obsahu každej zásuvky, označíte ich názvom premennej. V závislosti od typu poľa môže byť tento identifikátor indexom alebo kľúčom. V indexovaných poliach priradíte každej zásuvke číselný index, zatiaľ čo v asociatívnych poliach označíte zásuvky pomocou reťazcového kľúča.

Superglobálne premenné $_GET a $_POST zahŕňajú súbor premenných reprezentovaných ako kľúče, ktoré umožňujú prístup k príslušným hodnotám. Budeme sa tým zaoberať podrobnejšie, keď sa budeme hlbšie venovať superglobálnym premenným $_GET a $_POST.

Prenos údajov prostredníctvom $_GET

Superglobálna premenná $_GET predstavuje pole premenných, ktoré sa odovzdávajú skriptu PHP pomocou URL.

Ak trávite čas na blogoch alebovinternetovýchobchodoch a internetových fórach, možno ste si všimli niektoré podivné URL adresy. Zvyčajne sú štruktúrované podľa nasledujúceho schématu:

http://hostname/ordner/filename.php?variablenname=variablevalue

V prípade blogu by schéma mohla vyzerať takto:

http://www.example-blog.com/index.php?id=1

Rozloženie takejto URL adresy je relatívne jednoduché. Na webovom serveri s doménou example-blog.com sa nachádza súbor s názvom index.php. Tento súbor sa používa na vytváranie dynamických webových stránok a zvyčajne obsahuje kód HTML a PHP spolu s odkazmi na externé šablónové súbory a štýly – v podstate všetky komponenty potrebné na zobrazenie webovej stránky.

Prídavok id=1 doURL adresy je bežným spôsobom, ako zistiť, či je webová stránka dynamická. Nachádza sa za otáznikom (?) v URL adrese. Táto zložka je známa ako reťazec HTTP dotazu a obsahuje premennú (id) a hodnotu (1), ktoré sú spojené znamienkom rovná sa (=). Parametre URL tohto druhu sa používajú na generovanie dynamických webových stránok, načítanie obsahu databázy a spúšťanie príslušných šablón.

Dynamické webové stránky umožňujú oddelenie obsahu a prezentácie. Hoci index.php obsahuje informácie o štruktúre webovej stránky, stále musí byť naplnený obsahom. Ten je zvyčajne uložený v databáze a je k nemu možné pristupovať pomocou parametrov v reťazci HTTP dotazu. V príklade URL index.php odovzdáva parameter id=1. Ten určuje, ktorý obsah sa má prečítať z databázy a načítať do index.php. V kontexte blogu to môže byť ID článku, v prípade fóra konkrétny príspevok. V prípade internetového obchodu to môže byť konkrétny produkt.

Ak URL obsahuje viac ako jeden parameter, sú tieto parametre spojené znakom „&“.

www.example-blog.com/index.php?page=article&id=1

Nižšie vám ukážeme, ako používať $_GET. V tomto príklade nie je potrebné používať databázu. V nasledujúcom skripte používame superglobálnu premennú $_GET na načítanie hodnôt premennýchfirstnameandlastname z reťazca HTTP dotazu a zapíšeme ich do premenných PHP $variable1 a $variable2:

<?php
$variable1 = $_GET['firstname'];
$variable2 = $_GET['lastname'];
echo "Hello " . $variable1 . " " . $variable2 . "!";
?>
php

Skript je volaný prostredníctvom nasledujúcej URL adresy:

localhost/hello.php?firstname=John&lastname=Doe.

Parametrefirstname=Johnandlastname=Doe boli odovzdané. Výstup hodnôt sa vykonáva rovnako ako predtým pomocou jazykového konštruktu echo.

Obrázok: Data being passed using $_GET
The URL parameters pass the variable value pairs firstname=John and lastname=Doe to the PHP script.

Prenos dát prostredníctvom $_GET nevyhnutne vedie k tomu , že prenesené dáta sú viditeľné v adresnom riadku. To znamená, že odovzdané parametre je možné vysledovať. Výhodou je, že premenné je možné uložiť v hypertextových odkazoch. Okrem toho majú používatelia možnosť uložiť si URL adresy vrátane reťazca HTTP dotazu ako záložky vo svojom prehliadači.

Skutočnosť, že parametre GET sú uvedené v URL v podobe obyčajného textu, však spôsobuje, že táto metóda nie je kompatibilná s prenosom citlivých údajov, ako sú údaje generované online formulármi. Okrem toho množstvo údajov, ktoré je možné preniesť pomocou $_GET, je obmedzené maximálnou dĺžkou URL.

Tieto obmedzenia môžete obísť pomocou metódy HTTP POST. Dáta, ktoré sa prenášajú pomocou tejto metódy, nájdete v superglobálnej premennej $_POST.

Prenos údajov prostredníctvom $_POST

Zatiaľ čo v metóde GET sa údaje prenášajú ako parameter URL, v prípade $_POST sa prenos údajov uskutočňuje v tele HTTP požiadavky. To umožňuje prenášať aj veľké množstvá údajov z jedného skriptu do druhého.

Hlavnou oblasťou použitia metódy HTTP POST je prenos údajov z HTML formulárov. Ukážeme to na príklade prihlásenia sa k odberu noviniek.

Na to vytvorte nový súbor PHP s názvom page1.php a skopírujte nasledujúci blok kódu:

<form method="post" action="page2.php" >
Please send your newsletter to: <br />
Your name: <input type="text" name="first name" /><br />
Your surname: <input type="text" name="lastname" /><br />
Your email address: <input type="text" name="email" /><br />
<input type="submit" value="Send form" />
</form>
php

HTML prvok <form> sa používa na vytváranie formulárov. Začiatočná značka obsahuje dva atribúty:method a action. Atribútom method definujete spôsob prenosu, v tomto prípade HTTP-POST. V atribúte action uložíte URL skriptu, ktorý prijíma všetky údaje zadané prostredníctvom nasledujúcich vstupných polí. Príklad ukazuje HTML formulár s tromi vstupnými prvkami (input type=„text“) a tlačidlom na odoslanie (input type=„submit“). Súbor page2.php je definovaný ako príjemca údajov.

Na ilustráciu prenosu dát pomocou $_POST použijeme jednoduchý skript na vyhodnotenie dát formulára, ktorý ukladá odoslané hodnoty ako premenné PHP a vypisuje ich v textovej forme. Na to vytvorte súbor page2.php a vložte do neho nasledujúci programový kód:

<?php
$name = $_POST["name"];
$surname = $_POST["lastname"];
$email = $_POST["email"]; 
echo "Hello " . name . " " . $lastname . ", <br /> 
You have registered with the following e-mail address:" . $email . ".";
?>
php

Uložte dva súbory PHP do priečinka htdocs vášho testovacieho servera a vyvolajte stránku page1.php z nasledujúcej adresy URL vo vašom webovom prehliadači: http://localhost/page1.php. Váš prehliadač vám teraz zobrazí interaktívne webové rozhranie vášho formulára HTML.

Obrázok: Data input via HTML form
The HTML form page1.php collects user data and sends it to the script with the address page2.php

Zadajte akékoľvek prihlasovacie údaje a stlačte tlačidlo Odoslať, aby ste preniesli premenné z jedného skriptu do druhého. Po potvrdení vstupov na stránke page1.php budete okamžite presmerovaní na stránku page2.php. V okne prehliadača sa zobrazí výsledok vykonania skriptu na základe odoslaných údajov.

Obrázok: Output of user data
Data transfer with the HTTP POST method and output via echo

Údaje zadané používateľom prostredníctvom vstupných polí na stránke page1.php budú načítané stránkou page2.php prostredníctvom:

$_POST["input field name"]

Riadok $firstname = $_POST[„firstname”] načíta vstup v poli firstname a uloží ho do premennej $firstname. Premenná $firstname môže byť následne vypísaná ako reťazec pomocou echo.

Ako používať porovnávacie operátory PHP a konštrukciu IF

Doposiaľ sme definovali premenné, prenášali ich z jedného skriptu do druhého a vypisovali ich ako reťazce. V ďalšom kroku sa naučíte viazať vykonávanie fragmentov kódu na určité podmienky.

Jazykový konštrukt if vám umožňuje písať skripty takým spôsobom, že príkazy nadobudnú platnosť len vtedy, ak je splnená podmienka, ktorú definujete, napríklad zadanie správneho hesla.

Podmienky sú v PHP definované podľa nasledujúceho základného rámca:

<?php
if(expression)
    {
    statement;
    }
?>
php

Znie to takto: Ak je splnená podmienka uvedená vo výraze, príkaz bude vykonaný. Podmienka je vždy splnená, ak konštrukcia if vráti výsledok TRUE (pravda). V opačnom prípade sa považuje za FALSE (nepravda). V takomto prípade bude príkaz preskočený.

Konštrukcia if zvyčajne kontroluje, či hodnota premennej zodpovedá tomu, čo bolo definované v podmienke. Táto kontrolná štruktúra sa zvyčajne realizuje na základe porovnávacích operátorov.

Porovnávacie operátory

Porovnávacie operátory sa používajú pri formulovaní podmienok, aby sa dva argumenty dostali do logického vzťahu, ktorý možno vyhodnotiť ako pravdivý (TRUE) alebo nepravdivý (FALSE). Keď sa porovnávacie operátory používajú v riadiacich štruktúrach PHP, aplikujú sa na dve premenné vo výraze konštrukcie if:

if ($a == $b) 
    {
    statement;
    }
php

Z jazykového hľadiska je kontrolná štruktúra nasledovná: ak je premenná $a rovná premennej $b, potom sa vykonajú príkazy definované v príkaze.

Porovnávacie operátory PHP sú založené na programovacom jazyku C a ich zápis sa výrazne líši od klasických matematických symbolov. Prehľad nájdete v tabuľke nižšie.

Porovnávací operátor Popis Podmienka
== rovná sa Podmienka je splnená, ak $a a $b majú rovnakú hodnotu.
=== je identické Podmienka je splnená, ak $a a $b majú rovnakú hodnotu a patria do rovnakého dátového typu. To možno ilustrovať na príklade, kde sa celé číslo (1) porovnáva s reťazcom („1”): 1 == „1“ //TRUE 1 === „1“ //FALSE Pre podmienky, ktoré vyžadujú, aby boli dve premenné rovnaké, je najlepšie vždy používať relačný operátor === (je identický).
!= je nerovnaké Podmienka je splnená, ak $a a $b majú nerovnaké hodnoty.
!== nie je identické Podmienka je splnená, ak $a a $b majú nerovnaké hodnoty alebo patria do rôznych dátových typov.
`< * je menšie ako Podmienka je splnená, ak hodnota* $a je menšia ako hodnota $b*.
*>` je väčšia ako Podmienka je splnená, ak je hodnota* $a väčšia ako hodnota $b*.
<= je menšia alebo rovná Podmienka je splnená, ak je hodnota $a menšia ako hodnota $b alebo ak majú $a a $b rovnakú hodnotu.
>= je väčšia alebo rovná Podmienka je splnená, ak je hodnota $a väčšia ako hodnota $b alebo ak $a a $b majú rovnakú hodnotu.

Nasledujúci skript by mal objasniť túto kontrolnú štruktúru. Porovnávajú sa dve celé čísla. Používa sa porovnávací operátor < (je menšie):

<?php
$number1 = 10;
$number2 = 20;
if($number1 < $number2) { 
    echo "The condition is fulfilled";
}
php

Definujeme premenné $number1 a $number2 a priradíme im hodnoty10 a 20. Následne nastavíme podmienku: ak je $number1 menšie ako $number2, mal by sa vypísať reťazec uvedený v príkaze echo.

Výsledok vykonania skriptu obsahuje odpoveď: 10 je menšie ako 20. Konštrukcia if vráti výsledok TRUE. Podmienka je splnená.

Obrázok: The language construct if in the application
If the condition is met, the statement is executed.

Ak chcete definovať príkazy, ktoré sa vykonajú, ak nie je splnená podmienka, pridajte do príkazu if jazykovú konštrukciu else, čím vytvoríte príkaz if-else v jazyku PHP:

<?php
if(condition a)
    {
    statement b;
    }
else 
    {
    statement c
    }
?>
php

Tento skript kontroluje, či podmienka a vráti hodnotu TRUE alebo FALSE. Ak je podmienka a splnená (TRUE), vykoná sa príkaz b. Ak podmienka a nie je splnená (FALSE), príkaz b sa preskočí a namiesto toho sa vykoná príkaz c.

Rozšírme náš skript o konštrukciu else a vymeňme porovnávací operátor < (je menší) za == (je rovnaký):

<?php
$number1 = 10;
$number2 = 20;
if($number1 == $number2) 
    { 
    echo "The condition is fulfilled";
    }
else 
    {
    echo "The condition is not fulfilled";
    }
?>
php

Tentoraz konštrukcia if vráti hodnotu FALSE. Hodnota premennej $number1 nie je rovnaká ako hodnota $number2. Podmienka nie je splnená. Preto sa príkaz uvedený pod if nevykoná, ale príkaz definovaný pod else áno.

Obrázok: The language construct else in the application
If the condition is not met, the statement defined under else is executed.
Poznámka

Na viazanie vykonania fragmentu kódu na dve rovnaké hodnoty sa v PHP používa dvojité znamienko rovná sa (==). Jednoduché znamienko rovná sa (=) sa používa na priradenie hodnôt premenným.

Podmienky môžete negovať umiestnením výkričníka (!) pred výrazom.

<?php
$number1 = 10;
$number2 = 20;
if ($number1 == $number2) 
    { 
    echo "The numbers are the same.";
    }
if (!($number1 == $number2))
    {
    echo "The numbers are not equal.";
    }
?>
php

Tento príklad zdôrazňuje podmienku $number1 == $number2 a jej negáciu. !($number1 == $number2) je ekvivalentné ($number1 != $number2).

Praktickou aplikáciouifandelse je dotaz na heslo založený na formulári HTML. Môžeme to simulovať pomocou našich súborov PHP page1.php a page2.php.

Otvorte stránku 1.php a vložte nasledujúci kód:

<form action="page2.php" method="post">
Please enter your password: <input type="password" name="password" />
<input type="submit" value="send" />
</form>
php

Štruktúra zodpovedá predtým vytvorenému formuláru. Tentoraz však stačí jedno vstupné pole: požiadavka na heslo. Rovnako ako predtým sa vstup používateľa odovzdá skriptu page2.php.

Toto môžeme prispôsobiť pomocou nasledujúceho kódu tak, aby sa zadávané heslo porovnalo s uloženým heslom:

<?php
$password = $_POST["password"];
if($password=="qwertz123")
    {
    echo "The password was correct";
    }
else
    {
    echo "The password was incorrect";
    }
?>
php

Kód možno vysvetliť takto: najskôr priradíme hodnotu premennej $password v riadku 2, ktorú získame pomocou metódy HTTP POST. Potom definujeme nasledujúcu kontrolnú štruktúru: konštrukcia if v riadku 3 by mala skontrolovať, či hodnota premennej $password zodpovedá reťazcu qwertz123. Ak áno, vypíše sa reťazec The password was correct (Heslo bolo správne ). Ak if vráti výsledok FALSE, použije sa else v riadku 7 a vypíše sa reťazec The password was incorrect (Heslo bolo nesprávne).

Teraz voláme skript page1.php prostredníctvom URL http://localhost/page1.php.

Obrázok: Web interface of the HTML form for password query
The HTML form prompts you to enter a password.

Prehliadač zobrazí webové zobrazenie nášho formulára na zadanie hesla v HTML. Zadáme heslo quertz123 definované v skripte page2.php a klikneme na tlačidlo Odoslať.

Obrázok: The password query was correct
The script confirms that the password that was entered is correct.

Webový prehliadač nás automaticky presmeruje na stránku page2.php, zatiaľ čo kontrolná štruktúra if porovnáva náš vstup s uloženým heslom. Dospieva k výsledku*„qwertz123 == qwertz123* je *TRUE“*a potom vypíše reťazec Heslo bolo správne.

Vyskúšajte si to sami a uvidíte, čo sa stane, keď do vstupného poľa zadáte iné heslo.

Logické operátory

Podmienky, ktoré definujete pomocou porovnávacích operátorov vo výraze konštrukcie if, môžete v prípade potreby kombinovať s inými podmienkami v tom istom výraze. PHP používa logické operátoryAND a OR.

Úzka väzba Slabé puto Popis
&& AND Obe podmienky spojené s operátorom musia byť PRAVDA.
*\ \ * OR Len jedna z dvoch podmienok spojených s operátorom musí byť PRAVDA.

Na kombinovanie podmienok môžete v PHP použiť logické operátory s pevným a slabým viazaním. V praxi použitie jedného z týchto dvoch zápisov samostatne neprinesie žiadny badateľný rozdiel. Ak skombinujete oba zápisy, zistíte, že OR a || sú silnejšie viazané ako AND a OR. Takisto AND a&& sú silnejšie viazané ako OR a ||. Je to porovnateľné s poradím operátorov známym z matematických operátorov (napr. bodka pred pomlčkou: *je silnejšie viazaná ako +).

Praktickým príkladom je požiadavka na zadanie hesla. Prihlasovacie údaje zvyčajne obsahujú tajné heslo a používateľské meno. Prihlásenie je úspešné len vtedy, ak oba údaje zodpovedajú údajom uloženým v systéme.

Teraz opäť otvoríme formulár na zadávanie hesla v súbore Page1.php a pridáme pole na zadávanie používateľského mena:

<form action="page2.php" method="post">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
<input type="submit" value="Submit" />
</shape>
php

V ďalšom kroku musíme upraviť kontrolnú štruktúru konštrukcie if. Použijeme logický operátor AND na prepojenie podmienky pre dotaz na heslo s podmienkou pre dotaz na používateľské meno.

<?php
$username = $_POST["username"];
$password = $_POST["password"];
if($username=="John Doe" AND $password=="qwertz123")
    {
    echo "Welcome to the internal area" . $username . "!";
    }
else
    {
    echo "Access failed";
    }
?>
php

V našom skripte page2.php sa hodnoty preusername a password získavajú a ukladajú do premenných $username a $password. Výraz v konštrukcii if teraz obsahuje dve podmienky spojené logickým operátorom AND.Aby ifvrátilvýsledok TRUE, musia byť splnené obe podmienky (*username==„John Doe”*a $password==„qwertz123”**).

Pri načítaní používateľského mena z vstupného poľa username ho môžeme priamo použiť v textovom výstupe pomocou príkazu echo. Za privítaním Welcome to the internal area nasleduje hodnota v $username. Ak nie je splnená ani jedna z týchto dvoch podmienok, textový výstup bude: Access failed.

Obrázok: Password query with two conditions
The script only confirms the correct password entry if both conditions are met.

Logické operátory možno kombinovať ľubovoľným spôsobom. Majte na pamäti, že AND má vyššiu prioritu ako OR. Rovnako ako v matematických rovniciach, aj v PHP môžete použiť zátvorky na označenie priority.

Ako používať slučky (while, for)

Niekedy musí skript prebehnúť určitou časťou kódu niekoľkokrát, než vykoná zvyšok programového kódu. Programovacie jazyky na to používajú koncept slučiek. V PHP existujú tri typy slučiek:

  • cyklywhile
  • do-while slučky
  • for slučky

while slučky

Slučka while je najjednoduchší typ slučky v PHP. Tu je jej základná štruktúra:

while (condition)
    {
    loop step and other instructions
    }
php

Slučka while nariaďuje PHP, aby vykonávalo podprogramy, pokiaľ je splnená podmienka while. Na tento účel interpret PHP kontroluje podmienku na začiatku každého prechodu slučky. Vykonávanie podriadeného kódu sa zastaví až vtedy, keď podmienka while už nie je splnená.

Tento princíp možno ilustrovať pomocou jednoduchého skriptu na počítanie:

<?php
$number = 1;
while ($number <= 10) {
    echo $number++ . "<br />";
    }
?>

Pojem inkrementácia bol predstavený v časti Výpočty s premennými tohto tutoriálu. V nasledujúcom skripte nadväzujeme na tento pojem, ale s malou zmenou. Tentoraz použijeme operátor post-inkrementácie. Ten zvýši hodnotu celočíselnej premennej $number o 1 po každej iterácii slučky, ihneď po výstupe textu echo. Podmienku pre cyklus while nastavíme takto: $number je väčšie alebo rovné 10. Následne sa príkaz echo bude opakovať, kým $number neprekročí hodnotu 10.

Obrázok: The script counts to 10 and then breaks off
The script increments the variable $num until a value greater than 10 is reached.

Výsledkom vykonania skriptu je reťazec, ktorý vytlačí hodnotu premennej $number pre každý priechod slučky pred jej inkrementáciou. Výsledkom je, že skript počíta od 1 do 10 a prestane vykonávať kód, akonáhle podmienka while už nie je splnená.

cyklydo-while

Štruktúra cyklu do-while je podobná štruktúre cyklu while. Jediný rozdiel spočíva v tom, že podmienka sa nekontroluje na začiatku každého prechodu cyklu, ale až na konci. Základná schéma cyklu do-while je nasledovná:

do {
     loop step and other instructions
     }
    while (condition)
php

Naprogramovaný ako cyklus do-while by predchádzajúci skript vyzeral takto:

<?php
$number = 1;
do {
    echo $number++ . "<br />";
    }
while ($number <= 10);
?>
php

V tomto prípade zostáva výsledok rovnaký. Špeciálnou vlastnosťou cyklu do-while je to, že sa vykoná aspoň raz, aj keď podmienka nie je splnená v žiadnom priebehu cyklu.

pre cykly

Vo všeobecnosti má cyklus for v skripte PHP rovnakú funkciu ako cyklus while. Na rozdiel od cyklu while však počiatočná hodnota, podmienka a príkaz napísané na jednom riadku namiesto toho, aby boli rozložené na tri alebo viac riadkov. Základná štruktúra cyklu for je:

for (start value; condition; loop step)
    instructions
php

Vyššie uvedený príklad by sa dal napísať kompaktnejšie ako cyklus for:

<?php
for($number = 1; $number <= 10; $number++) {
    echo $number . "<br /> ";
}
?>
php

Najskôr sa pre $number definuje hodnota 1. Potom PHP skontroluje, či je splnená podmienka $number <= 1. Ak áno, cyklus pokračuje a vykonajú sa príkazy pod cyklom (v tomto prípade príkaz echo). Po vykonaní tohto kroku sa vykonajú kroky cyklu. V tomto kontexte je voľba medzi predbežným alebo následným inkrementom irelevantná, pretože tento krok sa vždy vykonáva pred výstupom. Po ukončení kroku slučky sa spustí ďalšia iterácia slučky.

V cykle for sa počiatočná hodnota, podmienka a krok cyklu považujú za voliteľné komponenty. Teoreticky sú možné aj prázdne cykly. Takéto cykly by však boli nadbytočné.

Je v podstate na vás, či budete písať svoje skripty PHP s cyklom for alebo while. Existuje však argument pre výber cyklov for: keď sa používajú cykly for, máte lepší prehľad o rámcových údajoch cyklu. Tým sa vyhnete riziku náhodného napísania nekonečného cyklu, ktorý beží, kým sa nevyčerpá pamäť interpretu. V súvislosti s predchádzajúcim príkladom sa to môže stať, ak zabudnete zvýšiť hodnotu premennej $number.

Ak však má byť slučka spustená aspoň raz, bez ohľadu na podmienku, je vhodnejšia slučka do-while.

breakandcontinue príkazy

Na vykonanie cyklu while, do-while alebo for môžu mať vplyv príkazybreak a continue. Príkaz break slúži na prerušenie toku cyklu v ľubovoľnom bode a príkaz continue na preskočenie priechodu cyklom. Oba príkazy sú viazané na podmienku pomocou if. Nasledujúci príklad ukazuje náš skript na počítanie s príkazom break:

<?php
for ($number = 1; $number <= 10; $number++) {
    if ($number == 5) {
      echo "If it is 5, we abort the script!";
      break;
    }
echo $number . "<br /> ";
}
?>
php

V cykle for sme definovali, že hodnota premennej $number by sa mala v každom cykle zvýšiť o hodnotu 1, počnúc hodnotou 1, až kým premenná nedosiahne hodnotu 10. Tento cyklus môžeme predčasne zastaviť pomocou break, akonáhle $number dosiahne hodnotu 5. Jazyková konštrukcia echo vypíše iba čísla 1 až 4.

Obrázok: for loop with break
The break statement breaks the loop as soon as the if condition is met.

Aby sme preskočili výstup piateho kola, ale nezastavili celý tok slučky, nahradíme príkaz break príkazom continue:

<?php
for ($number=1; $number <= 10; $number++) {
    if ($number == 5) {
      echo "Let's skip the 5!<br />";
      continue;
    }
echo $number . "<br /> ";
}
?>
php

Namiesto číslice 5 PHP vypíše textový reťazec Preskočíme číslo 5! definovaný pod if.

Obrázok: for loop with continue statement
The for loop is interrupted by a continue statement.

Ako vykonávať operácie so súbormi

Dynamický webový obsah je štruktúrovaný na princípe oddelenia obsahu a prezentácie. Na dosiahnutie tohto cieľa skriptovacie jazyky ako PHP ponúkajú širokú škálu funkcií, ktoré uľahčujú plynulú integráciu obsahu z externých zdrojov údajov do centrálnych šablónových súborov. V praxi sú týmito zdrojmi údajov zvyčajne databázy, ktoré sa spravujú pomocou systémov správy, ako je MySQL. Ako to funguje, sa dozviete v našom tutoriáli MySQL.

Je tiež možné zahrnúť údaje zo súborov. Nižšie vám ukážeme, ako načítať súbory ako reťazec do skriptu PHP a uložiť textový výstup zo skriptu do súborov.

Čítanie súborov

Na čítanie obsahu súboru má PHP k dispozícii rôzne funkcie. Z nich sú pre danú úlohu obzvlášť vhodné funkcie file() a file_get_contents(). Kým funkcia file_get_contents() načíta celý obsah súboru do reťazca, funkcia file() uloží obsah ako pole. Každý prvok poľa zodpovedá jednému riadku súboru. Použitie funkcie file() uľahčuje výstup každého riadku jednotlivo.

Operácie s PHP súbormi si ukážeme na príklade textového súboru example.txt, ktorý umiestnime do priečinka htdocs nášho testovacieho servera. Súbor obsahuje štyri riadky fiktívneho textu:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.

Najskôr musíme prečítať celý súbor ako reťazec. Na to musíme priradiť názov príslušného súboru ako parameter funkcii file_get_contents():

file_get_contents('example.txt')

Teraz máme možnosť pracovať s načítaným reťazcom. Môžeme ho napríklad priradiť premennej a zobraziť ako text vo webovom prehliadači:

<?php
$example = file_get_contents('example.txt');
echo $example;
?>
php
Obrázok: The script reads the file example.txt.
The file that has been read is saved in the browser.

V prehliadači vidíme, že textový reťazec je zobrazený bez odsekov. Zlomky riadkov pôvodného súboru nie sú viditeľné. Je to preto, že webový prehliadač interpretuje textový výstup skriptu ako HTML kód. Zlomky, ktoré boli definované v textových editoroch, sa stratili.

Ak chcete zachovať pôvodnú štruktúru, máte niekoľko možností. Môžete ručne pridať HTML kód pre zlom riadku (br) do zdrojového súboru pomocou vyhľadávania a nahradenia, vložiť <pre> okolo obsahu súboru, nastaviť vlastnosť CSS white-space: pre -wrap alebo použiť funkciu nl2br(), aby PHP automaticky previedlo zlomy riadkov (nové riadky) na zlomy riadkov HTML (breaks). Tu je kód:

<?php
$example = file_get_contents('example.txt');
echo nl2br($example);
?>
php

Ak sa konštrukcia echo language používa v kombinácii s nl2br(), PHP vloží pred každý nový riadok HTML zlom riadku.

Obrázok: The nl2br() function in the application
nl2br() helps to structure imported data.

Na individuálne vypísanie riadkov súboru môžete použiť funkciu file(). Táto funkcia prečíta súbor, očísluje všetky riadky počnúc číslom 0 a uloží ich obsah ako prvky poľa. Pri použití v našom príklade dostaneme nasledujúci výsledok:

[0] = Lorem ipsum dolor sit amet, consectetuer adipiscing elit

[1] = Aenean commodo ligula eget dolor. Aenean massa.

[2] = Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

[3] = Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem

Ak chcete pomocou echo vygenerovať príslušný obsah, stačí zadať požadované číslo riadku. Napríklad nasledujúci skript nám ako výstup pre prehliadač poskytuje iba prvý riadok súboru example.txt:

<?php
$example = file("example.txt");
echo $example [0];
?>
php
Obrázok: The file() function in the application
Select which element of the array you wish to output.

Zapisovať súbory

PHP presahuje rámec jednoduchého čítania súborov, pretože vám umožňuje aj čítať, vytvárať a upravovať súbory bez námahy.

Použitie funkcie file_put_contents() je toho najlepším príkladom. Vyžaduje len dva parametre: názov cieľového súboru a dáta, ktoré môžu byť reťazcom alebo poľom. V nižšie uvedenom skripte sa vytvorí nový súbor s názvom test.txt, ktorý obsahuje reťazec This is a test!. Vloženie \r\n zabezpečuje zalomenie riadku v súbore.

<?php
file_put_contents("test.txt", "This is a test! \r\n");
echo "test.txt has been created!";
?>
php
Obrázok: File operations: write files
The PHP script writes the string This is a test! into the file test.txt.

Keďže file_put_contents nám neposkytuje žiadny výstup pre prehliadač, pridáme príkaz echo, ktorý nám oznámi, aká akcia sa vykonáva.

Ak sa v cieľovej zložke už nachádza súbor s rovnakým názvom, bude prepísaný. Tomu môžete zabrániť nastavením parametra FILE_APPEND:

<?php
file_put_contents("test.txt","The test was successful! \r\n", FILE_APPEND);
echo "test.txt has been updated!";
?>
php

Použitím funkcie file_put_contents() s parametrom FILE_APPEND sa nový obsah pripojí k existujúcemu obsahu.

Obrázok: File operations: update files
The PHP script adds the string The test was successful!.

To, čo PHP zapíše do cieľového súboru, nemusí byť nutne definované v skripte. Alternatívne môžete prenášať obsah z jedného súboru do druhého. Nasledujúci skript prečíta obsah súboru example.txt a vloží ho do súboru test.txt:

<?php
$example = file_get_contents("example.txt");
file_put_contents("test.txt", $example, FILE_APPEND);
echo "test.txt has been updated!";
?>
php
Obrázok: File operations: transfer content from one file to another
The PHP script reads the data from the example.txt file and adds it to the test.txt file.
Prejsť na hlavné menu