PHP je jeden z nejběžnějších programovacích jazyků pro programování na straně serveru. Postupem času se stal nedílnou součástí moderních webových stránek a internetových technologií. Nicméně zvládnutí PHP může být pro nováčky náročné. V tomto tutoriálu PHP vám ukážeme základy tohoto populárního programovacího jazyka a jeho nejdůležitější operátory, smyčky a funkce.

Co potřebujete mít před zahájením výuky PHP

Náš tutoriál je určen především pro začátečníky. Nicméně základní znalosti moderního vývoje webových aplikací a HTML mohou být užitečné. Abyste mohli příklady sledovat a reprodukovat na svém počítači, ujistěte se, že máte připraveno následující:

  • Webový server včetně interpretu PHP
  • Nainstalovaný PHP
  • Webový prohlížeč
  • Textový editor

Jako server doporučujeme lokální testovací prostředí XAMPP, které Apache Friends poskytuje zdarma pro operační systémy Windows, Linux a macOS. XAMPP je čistě testovací server. Weboví vývojáři mohou tento software použít k snadnému nastavení testovacích prostředí pro skripty, HTML stránky a styly. Bezpečný provoz webového serveru na internetu však není zaručen. Podrobné pokyny k instalaci naleznete v našem tutoriálu XAMPP.

Jaká je syntaxe PHP?

Jakmile nastavíte místní webový server (například pomocí XAMPP), je dobré otestovat, zda je PHP nainstalováno správně a zda je připraveno ke spuštění skriptů. Skript je program, který není zkompilován do binárního kódu. Místo toho je spouštěn interpretem. Otevřete svůj oblíbený textový editor a zadejte následující skript PHP:

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

Skripty PHP mají specifickou strukturu. Otevírací značka PHP <?php iniciujeskriptové prostředí. Následuje vlastní kód PHP ve formě příkazů. V výše uvedeném příkladu se jedná o volánífunkcephpinfo(). Většina funkcí PHP vyžaduje jeden nebo více parametrů, které jsou uzavřeny v závorkách. Pro funkci phpinfo() jsou tyto parametry volitelné:phpinfo(INFO_ALL). Každý příkaz končí středníkem (;). Skript ukončíte pomocí uzavíracího PHP tagu:?>.

Definice

Funkce jsou podprogramy, které umožňují outsourcovat části programového kódu. Aby se zabránilo opakování, lze opakující se úkoly definovat jednou jako funkci a poté je vyvolat pomocí názvu funkce. Weboví vývojáři k tomuto účelu používají předdefinované funkce PHP nebo vytvářejí vlastní podprogramy.

Uložte textový soubor pod názvem test ve formátu .php (skript PHP) a spusťte webový server. Pokud používáte testovací prostředí XAMPP, uložte soubor test.php do adresáře XAMPP v adresáři htdocs (C:\xampp\htdocs).

K ukázkovému souboru se dostanete přes následující URL adresu ve webovém prohlížeči: http://localhost/test.php. Pokud používáte alternativní webový server nebo individuální konfiguraci softwaru XAMPP, vyberte URL adresu podle příslušné cesty k souboru.

Když zadáte adresu URL http://localhost/test.php, webový prohlížeč požádá webový server o soubor test.php. Apache HTTP Server (nebo jakýkoli jiný typ webového serveru, který používáte) načte soubor z příslušného adresáře. Přípona .php znamená, že soubor obsahuje kód PHP. V tomto okamžiku se aktivuje interpret PHP, který je integrován do webového serveru. Zpracuje dokument a narazí na otevírací značku PHP <?php, která signalizuje zahájení kódu PHP. Interpret pokračuje v provádění kódu PHP a generuje výstup HTML, který webový server přenáší do webového prohlížeče k zobrazení. Pokud byl PHP nainstalován správně, provedení skriptu bude mít za následek následující webovou stránku:

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

Funkce phpinfo() je zkratka pro výchozí phpinfo( INFO_ALL ). Tato funkce vypíše podrobné informace o konfiguraci PHP vašeho webového serveru. Pokud nelze najít žádnou verzi PHP, webový prohlížeč zobrazí chybovou zprávu nebo doručí kód PHP do prohlížeče bez jeho interpretace.

„Hello World!“ – Jak vypsat text pomocí echo

Po úspěšné instalaci PHP je čas napsat svůj první skript. K tomu můžete použít PHP echo. Na rozdíl od phpinfo() není echo funkcí. Jedná se spíše o jazykovou konstrukci, která umožňuje výstup následujícího řetězce jako text.

Definice

Jazykové konstrukce jsou příkazy používané v PHP k řízení toku programu. Kromě echo patří mezi jazykové konstrukce také příkazy jako if, for, do, include, return, exit nebo the. Na rozdíl od funkcí není nutné používat závorky.

Pro svůj první vlastní skript vytvořte nový soubor PHP a zadejte následující kód:

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

Otevírací značka <?php spustí skriptové prostředí. Následuje jazykový konstrukt echo a řetězec Hello World!, který je uzavřen v jednoduchých uvozovkách. K ukončení skriptu použijte značku ?>. Všimněte si středníku za příkazem. Místo Hello World! lze použít libovolný text.

Uložte skript jako hello.php do adresáře htdocs na vašem webovém serveru. Poté otevřete soubor pomocí adresy URL http://localhost/hello.php ve vašem webovém prohlížeči. Pokud byl kód přenesen správně, mělo by se v okně prohlížeče zobrazit vámi zadané řetězce:

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

Jakýkoli text, který vygenerujete pomocí echo, může podle potřeby obsahovat HTML tagy. Tyto tagy budou interpretovány webovým prohlížečem v souladu se specifikacemi HTML. Vyzkoušejte si tento koncept například pomocí následujícího skriptu:

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

Při vyvolání ve webovém prohlížeči se výsledek provedení skriptu zobrazí následovně.

Obrázek: 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!, který je uzavřen v <h1> značkách, je webovým prohlížečem interpretován jako primární nadpis. Následuje automatický konec řádku a textový odstavec mezi značkami <p>.

V závislosti na vašich požadavcích můžete echo použít buď s jednoduchými uvozovkami () nebo dvojitými uvozovkami (). Pokud pouze vypisujete text, na výběru uvozovek nezáleží. Tento rozdíl však nabývá na významu při práci s proměnnými PHP.

Proměnné

Konstrukce jazyka echo nabízí více než jen zobrazení textu. Zatímco textové prezentace lze již efektivně provádět pomocí HTML, skutečná výhoda použití konstrukce jazyka PHP echo spočívá v její schopnosti dynamicky vytvářet text pomocí proměnných.

Uživatelé PHP se často setkávají s proměnnými v následujícím formátu: $example

Každá proměnná se skládá ze znaku dolaru ($) následovaného názvem proměnné. Proměnné se používají ve skriptech PHP k začlenění externích dat do webových stránek. Mohou zahrnovat různé typy hodnot, od základních čísel a řetězců až po kompletní texty nebo struktury HTML dokumentů. PHP rozlišuje sedm různých typů proměnných:

Variabilní typ Popis
Řetězec Řetězec je posloupnost znaků. Může představovat slovo, frázi, část textu nebo dokonce celý HTML kód webové stránky.
Celé číslo Celé číslo je celé číslo bez desetinných míst. Může být kladné nebo záporné.
Číslo s plovoucí desetinnou čárkou Číslo s plovoucí desetinnou čárkou je číslo s desetinnými místy. PHP podporuje až 14 číslic za desetinnou čárkou.
Boolean Booleovské proměnné jsou výsledkem logické operace a znají pouze dvě hodnoty: TRUE (pravda) a FALSE (nepravda). Tento typ proměnné se používá při práci s podmínkami.
Pole Pole je proměnná, která může obsahovat několik prvků. Jedná se o seskupení několika podobně strukturovaných dat, která byla sloučena do pole.
Objekt Typ proměnné objekt umožňuje programátorům definovat vlastní datové typy. Používá se v objektově orientovaném programování. Do tohoto tutoriálu PHP jsme zahrnuli objektové proměnné.
NULL Hodnota NULL představuje proměnnou bez hodnoty. Pro proměnné tohoto typu je NULL jedinou možnou hodnotou.

Centralizace obsahu se obvykle řídí prostřednictvím databázových systémů. Nicméně proměnné hodnoty lze také přiřadit přímo ve skriptu. Tento typ přiřazení používá následující vzor:

$example = "value";
php

Za znakem dolaru následuje název proměnné (v tomto případě example). Je propojen znakem rovnosti (=) s hodnotou uzavřenou v uvozovkách. Hodnoty proměnných typu integer a float se zapisují bez uvozovek (například $example = 24;a $example= 2.7;).

PHP poskytuje flexibilitu při pojmenovávání proměnných. Platí však určitá omezení:

  • Každá proměnná začíná znakem dolaru.
  • Název proměnné je libovolný řetězec písmen, čísel a podtržítka (například $example_1).
  • Platný název proměnné vždy začíná písmenem nebo podtržítkem ($example1 nebo $_example), nikdy číslicí (nesprávně: $1example).
  • PHP rozlišuje velká a malá písmena. Skriptovací jazyk rozlišuje mezi velkými a malými písmeny ($example ≠ $Example).
  • Název proměnné nesmí obsahovat mezery ani konce řádků (nesprávně: $example 1).
  • Řetězce vyhrazené PHP pro jiné účely nelze použít jako uživatelsky definované proměnné (např.$this).

Ilustrujme to na příkladu:

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

Za otevíracím tagem PHP následuje definice proměnné. V tomto případě je proměnné $author přiřazena hodnota John Doe. Po spuštění skriptu je každá instance proměnné $author ve skriptu nahrazena hodnotou John Doe v prostředí skriptu. Vizuální znázornění tohoto procesu ve webovém prohlížeči je ilustrováno na následujícím diagramu:

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

Pokud má být webová stránka přiřazena Maxovi Mustermannovi, německému kolegovi Johna Doe, a nikoli Johnu Doe, můžete to opravit změnou proměnné $author.

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

To je zvláště účinné, pokud se proměnná vyskytuje ve skriptu několikrát. V takovém případě by opravu stačilo provést pouze na jednom místě, a to tam, kde je definována hodnota proměnné.

To ilustruje schopnosti PHP: obsah lze vkládat pomocí proměnných. Tato vlastnost tvoří základ dynamického vývoje webových stránek. Na rozdíl od statických webových stránek, které existují jako předem vykreslené HTML stránky, se dynamické webové stránky generují až při jejich otevření. Interpreter PHP načte jednotlivé prvky požadované webové stránky z různých databází pomocí proměnných a zkompiluje je do přizpůsobené HTML stránky, která odpovídá konkrétnímu požadavku.

Výhody tohoto přístupu jsou zřejmé. Při úpravách prvků webové stránky (např. v zápatí) není nutné provádět ruční úpravy na každé jednotlivé podstránce. Stačí aktualizovat odpovídající záznam v databázi. Výsledkem je, že revize se automaticky aplikují na všechny webové stránky, které obsahují příslušná data jako proměnné. Pokud je proměnná definována ve skriptu vícekrát, nová definice přepíše předchozí. Následující echo vždy vypisuje aktuální hodnotu proměnné.

<?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ázek: Overwriting variables
The value John Doe is overwritten with the value Max Mustermann

V příkladu kódu byla proměnné $author nejprve přiřazena hodnota John Doe a poté nahrazena hodnotou Max Mustermann.

Nyní se podívejme na uvozovky. Na rozdíl od řetězců nemusí být jednotlivé proměnné uzavřeny v uvozovkách:

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

Výjimkou je případ, kdy je třeba proměnnou použít v řetězci. V takovém případě použijte dvojité uvozovky (). Tím dáte interpretu PHP pokyn, aby prohledal řetězec pro proměnné a podle potřeby je nahradil odpovídajícími hodnotami. Řetězce uzavřené v jednoduchých uvozovkách () jsou interpretovány a vykreslovány jako prostý text, i když obsahují proměnné.

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

Možná se teď ptáte, co se stane, když uvozovky úplně vynecháte. V takovém případě PHP označí syntaktickou chybu.

Chybové zprávy a maskování

Pokud dojde k syntaktickým chybám, neexistuje platný kód PHP a interpret PHP vydá chybovou zprávu. To lze očekávat například v případě, že použijete příkaz echo s řetězcem bez uvozovek:

<?php
echo Hello World!;
?>
php

Chybové zprávy ve většině případů obsahují informace o tom, kde k chybě došlo, a poskytují důležité informace o tom, jak ji odstranit.

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

V aktuálním příkladu se předpokládá chyba v řádku 2 našeho programového kódu. Právě zde jsme vynechali uvozovky.

Syntaxové chyby se vyskytují také v případě, že chcete jako text vypsat znaky, které jsou v PHP spojeny s konkrétní úlohou. Příkladem je uvozovka (). Takové znaky lze v PHP vypsat jako text pouze tehdy, pokud interpretu sdělíte, že inherentní funkce znaku byla neutralizována. V případě jednoduchých uvozovek existují dva způsoby, jak toho dosáhnout. Jednoduché uvozovky můžete uzavřít do dvojitých uvozovek nebo je můžete zamaskovat pomocí předřazeného zpětného lomítka (\):

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

Kombinace jednoduchých a dvojitých uvozovek je také schůdným přístupem:

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

Avšak ne tento pravopis:

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

Mezery mezi uvozovkami byly do příkladů vloženy z důvodu lepší čitelnosti.

Operátory zřetězení

Chcete-li ve skriptu PHP současně vypsat více proměnných, můžete využít dosud nabyté znalosti a postupovat následovně:

<?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

Jednoduše napište obě proměnné do řetězce v uvozovkách spolu se zbytkem textu, který má být vypsán. PHP automaticky rozpozná proměnné podle znaku dolaru ($) a vloží příslušné hodnoty.

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

Mezi programátory je však tento postup považován za nečistý. Existuje programátorské pravidlo, že proměnné by neměly být součástí řetězce. Jedním z důvodů je to, že mnoho programovacích jazyků vyžaduje toto oddělení. Ještě důležitější je, že PHP také vyžaduje oddělení řetězce a proměnné při práci s voláním funkcí nebo složitějšími proměnnými. Z tohoto důvodu je nejlepší je oddělit i v prostém textovém výstupu, i když to v tomto případě není nezbytně nutné.

Při práci s proměnnými budete vždy muset pracovat s několika prvky, které je třeba při výstupu zřetězit. V jazyce PHP se k tomuto účelu používá operátor zřetězení (.). Pokud je kód naprogramován „čistě“, měl by vypadat 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ázek: Connecting strings and variables with concatenation operators
Concatenation operators connect strings and variables

Zde máme tři řetězce a dvě proměnné, které byly spojeny do jednoho řetězce.

Řetězec1 Proměnná1 Řetězec2 Proměnná2 Řetězec3
’<h1>Hello World!</h1> <p>Tato dynamická webová stránka byla vytvořena ’ . $author1 . ’ a ’ . $author2 . ’.</p>’

Je důležité zmínit, že operátor zřetězení spojuje řetězce nebo proměnné bez vložení mezer. Pokud je mezera zamýšlena, musí být explicitně zahrnuta do uvozovek v řetězci, jak je ukázáno v příkladu.

Programátoři používají operátor zřetězení nejen ke kombinování řetězců a proměnných pro textový výstup, ale také k rozšiřování proměnných. Následující příklad ilustruje, jak toho lze dosáhnout:

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

Chcete-li rozšířit hodnotu proměnné, definujte ji znovu, ale před znaménko rovnosti vložte spojovací operátor tečku (.). Toto je běžný zkrácený zápis pro $example = $example . ‘world’.

PHP připojí novou hodnotu k dříve definované hodnotě. Pokud chcete mezi oběma hodnotami mezeru, napište ji na konec prvního řetězce, jako v příkladu.

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

Vložení PHP do HTML

V zásadě se interpret PHP zajímá pouze o kód, který se nachází mezi otevíracím a zavíracím tagem PHP:

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

Interpreter ignoruje všechny zbývající části dokumentu a předává je webovému serveru beze změn. Výsledkem je, že kód PHP lze podle potřeby hladce začlenit do dokumentů HTML, například při vytváření šablon pro systémy správy obsahu. Je velmi důležité ukládat HTML dokumenty obsahující kód PHP s příponou PHP. V opačném případě bude dokument zobrazen přímo ve webovém prohlížeči, aniž by prošel předběžným zpracováním interpretem PHP. V takovém případě by byl kód viditelný jako text na webové stránce.

Interpret PHP si můžete představit jako líného kolegu webového serveru, který pracuje pouze tehdy, když je k tomu výslovně vyzván, např. otevřením PHP tagu.

Chcete-li kombinovat HTML a PHP, napište svou HTML stránku v klasické struktuře dokumentu a uložte ji s příponou souboru .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

Nyní přidejte do svého HTML dokumentu skript PHP. Ujistěte se, že je celý kód uvnitř značek 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 případě jsme spojili jazykovou konstrukci echo s funkcí PHP date(), aby se aktuální datum a čas zobrazily jako text na straně serveru. Parametr funkce určuje preferovaný formát, který je označen jako řetězec:

d.m.Y H:i:s = den.měsíc.rok hodina:minuta:sekunda.

Když webový prohlížeč požádá o takový soubor, interpret PHP nejprve spustí skript a vloží aktuální čas jako text do dokumentu HTML. Následně webový server tento dokument odešle a ten se poté zobrazí v prohlížeči jako webová stránka.

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

Funkce komentáře PHP

Podobně jako v kódu HTML můžete i v kódu PHP zanechávat komentáře. Komentáře ve zdrojovém kódu jsou interpretem PHP ignorovány, pokud dodržují syntaktická pravidla. PHP nabízí tři různé metody pro vkládání komentářů .

Chcete-li označit celý řádek jako komentář a tím jej vyloučit z interpretace, můžete použít buď hashtag (#) nebo dvě po sobě jdoucí lomítka (//). Obě možnosti jsou použity v následujícím příkladu 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áře zelenou barvou. Na rozdíl od komentářů v HTML se textové části označené jako komentáře v prostředí skriptu nedostanou do webového prohlížeče. Tento rozdíl vzniká proto, že interpret PHP je již během provádění skriptu ignoruje.

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

Kromě toho můžete vkládat komentáře, které se rozkládají na několik řádků. Za tímto účelem označte začátek komentáře lomítkem následovaným hvězdičkou (/*) a konec hvězdičkou následovanou lomítkem (*/).

<?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

Takové komentáře nejsou analyzovány a nezobrazují se na webových stránkách.

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

Programátoři používají komentáře ke strukturování zdrojového kódu svých skriptů, k zanechání poznámek pro pozdější úpravy nebo k přidání interních informací do sestavení, jako je autor nebo datum. Komentáře jsou volitelné a měly by být používány střídmě, aby byla zajištěna dobrá čitelnost zdrojového kódu.

Počítání s proměnnými

V našem tutoriálu PHP jste se již setkali s proměnnými, které obsahují především řetězcové hodnoty. Nyní se podíváme na proměnné představující celá čísla nebo desetinná čísla. Pokud proměnné ukládají číselné hodnoty, PHP umožňuje s nimi provádět výpočty. Začněme sčítáním dvou celých čísel:

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

Nejprve přiřadíme celá čísla 237 a 148 proměnným $number1 a $number2 a poté definujeme proměnnou $result. Ta slouží k uložení součtu proměnných $number1 a $number2. Pro tuto operaci použijeme aritmetický operátor +(plus). Nakonec vypisujeme součet jako text pomocí jazykové konstrukceecho. Pamatujte, že při přiřazování číselných hodnot proměnným nemusíte používat uvozovky.

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

Následující příklad kódu ukazuje výběr matematických výpočtů, které lze provádět na straně serveru pomocí PHP. Použité operátory PHP odpovídají z větší části standardním matematickým symbolům.

Aritmetický operátor Operace Výsledek
$číslo1 + $číslo2 Sčítání Součet $číslo1 a $číslo2
$číslo1 - $číslo2 Odčítání Rozdíl $číslo1 a $číslo2
$číslo1 *$číslo2 Násobení Součin $číslo1 a $číslo2
$číslo1 / $číslo2 Dělení Podíl $čí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ázek: Calculating with variables
Arithmetic operations at a glance

Pro složité výpočty lze v jednom skriptu kombinovat různé aritmetické operace:

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

Interpreter PHP určí hodnoty proměnných a vypočítá:

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

Funkce sqrt() vypočítá druhou odmocninu parametru v závorkách. Platí klasické pořadí operátorů v matematice: tečka před pomlčkou. Příkaz echo vypíše výsledek jako řetězec pro webový prohlížeč.

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

PHP také nejprve vyhodnocuje výrazy v závorkách. Tentokrát budeme pracovat s čísly s plovoucí desetinnou čárkou:

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

Stejně jako všechny běžné programovací jazyky umožňuje PHP operátorům zvyšovat nebo snižovat číselné hodnoty o hodnotu 1. Rozlišuje se mezi operátorem před zvýšením, operátorem před snížením, operátorem po zvýšení a operátorem po snížení.

Provoz Operátor Výsledek
Předinkrementace ++$číslo Operátor ++ inkrementuje hodnotu proměnné $číslo. Hodnota se zvýší o 1. Výsledek se vrátí jako nová hodnota $číslo.
Předběžné snížení –$number Operátor dekrementuje hodnotu proměnné $number. Hodnota se sníží o 1. Výsledek je vrácen jako nová hodnota $number.
Post-inkrement $number Nejprve se vrátí aktuální hodnota $number a poté se zvýší o 1.
Post-dekrement $number– Nejprve se vrátí aktuální hodnota $number a poté se sníží o hodnotu 1.

Nejprve si ukážeme, jak provádět aritmetické operace s operátory inkrementu a dekrementu, a to na příkladu s preinkrementem. Následující skript inkrementuje hodnotu proměnné $number o 1, uloží novou hodnotu do proměnné $result a poté vypisuje její hodnotu jako řetězec:

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

Pokud zvýšíte hodnotu 0 o 1, dostanete výsledek 1.

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

Pro výpočet předběžného snížení proměnné $number použijeme stejné skripty, ale zaměníme operátor předběžného zvýšení (++) za operátor předběžného snížení ():

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

Zde snížíme hodnotu proměnné $number o 1 a dostaneme výsledek -1.

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

Nárůst hodnoty před a po výstupu (před vs. po…) lze demonstrovat pomocí následujícího 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 obou případech dostaneme stejný výsledek. Při předběžném inkrementu se hodnota x zvýší před výstupem v řádku 3, zatímco při následném inkrementu se zvýší po výstupu v řádku 5.

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

Jak používat superglobální proměnné $_GET a $_POST

Nyní jste se seznámili se základy jazyka PHP. Umíte pracovat s proměnnými, řetězit a provádět výpočty. Dále si ukážeme klíčovou roli proměnných ve skriptech.

Důležitou funkcí skriptovacích jazyků je jejich schopnost vyhodnocovat uživatelské vstupy a přenášet hodnoty do jiného skriptu. PHP pro přenos dat využívá superglobálníproměnné $_GET a $_POSTpředdefinované systémové proměnné dostupnéve všech oblastech. Jako asociativní pole (datová pole) ukládají*$_GET a $_POST* sadu proměnných ve formě řetězců v proměnné.

PHP pole lze přirovnat ke skříňce s více zásuvkami. Každá z těchto zásuvek poskytuje prostor pro ukládání dat. Aby byl obsah každé zásuvky přehledný, označíte je názvem proměnné. V závislosti na typu pole může být tento identifikátor indexem nebo klíčem. V indexovaných polích přiřadíte každé zásuvce číselný index, zatímco v asociativních polích označíte zásuvky pomocí klíče založeného na řetězci.

Superglobální proměnné $_GET a $_POST zahrnují soubor proměnných reprezentovaných jako klíče, které umožňují přístup k odpovídajícím hodnotám. Podrobněji se tímto tématem budeme zabývat při podrobném zkoumání superglobálních proměnných $_GET a $_POST.

Přenos dat přes $_GET

Superglobální proměnná $_GET představuje pole proměnných, které jsou předávány skriptu PHP pomocí URL.

Pokud trávíte čas na blozích,v internetovýchobchodech a internetových fórech, možná jste si všimli některých podivných URL adres. Obvykle jsou strukturovány podle následujícího schématu:

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

Pro blog by schéma mohlo vypadat takto:

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

Rozložení takové URL adresy je relativně jednoduché. Na webovém serveru s doménou example-blog.com se nachází soubor s názvem index.php. Tento soubor se používá k vytváření dynamických webových stránek a obvykle obsahuje kód HTML a PHP spolu s odkazy na externí šablony a styly – v podstatě všechny komponenty potřebné pro zobrazení webové stránky.

Přidání id=1do URL adresy je běžný způsob, jak zjistit, zda je webová stránka dynamická. Najdete jej za otazníkem (?) v URL adrese. Tato součást se nazývá HTTP dotazový řetězec a obsahuje proměnnou (id) a hodnotu (1), které jsou spojeny rovnítkem (=). Parametry URL tohoto typu se používají k generování dynamických webových stránek, načítání obsahu databáze a spouštění příslušných šablon.

Dynamické webové stránky umožňují oddělit obsah od prezentace. Ačkoli soubor index.php obsahuje informace o struktuře webové stránky, je třeba jej ještě naplnit obsahem. Ten je obvykle uložen v databázi a lze k němu přistupovat pomocí parametrů v řetězci HTTP dotazu. V příkladu předává URL souboru index.php parametr id=1. Ten určuje, který obsah má být načten z databáze a vložen do souboru index.php. V kontextu blogu by to mohlo být ID článku, v případě fóra konkrétní příspěvek. V případě internetového obchodu by to mohl být konkrétní produkt.

Pokud URL obsahuje více než jeden parametr, jsou tyto parametry spojeny znakem ampersand (&).

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

Níže vám ukážeme, jak používat $_GET. Pro tento příklad není nutné používat databázi. V následujícím skriptu používáme superglobální proměnnou $_GET k načtení hodnot proměnnýchfirstnameandlastname z HTTP dotazového řetězce a zapíšeme je do proměnných PHP $variable1 a $variable2:

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

Skript je volán následující URL adresou:

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

Byly předány parametryfirstname=Johnandlastname=Doe. Výstup hodnot se provádí stejně jako předtím pomocí jazykové konstrukce echo.

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

Přenos dat pomocí $_GET nevyhnutelně vede k tomu, že přenesená data jsou viditelná v adresním řádku. To znamená, že předané parametry lze vysledovat. Výhodou je, že proměnné lze ukládat v hypertextových odkazech. Kromě toho mají uživatelé možnost ukládat URL včetně HTTP dotazového řetězce jako záložky ve svém prohlížeči.

Skutečnost, že parametry GET jsou uvedeny v prostém textu v adrese URL, však činí tuto metodu nekompatibilní s přenosem citlivých dat, jako jsou data generovaná online formuláři. Kromě toho je množství dat, které lze předat pomocí $_GET, omezeno maximální délkou adres URL.

Tato omezení lze obejít pomocí HTTP metody POST. Data předaná touto metodou lze najít v superglobální proměnné $_POST.

Přenos dat přes $_POST

Zatímco v metodě GET jsou data předávána jako parametr URL, v metodě $_POST dochází k přenosu dat v těle HTTP požadavku. To umožňuje předávat i velké objemy dat z jednoho skriptu do druhého.

Hlavním polem použití metody HTTP POST je přenos dat z HTML formulářů. Ukážeme si to na příkladu přihlášení k odběru newsletteru.

K tomu vytvořte nový soubor PHP s názvem page1.php a zkopírujte následující 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 prvek <form> se používá k vytváření formulářů. Počáteční značka obsahuje dva atributy:method a action. Atributem method definujete způsob přenosu, v tomto případě HTTP-POST. V atributu action uložíte URL skriptu, který přijímá všechna data zadaná do následujících vstupních polí. Příklad ukazuje HTML formulář se třemi vstupními prvky (input type=“text “) a tlačítkem pro odeslání (input type=“submit “). Soubor page2.php je definován jako příjemce dat.

Pro ilustraci přenosu dat pomocí $_POST použijeme jednoduchý skript k vyhodnocení dat formuláře, který uloží odeslané hodnoty jako proměnné PHP a vygeneruje je v textové podobě. K tomu vytvořte soubor page2.php a vložte do něj následující 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 oba soubory PHP do složky htdocs na testovacím serveru a ve webovém prohlížeči otevřete stránku page1.php z následující adresy URL: http://localhost/page1.php. V prohlížeči se nyní zobrazí interaktivní webové rozhraní HTML formuláře.

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

Zadejte jakékoli přihlašovací údaje a stiskněte tlačítko Odeslat, aby se proměnné přenesly z jednoho skriptu do druhého. Jakmile potvrdíte vstupy na stránce page1.php, budete okamžitě přesměrováni na stránku page2.php. V okně prohlížeče se zobrazí výsledek provedení skriptu na základě odeslaných dat.

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

Uživatelské vstupy zachycené prostřednictvím vstupních polí stránky page1.php budou načteny stránkou page2.php prostřednictvím:

$_POST["input field name"]

Řádek $firstname = $_POST[„firstname“] načte vstup v poli firstname a uloží jej do proměnné $firstname. Proměnná $firstname může být následně vypsána jako řetězec pomocí příkazu echo.

Jak používat srovnávací operátory PHP a konstrukci IF

Dosud jsme definovali proměnné, předávali je z jednoho skriptu do druhého a vypisovali je jako řetězce. V dalším kroku se naučíte vázat provádění fragmentů kódu na určité podmínky.

Jazyková konstrukce if vám umožňuje psát skripty tak, aby se příkazy prováděly pouze v případě, že je splněna vámi definovaná podmínka, například zadání správného hesla.

Podmínky jsou v PHP definovány podle následujícího základního rámce:

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

Zní takto: Pokud je splněna podmínka uvedená ve výrazu, bude příkaz proveden. Podmínka je vždy splněna, pokud konstrukce if vrátí výsledek TRUE (pravda). V opačném případě je považována za FALSE (nepravda). V takovém případě bude příkaz přeskočen.

Konstrukce if obvykle kontroluje, zda hodnota proměnné odpovídá tomu, co bylo definováno v podmínce. Tato řídicí struktura je obvykle realizována na základě srovnávacích operátorů.

Srovnávací operátory

Srovnávací operátory se používají při formulování podmínek, aby se dva argumenty dostaly do logického vztahu, který lze vyhodnotit jako pravdivý (TRUE) nebo nepravdivý (FALSE). Když se srovnávací operátory používají v řídicích strukturách PHP, aplikují se na dvě proměnné ve výrazu konstrukce if:

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

Z jazykového hlediska je kontrolní struktura následující: pokud je proměnná $a rovna proměnné $b, pak se provedou příkazy definované v příkazu.

Porovnávací operátory PHP vycházejí z programovacího jazyka C a jejich zápis se značně liší od klasických matematických symbolů. Přehled najdete v následující tabulce.

Srovnávací operátor Popis Podmínka
== rovná se Podmínka je splněna, pokud $a a $b mají stejnou hodnotu.
=== je identický Podmínka je splněna, pokud $a a $b mají stejnou hodnotu a patří ke stejnému datovému typu. To lze ilustrovat na příkladu, kde je celé číslo (1) porovnáno s řetězcem („1”): 1 == „1“ //TRUE 1 === „1“ //FALSE Pro podmínky, které vyžadují, aby byly dvě proměnné stejné, je nejlepší vždy použít relační operátor === (je identický).
!= je nerovné Podmínka je splněna, pokud $a a $b mají nerovné hodnoty.
! není identické Podmínka je splněna, pokud $a a $b mají nerovné hodnoty nebo patří k různým datovým typům.
`< * je menší než Podmínka je splněna, pokud hodnota* $a je menší než hodnota $b*.
*>` je větší než Podmínka je splněna, pokud je hodnota* $a větší než hodnota $b*.
<= je menší nebo rovno Podmínka je splněna, pokud je hodnota $a menší než hodnota $b nebo pokud $a a $b mají stejnou hodnotu.
>= je větší nebo rovno Podmínka je splněna, pokud je hodnota $a větší než hodnota $b nebo pokud $a a $b mají stejnou hodnotu.

Následující skript by měl tuto kontrolní strukturu objasnit. Porovnávají se dvě celá čísla. Používá se srovnávací operátor < (je menší):

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

Definujeme proměnné $number1 a $number2 a přiřadíme jim hodnoty10 a 20. Poté nastavíme podmínku: pokud je $number1 menší než $number2, měl by být vypsán řetězec uvedený v příkazu echo.

Výsledek provedení skriptu obsahuje odpověď: 10 je menší než 20. Konstrukce if vrací výsledek TRUE. Podmínka je splněna.

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

Chcete-li definovat příkazy, které se provedou, pokud není splněna podmínka, přidejte do příkazu if jazykovou konstrukci else a vytvořte tak příkaz if-else v jazyce PHP:

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

Tento skript kontroluje, zda podmínka a vrací hodnotu TRUE nebo FALSE. Pokud je podmínka a splněna (TRUE), provede se příkaz b. Pokud podmínka a není splněna (FALSE), příkaz b se přeskočí a místo něj se provede příkaz c.

Rozšiřme náš skript o konstrukci else a zaměňme srovnávací operátor < (je menší) za == (je rovno):

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

Tentokrát konstrukce if vrací hodnotu FALSE. Hodnota proměnné $number1 není rovna hodnotě $number2. Podmínka není splněna. Proto se příkaz uvedený pod if neprovede, ale provede se příkaz definovaný pod else.

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

Pro spojení provedení fragmentu kódu se dvěma stejnými hodnotami se v PHP používá dvojité rovnítko (==). Jednoduché rovnítko (=) se používá pro přiřazení hodnot proměnným.

Podmínky můžete negovat tak, že před výraz umístíte vykřičník (!).

<?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 příklad zdůrazňuje podmínku $number1 == $number2 a její negaci. !($number1 == $number2) je ekvivalentní ($number1 != $number2).

Praktickým příkladem použitíifandelse je dotaz na heslo založený na HTML formuláři. Můžeme to simulovat pomocí našich PHP souborů page1.php a page2.php.

Otevřete soubor page1.php a vložte následující kód:

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

Struktura odpovídá dříve vytvořenému formuláři. Tentokrát však stačí jedno vstupní pole: dotaz na heslo. Stejně jako předtím se uživatelský vstup předává skriptu page2.php.

Toto můžeme přizpůsobit pomocí následujícího kódu tak, aby se zadávané heslo porovnávalo s uloženým heslem:

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

Kód lze vysvětlit následovně: nejprve přiřadíme hodnotu proměnné $password v řádku 2, kterou načteme pomocí metody HTTP POST. Poté definujeme následující řídicí strukturu: konstrukce if v řádku 3 by měla zkontrolovat, zda hodnota proměnné $password odpovídá řetězci qwertz123. Pokud ano, vypisuje se řetězec The password was correct (Heslo bylo správné ). Pokud if vrátí výsledek FALSE, použije se else v řádku 7 a vypisuje se řetězec The password was incorrect (Heslo bylo nesprávné).

Nyní voláme skript page1.php prostřednictvím URL http://localhost/page1.php.

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

Prohlížeč zobrazí webový náhled našeho HTML formuláře pro zadání hesla. Zadáme heslo quertz123 definované ve skriptu page2.php a klikneme na tlačítko Odeslat.

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

Webový prohlížeč nás automaticky přesměruje na stránku page2.php, zatímco kontrolní struktura if porovná náš vstup s uloženým heslem. Dojde k výsledku*„qwertz123 == qwertz123* je *TRUE“*a poté se zobrazí řetězec Heslo bylo správné.

Vyzkoušejte si sami, co se stane, když do vstupního pole zadáte jiné heslo.

Logické operátory

Podmínky, které definujete pomocí srovnávacích operátorů ve výrazu konstrukce if, lze v případě potřeby kombinovat s dalšími podmínkami ve stejném výrazu. PHP využívá logické operátoryAND a OR.

Úzké pouto Slabé pouto Popis
&& AND Obě podmínky spojené s operátorem musí být PRAVDIVÉ.
*\ \ * OR Pouze jedna ze dvou podmínek spojených s operátorem musí být TRUE.

Pro kombinování podmínek můžete v PHP použít logické operátory s pevnou vazbou a slabou vazbou. V praxi použití pouze jednoho z těchto dvou zápisů nepřinese žádný znatelný rozdíl. Pokud zkombinujete oba zápisy, zjistíte, že OR a || jsou silněji vázané než AND a OR. Také AND a&& jsou silněji vázané než OR a ||. To je srovnatelné s pořadím operátorů známým z matematických operátorů (např. tečka před pomlčkou: *je silněji vázaná než +).

Praktickým příkladem je dotaz na heslo. Přihlašovací údaje obvykle zahrnují tajné heslo a uživatelské jméno. Přihlášení je úspěšné pouze v případě, že oba údaje odpovídají údajům uloženým v systému.

Nyní znovu otevřeme náš formulář pro dotaz na heslo v souboru Page1.php a přidáme vstupní pole pro uživatelské jméno:

<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 dalším kroku musíme upravit řídicí strukturu konstrukce if. Pomocí logického operátoru AND propojíme podmínku pro dotaz na heslo s podmínkou pro dotaz na uživatelské jméno.

<?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šem skriptu page2.php jsou hodnoty prousername a password získány a uloženy v proměnných $username a $password. Výraz v konstrukci if nyní obsahuje dvě podmínky spojené logickým operátorem AND. Obě podmínky musí být splněny (username==„John Doe“a $password==„qwertz123“**),aby ifvrátilvýsledek TRUE.

Při načítání uživatelského jména z vstupního pole username jej můžeme přímo použít v textovém výstupu pomocí příkazu echo. Za textem Welcome to the internal area následuje hodnota v proměnné $username. Pokud není splněna ani jedna z těchto dvou podmínek, textový výstup bude: Access failed.

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

Logické operátory lze libovolně kombinovat. Mějte na paměti, že AND má vyšší prioritu než OR. Stejně jako v matematických rovnicích umožňuje PHP používat závorky k označení priority.

Jak používat smyčky (while, for)

Někdy musí skript projít určitou částí kódu několikrát, než provede zbytek programového kódu. Programovací jazyky k tomu používají koncept smyček. V PHP existují tři typy smyček:

  • cyklywhile
  • cyklydo-while
  • for smyčky

while smyčky

Smyčka while je nejjednodušší typ smyčky v PHP. Zde je její základní struktura:

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

Smyčka while říká PHP, aby prováděl podprogramy, dokud je splněna podmínka while. K tomu interpret PHP zkontroluje podmínku na začátku každého průchodu smyčkou. Provádění podřízeného kódu je zastaveno pouze tehdy, když podmínka while již není splněna.

Tento princip lze ilustrovat pomocí jednoduchého skriptu pro počítání:

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

Koncept inkrementace byl představen v části Výpočty s proměnnými tohoto tutoriálu. V následujícím skriptu na tomto konceptu stavíme, ale s malou změnou. Tentokrát použijeme operátor post-inkrementace. Ten zvyšuje hodnotu celočíselné proměnné $number o 1 po každé iteraci smyčky, ihned po výstupu textu echo. Podmínku pro smyčku while nastavíme takto: $number je větší nebo rovno 10. V důsledku toho bude příkaz echo prováděn opakovaně, dokud $number nepřekročí hodnotu 10.

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

Výsledkem provedení skriptu je řetězec, který vytiskne hodnotu proměnné $number pro každý průchod smyčkou před jejím inkrementací. Výsledkem je, že skript počítá od 1 do 10 a přestane provádět kód, jakmile podmínka while přestane být splněna.

cyklydo-while

Struktura smyčky do-while je podobná struktuře smyčky while. Jediný rozdíl spočívá v tom, že podmínka není kontrolována na začátku každého průchodu smyčkou, ale pouze na konci. Základní schéma smyčky do-while je následující:

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

Naprogramovaný jako smyčka do-while by předchozí skript vypadal takto:

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

V tomto případě zůstává výsledek stejný. Zvláštností smyčky do-while je to, že se provede alespoň jednou, i když podmínka není splněna v žádném průchodu smyčkou.

pro smyčky

Obecně má smyčka for v PHP skriptu stejnou funkci jako smyčka while. Na rozdíl od smyčky while jsou však počáteční hodnota, podmínka a příkaz napsány na jednom řádku, místo aby byly rozloženy na tři nebo více řádků. Základní struktura smyčky for je:

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

Výše uvedený příklad lze zapsat kompaktněji jako smyčku for:

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

Nejprve je pro proměnnou $number definována hodnota 1. Poté PHP zkontroluje, zda je splněna podmínka $number <= 1. Pokud ano, smyčka pokračuje a jsou provedeny příkazy pod smyčkou (v tomto případě příkaz echo). Poté jsou provedeny kroky smyčky. V tomto kontextu je volba mezi předběžným nebo následným inkrementem irelevantní, protože tento krok se vždy provádí před výstupem. Po dokončení kroku smyčky se spustí další iterace smyčky.

V cyklu for jsou počáteční hodnota, podmínka a krok cyklu považovány za volitelné komponenty. Teoreticky jsou možné i prázdné cykly. Takové cykly by však byly nadbytečné.

Je v podstatě na vás, zda budete psát své skripty PHP s cyklem for nebo while. Existuje však argument pro volbu cyklů for: při použití cyklů for máte lepší přehled o datech rámce cyklu. Tím se vyhnete riziku, že omylem napíšete nekonečný cyklus, který bude běžet, dokud se nevyčerpá paměť interpretu. S odkazem na předchozí příklad k tomu může dojít, když zapomenete zvýšit hodnotu proměnné $number.

Pokud však má být smyčka provedena alespoň jednou, bez ohledu na podmínku, je vhodnější použít smyčku do-while.

příkazybreakandcontinue

Provedení smyčky while, do-while nebo for může být ovlivněno příkazybreak a continue. Příkaz break slouží k přerušení toku smyčky v libovolném bodě a příkaz continue k přeskočení jednoho průchodu smyčkou. Oba příkazy jsou vázány na podmínku pomocí příkazu if. Následující příklad ukazuje náš skript pro počítání s příkazem 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

Ve smyčce for jsme definovali, že hodnota proměnné $number by měla být v každém cyklu smyčky zvýšena o hodnotu 1, počínaje hodnotou 1, dokud proměnná nedosáhne hodnoty 10. Tuto smyčku můžeme předčasně zastavit pomocí příkazu break, jakmile $number dosáhne hodnoty 5. Jazyková konstrukce echo vypíše pouze čísla 1 až 4.

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

Chcete-li přeskočit výstup pátého kola, ale nezastavit celý tok smyčky, nahradíme příkaz break příkazem continue:

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

Místo číslice 5 PHP vypisuje textový řetězec Přeskočíme číslo 5! definovaný pod if.

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

Jak provádět operace se soubory

Dynamický webový obsah je strukturován na principu oddělení obsahu a prezentace. K dosažení tohoto cíle nabízejí skriptovací jazyky jako PHP celou řadu funkcí, které usnadňují hladkou integraci obsahu z externích datových zdrojů do centrálních šablonových souborů. V praxi se těmito datovými zdroji obvykle rozumí databáze spravované pomocí systémů jako MySQL. Jak to funguje, se dozvíte v našem tutoriálu MySQL.

Je také možné zahrnout data ze souborů. Níže vám ukážeme, jak načíst soubory jako řetězec do skriptu PHP a uložit textový výstup ze skriptu do souborů.

Čtení souborů

Pro čtení obsahu souboru má PHP k dispozici různé funkce. Z nich jsou pro daný úkol zvláště vhodné funkce file() a file_get_contents(). Zatímco funkce file_get_contents() načte celý obsah souboru do řetězce, funkce file() uloží obsah jako pole. Každý prvek pole odpovídá jednomu řádku souboru. Použití funkce file() usnadňuje výstup každého řádku samostatně.

Operace s PHP soubory si ukážeme na příkladu textového souboru example.txt, který umístíme do složky htdocs našeho testovacího serveru. Soubor obsahuje čtyři řádky fiktivního 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.

Nejprve musíme načíst celý soubor jako řetězec. K tomu musíme přiřadit název příslušného souboru jako parametr funkci file_get_contents():

file_get_contents('example.txt')

Nyní máme možnost pracovat s načteným řetězcem. Můžeme jej například přiřadit proměnné a zobrazit jako text ve webovém prohlížeči:

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

V prohlížeči vidíme, že textový řetězec je zobrazen bez odstavců. Zlomky řádků původního souboru nejsou viditelné. Důvodem je to, že webový prohlížeč interpretuje textový výstup skriptu jako HTML kód. Zlomky řádků definované v textových editorech se ztratí.

Chcete-li zachovat původní strukturu, máte několik možností. Můžete ručně přidat HTML kód pro zalomení řádku (br) do zdrojového souboru pomocí funkce vyhledat a nahradit, obklopit obsah souboru znaky <pre>, nastavit vlastnost CSS white-space: pre -wrap nebo použít funkci nl2br(), která signalizuje PHP, aby automaticky převedlo zalomení řádků (nové řádky) na HTML zalomení řádků (breaks). Zde je kód:

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

Pokud je konstrukce echo language použita v kombinaci s nl2br(), PHP vloží před každý nový řádek HTML znak konce řádku.

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

Pro výstup jednotlivých řádků souboru můžete použít funkci file(). Ta načte soubor, očísluje všechny řádky počínaje číslem 0 a uloží jejich obsah jako prvky pole. Při použití v našem příkladu dostaneme následující výsledek:

[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] = Dokud je to možné, ultricies nec, pellentesque eu, pretium quis, sem

Chcete-li pomocí příkazu echo vypsat příslušný obsah, stačí zadat požadované číslo řádku. Například následující skript nám jako výstup pro prohlížeč poskytne pouze první řádek souboru example.txt:

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

Zapsat soubory

PHP jde nad rámec pouhého čtení souborů a umožňuje vám také snadno číst, vytvářet a upravovat soubory.

Použití funkce file_put_contents() je toho typickým příkladem. Vyžaduje pouze dva parametry: název cílového souboru a data, která mohou být řetězcem nebo polem. V níže uvedeném skriptu je vytvořen nový soubor s názvem test.txt, který obsahuje řetězec This is a test!. Zahrnutí \r\n zajišťuje zalomení řádku v souboru.

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

Protože funkce file_put_contents neposkytuje žádný výstup pro prohlížeč, přidáme příkaz echo, který nám sdělí, jaká akce se provádí.

Pokud v cílové složce již existuje soubor se stejným názvem, bude přepsán. Tomu můžete zabránit nastavením parametru 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 funkce file_put_contents() s parametrem FILE_APPEND bude nový obsah připojen k existujícímu obsahu.

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

To, co PHP zapíše do cílového souboru, nemusí být nutně definováno ve skriptu. Alternativně můžete přenést obsah z jednoho souboru do druhého. Následující skript přečte obsah souboru example.txt a vloží jej do souboru 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ázek: 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.
Přejít do hlavního menu