PHP 7 – Praktický průvodce nejrozšířenějším skriptovacím jazykem pro web

Page 1

PHP 7

Praktický průvodce nejrozšířenějším skriptovacím jazykem pro web Nudné weby jsou statické. Zajímavé weby jsou dynamické. Pokud chcete začít pracovat s PHP, nejrozšířenějším skriptovacím jazykem pro web, tato kniha je určena právě vám. Její autor, David Sklar, vás provede všemi aspekty PHP, které jsou nezbytné k tomu, abyste mohli začít budovat dynamické webové stránky. Prozkoumáním funkcionalit a vylepšení obsažených v PHP 7 se dozvíte, jak například pracovat s webovými servery, databázemi a webovými službami. Na konci většiny kapitol pak naleznete praktická cvičení, která vám umožní otestovat si, jak moc dobře jste pochopili právě probíranou látku.

slevy, akce,

novinky

 Ladění  Testování: funguje váš program správně?  Užitečné praktiky softwarového inženýrství  Datum a čas  Správa balíků  Odesílání e-mailových zpráv  Frameworky  PHP na příkazovém řádku  Internacionalizace a lokalizace  Instalace a konfigurace PHP enginu  Řešení ke cvičením v knize

© pixabay.com (2938551)

Kapitoly obsažené v knize:  Orientace a první kroky  Data: práce s textem a s čísly  Logika: rozhodování a smyčky  Seskupování dat: práce s poli  Seskupování logiky: funkce a soubory  Data a logika dohromady: práce s objekty  Výměna informací: webové formuláře  Uchovávání informací: databáze  Práce se soubory  Zapamatování uživatelů: cookie a relace  Komunikace s jinými weby a se službami

Nechejte nám kontakt na novinky.zonerpress.cz a získáte další bonusy, slevy a jiné výhody.

DOPORUČENÁ CENA: 499 KČ KATALOGOVÉ ČÍSLO: ZRK1606

P R E S S

PHP 7

Praktický průvodce nejrozšířenějším skriptovacím jazykem pro web

David Sklar

David Sklar

Z O N E R

PHP 7

Praktický průvodce nejrozšířenějším skriptovacím jazykem pro web

E N C Y K L O P E D I E

ISBN 978-80-7413-363-3

Zoner Press tel.: 532 190 883 e-mail: knihy@zoner.cz www.zonerpress.cz ZONER software, a.s., Nové sady 18, 602 00 Brno

9 7 8 8 0 7 4 1 3 3 6 3 3

David Sklar


PHP 7 Praktický průvodce nejrozšířenějším skriptovacím jazykem pro web

David Sklar


LEARNING PHP David Sklar

© 2017 Zoner software, a.s. Authorized Czech translation of the English edition of Learning PHP ISBN 9781491933572 © 2016 David Sklar. This translation is published and sold by permission of O'Reilly Media, Inc., which owns or controls all rights to publish and sell the same. © 2017 Zoner software, a.s. Autorizovaný český překlad originálního anglického vydání Learning PHP ISBN 9781491933572 © 2016 David Sklar. Překlad je vydán a prodáván s výslovným povolením O'Reilly Media, Inc., který je vlastníkem veškerých práv na vydání i prodej tohoto titulu.

PHP 7 – Praktický průvodce nejrozšířenějším skriptovacím jazykem pro web Autor: David Sklar Copyright © ZONER software, a.s. Vydání první, v roce 2018. Všechna práva vyhrazena. Zoner Press Katalogové číslo: ZRK1606 ZONER software, a.s. Nové sady 18, 602 00 Brno Překlad: RNDr. Jan Pokorný Odpovědný redaktor: Miroslav Kučera Šéfredaktor: Ing. Pavel Kristián DTP: Miroslav Kučera Obálka: Mgr. Petr Bernát

Informace, které jsou v této knize zveřejněny, mohou byt chráněny jako patent. Jména produktů byla uvedena bez záruky jejich volného použití. Při tvorbě textů a vyobrazení bylo sice postupováno s maximální péčí, ale přesto nelze zcela vyloučit možnost výskytu chyb. Vydavatelé a autoři nepřebírají právní odpovědnost ani žádnou jinou záruku za použití chybných údajů a z toho vyplývající důsledky. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována ani distribuována žádným způsobem ani prostředkem, ani reprodukována v databázi či na jiném záznamovém prostředku či v jiném systému bez výslovného svolení vydavatele, s výjimkou zveřejnění krátkých částí textu pro potřeby recenzí. Tato publikace neprošla jazykovou úpravou. Veškeré dotazy týkající se distribuce směřujte na: Zoner Press ZONER software, a. s. Nové sady 18, 602 00 Brno tel.: 532 190 883 e-mail: knihy@zoner.cz www.zonerpress.cz Zdrojové soubory ke knize: http://soubory.zonerpress.cz/zrk1606

ISBN 978-80-7413-363-3


3

Stručný obsah Kapitola 1

Orientace a první kroky

15

Kapitola 2

Data: práce s textem a s čísly

31

Kapitola 3

Logika: rozhodování a smyčky

49

Kapitola 4

Seskupování dat: práce s poli

65

Kapitola 5

Seskupování logiky: funkce a soubory

87

Kapitola 6

Data a logika dohromady: práce s objekty

105

Kapitola 7

Výměna informací: webové formuláře

117

Kapitola 8

Uchovávání informací: databáze

151

Kapitola 9

Práce se soubory

181

Kapitola 10

Zapamatování uživatelů: cookie a relace

197

Kapitola 11

Komunikace s jinými weby a se službami

217

Kapitola 12

Ladění

233

Kapitola 13

Testování: funguje váš program správně?

247

Kapitola 14

Užitečné praktiky softwarového inženýrství

259

Kapitola 15

Datum a čas

265

Kapitola 16

Správa balíků

273

Kapitola 17

Odesílání e-mailových zpráv

277

Kapitola 18

Frameworky

281

Kapitola 19

PHP na příkazovém řádku

287

Kapitola 20

Internacionalizace a lokalizace

293

Dodatek A

Instalace a konfigurace PHP enginu

299

Dodatek B

Řešení ke cvičením v knize

307


4

Podrobný obsah Úvod

Kapitola 1

Kapitola 2

Kapitola 3

Kapitola 4

9

Orientace a první kroky

15

Místo PHP ve světě webu

15

Proč je PHP skvělé?

18

PHP v akci

19

Základní pravidla pro psaní PHP programů

25

Shrnutí kapitoly

29

Data: práce s textem a s čísly

31

Text

31

Čísla

40

Proměnné

42

Shrnutí kapitoly

46

Cvičení

47

Logika: rozhodování a smyčky

49

Hodnoty true a false

50

Rozhodování

51

Sestavování složitých rozhodnutí

53

Opakované vykonávání

59

Shrnutí kapitoly

61

Cvičení

62

Seskupování dat: práce s poli

65

Základy práce s poli

65

Procházení polí ve smyčce

69

Modifikování polí

75

Seřazení prvků pole

77

Vícerozměrná pole

81

Shrnutí kapitoly

84

Cvičení

85


5 Kapitola 5

Seskupování logiky: funkce a soubory

87

Deklarace a volání funkcí

88

Předávání argumentů do funkcí

89

Vracení hodnot z funkcí

92

Obor proměnných

96

Vynucování pravidel pro argumenty a návratové hodnoty

Kapitola 6

Kapitola 7

Kapitola 8

100

Spouštění kódu v jiném souboru

102

Shrnutí kapitoly

103

Cvičení

104

Data a logika dohromady: práce s objekty

105

Základy práce s objekty

106

Konstruktory

108

Indikace potíží s výjimkami

109

Odvozování podtříd

111

Viditelnost vlastností a metod

113

Jmenné prostory

114

Shrnutí kapitoly

116

Cvičení

116

Výměna informací: webové formuláře

117

Užitečné serverové proměnné

120

Přístup k parametrům formuláře

122

Zpracování formuláře funkcemi

124

Validace dat

126

Zobrazování výchozích hodnot

138

Dáme všechno dohromady

140

Shrnutí kapitoly

149

Cvičení

149

Uchovávání informací: databáze

151

Uspořádání dat v databázi

152

Připojení k databázovému programu

153

Vytvoření tabulky

155

Ukládání dat do databáze

157


6

Kapitola 9

Kapitola 10

Kapitola 11

Bezpečné vkládání dat formuláře

163

Kompletní formulář pro vkládání dat

164

Získávání dat z databáze

167

Změna formátu dodávaných řádků

171

Bezpečné získávání dat formuláře

172

Kompletní formulář pro získávání dat

175

Shrnutí kapitoly

179

Cvičení

180

Práce se soubory

181

Přístupová oprávnění k souboru

181

Čtení a zapisování celých souborů

182

Čtení a zapisování jen částí souborů

184

Práce se soubory CSV

187

Inspekce souborových oprávnění

189

Kontrola chyb

190

Ošetření externě dodaných názvů souborů

193

Shrnutí kapitoly

195

Cvičení

195

Zapamatování uživatelů: cookie a relace

197

Jak se pracuje s cookies

198

Aktivace relací

202

Ukládání a získávání informací

203

Konfigurace relací

206

Přihlašování a identifikace uživatele

208

Proč chtějí být setcookie() a session_start() na stránce úplně nahoře

214

Shrnutí kapitoly

215

Cvičení

216

Komunikace s jinými weby a se službami

217

Jednoduchý přístup k URL se souborovými funkcemi

217

Úplný přístup k URL s cURL

222

Obsluha API požadavků

228

Shrnutí kapitoly

231

Cvičení

232


7 Kapitola 12

Kapitola 13

Kapitola 14

Kapitola 15

Kapitola 16

Ladění

233

Kde se mají objevovat zprávy o chybách

233

Oprava chyb nalezených při rozboru

234

Inspekce dat programu

237

Ošetření nezachycených výjimek

243

Shrnutí kapitoly

244

Cvičení

245

Testování: funguje váš program správně?

247

Instalace PHPUnit

247

První unit test

248

Co testujete, izolujte

251

Vývoj řízený testy

254

Další informace o testování

256

Shrnutí kapitoly

256

Cvičení

257

Užitečné praktiky softwarového inženýrství

259

Řízení verzí

260

Sledování úloh

261

Různá prostředí a rozmisťování

261

Škálujte až nakonec

262

Shrnutí kapitoly

263

Datum a čas

265

Zobrazování data nebo času

265

Rozbor data nebo času

268

Výpočty s datem a s časem

270

Časová pásma

271

Shrnutí kapitoly

272

Správa balíků

273

Instalace Composeru

273

Jak se přidá nějaký balík do programu

273

Hledání balíků

275


8

Kapitola 17

Kapitola 18

Kapitola 19

Kapitola 20

Dodatek A

Dodatek B Rejstřík

Získání dalších informací o Composeru

275

Shrnutí kapitoly

276

Odesílání e-mailových zpráv

277

Swift Mailer

277

Shrnutí kapitoly

279

Frameworky

281

Laravel

282

Symfony

283

Zend Framework

284

Shrnutí kapitoly

286

PHP na příkazovém řádku

287

Psaní programů PHP pro příkazový řádek

287

Vestavěný webový server PHP

289

REPL v PHP

290

Shrnutí kapitoly

291

Internacionalizace a lokalizace

293

Manipulace s textem

294

Řazení a porovnávání

295

Lokalizace výstupu

296

Shrnutí kapitoly

298

Instalace a konfigurace PHP enginu

299

PHP u poskytovatele webového hostingu

299

Instalace PHP enginu

300

Změna konfiguračních direktiv PHP

301

Shrnutí dodatku

306

Řešení ke cvičením v knize

307 357


9

Úvod Nudné weby jsou statické. Zajímavé weby jsou dynamické – tj. jejich obsah se mění. S obří statickou HTML stránkou obsahující názvy, obrázky, popisy a ceny všech tisíců výrobků, které nabízí firma k prodeji, se pracuje obtížně, nehledě na to, že trvá věčnost, než se načte. Daleko prospěšnější je dynamický webový katalog produktů, v němž můžete vyhledávat a filtrovat produkty tak, že naráz vidíte jen šest, které vyhovují vašim kritériím z hlediska ceny a kategorie. Je to také rychlejší a je pravděpodobnější, že zákazník něco koupí. Programovací jazyk PHP umožňuje snadno vytvářet dynamické weby. Bez ohledu na to, co interaktivního chcete vytvořit, ať už to má být katalog produktů, blog, album fotografií nebo kalendář akcí, PHP je na každou takovou úlohu velmi dobře a dostatečně vybaven. A až dočtete tuto knihu, budete i vy dobře a dostatečně připravení pro budování dynamického webu.

Komu je kniha určena Tato kniha je vhodná pro různé skupiny lidí: Nadšence, kteří se chystají vytvořit interaktivní web pro sebe, pro svou rodinu, nebo pro nějakou ne-

ziskovou organizaci. Stavitele webů, kteří chtějí využít přípravu PHP, jakou poskytují ISP nebo poskytovatelé hostingu. Vývojáře nebo designéry, kteří potřebují napsat plugin nebo rozšíření pro nějaký populární software

běžící v PHP, jako jsou Drupal, WordPress nebo MediaWiki. Designéry stránek, kteří chtějí lépe komunikovat se svými spolupracovníky vývojáři. JavaScriptové profesionály, kteří chtějí vytvářet programy na straně serveru doplňující kód na straně

klienta. Programátory Perlu, Pythonu nebo Ruby, kteří se chtějí rychle seznámit s PHP. Kohokoli, kdo si chce přečíst přímočarý úvod oproštěný od žargonu do jednoho z nejoblíbenějších

programovacích jazyků určených pro budování interaktivních webů. PHP má dobrou křivku učení a přívětivou syntaxi. To z něho činí ideální vstupní bránu do programování pro webové profesionály s netechnickým vzděláním. Tato kniha o PHP 7 je určena nejen těm, kteří se o něj zajímají, jsou bystří, ale možná nemají odborné vzdělání tohoto druhu, ale i programátorům, kteří se dobře vyznají v nějakém jiném jazyku a chtějí se naučit PHP. Jestliže jste v programování úplnými nováčky a chtěli byste se pustit do svého prvního interaktivního webu, máte v rukách tu správnou knihu. Úvodní kapitoly poskytují vlídný úvod do syntaxe jazyka PHP a do základních témat počítačového programování tak, jak se aplikují v PHP. Jednoduše začněte knihu číst od úplného začátku a postupujte vpřed tempem, jaké vám vyhovuje. Jestliže už umíte programovat v nějakém jiném jazyku a začínáte pracovat na svém první projektu v PHP, můžete rovnou přejít do druhé části knihy a do první části se vracet jen tehdy, až vyvstane nějaká otázka ohledně syntaxe nebo když se budete chtít podívat, jak se v PHP udělá něco konkrétního. Kromě základní počítačové gramotnosti (tj. umět psát, přesouvat soubory a surfovat po webu) od vás budeme potřebovat jednu jedinou věc: vyznat se v HTML. Nemusíte být žádný expert, ale měli byste chápat, k čemu slouží značky, které se běžně vyskytují na webových stránkách – tedy například <html>, <head>, <body>, <p>, <a>, <br> a další. Pokud se v HTML nevyznáte, přijde vám vhod kniha HTML5 a CSS3 pro webové designéry z nakladatelství Zoner Press (www.zonerpress.cz/html5-a-css3-pro-webove-designery).


10

Co v knize najdete Kniha je navržena tak, abyste ji začali číst od začátku a četli kapitoly v pořadí, v jakém jsou v knize uvedeny. Téma probírané v dané kapitole totiž většinou vyžaduje pochopení látky probrané v předchozích kapitolách. Kapitoly 2 až 13 obsahují praktická cvičení, jimiž můžete otestovat, jak jste pochopili obsah dané kapitoly. Kapitola 1 poskytuje všeobecné základní informace o PHP, včetně toho, jak komunikuje s webovým prohlížečem a s webovým serverem. Také se zde ukazuje několik programů PHP, abyste si mohli udělat představu, jak vlastně programy napsané v PHP vypadají. Pokud teprve začínáte s programováním nebo s budováním dynamických webů, je velmi důležité, abyste si tuto kapitolu pečlivě přečetli. V dalších pěti kapitolách se pocvičíte v základních dovednostech spojených s programováním v PHP. Než můžete začít psát knižní romány, musíte něco vědět o gramatice a mít adekvátní slovní zásobu. A přesně tohle v těchto kapitolách dostanete. (Ničeho se ale neobávejte – naučíte se jen tolik gramatiky a slovní zásoby PHP, abyste mohli rovnou začít psát krátké prográmky, ne skvělé romány.) Kapitola 2 ukazuje, jak se pracuje s různými druhy dat, jako jsou texty a čísla. To je důležité, protože webové stránky, které jsou generovány programy PHP, vlastně nejsou ničím jiným, než velkými kusy textu. Kapitola 3 popisuje příkazy PHP, s nimiž mohou programy činit rozhodnutí. Tato rozhodnutí jsou duší "dynamiky" v dynamickém webu. Věci probírané v kapitole 3 ukazují, jak postupovat, když chcete například zobrazit pouze ty položky z nějakého katalogu výrobků, jejichž ceny spadají do cenového rozsahu, který specifikoval koncový uživatel prostřednictvím webového formuláře. Kapitola 4 je úvod do polí, což jsou kolekce jednotlivých čísel nebo textů. Pole se využívají při často vykonávaných činnostech v programech PHP, jako je zpracování parametrů odeslaného webového formuláře nebo zkoumání informací získaných z databáze. Až budete psát složitější programy, zjistíte, že jisté úlohy chcete opakovat. Opětovnému využívání částí programů pomáhají funkce probírané v kapitole 5. Kapitola 6 ukazuje, jak se data a logika kombinují dohromady do objektů. Objekty jsou opětovně využitelné části kódu, které pomáhají lépe strukturovat programy. Objekty také umožňují integrovat do kódu již existující doplňky a knihovny PHP. Dalších pět kapitol pokrývá úlohy, které tvoří podstatu vybudování dynamického webu: interakce s uživateli, uchovávání informací a interakce s jinými weby. Kapitola 7 obsahuje podrobnosti o práci s webovými formuláři, což je primární způsob, jakým budou uživatelé komunikovat s webem. V kapitole 8 se diskutuje o databázích. V databázi se uchovávají informace, které se zobrazují na webu, jako je katalog produktů nebo kalendář událostí. V této kapitole ukážeme, jak docílit toho, aby program PHP uměl komunikovat s databází. S technikami popsanými v kapitole 8 bude web schopen vykonávat specifické věci pro konkrétní uživatele, například zobrazit citlivé informace pouze autorizovaným lidem, nebo sdělit konkrétní osobě, kolik nových příspěvků přibylo na stránku od okamžiku, kdy byla naposledy přihlášena. Kromě databází možná budete potřebovat pracovat i s daty uloženými v souborech. V kapitole 9 se vysvětluje, jak lze pomocí programů PHP číst soubory a zapisovat do nich. V další kapitole 10 se podrobně probírá, jak sledovat uživatele. Zahrnuje nejenom práci s cookies u dočasných dat, ale také přihlašování uživatelů k účtům a sledování dat relace, například obsah nákupního vozíku. V kapitole 11 se budeme důkladně zabývat tím, jak může program PHP komunikovat s jinými weby a s webovými službami. Můžete získávat obsah jiných webových stránek nebo webových API a používat je ve svých


11 programech. Obdobně můžete využít PHP nejenom pro obsluhu obyčejných webových stránek, ale i pro odpovědi API jiným klientům. Následující další tři kapitoly již nebudou o tom, jak do programů začleňovat nové schopnosti: probírají se v nich věci, které napomáhají tomu, abyste se mohli stát lepším programátorem. V kapitole12 se vysvětluje, jak se programy ladí: jak se v nich hledají a opravují chyby. Kapitola 13 ukazuje, jak psát testy, s nimiž se prověřují různé části programu. Testování vám umožňuje ujistit se, že program dělá přesně to, co od něho očekáváte. V kapitole 14 pak hovoříme o některých aspektech softwarového inženýrství, které nejsou specifické pro PHP, nicméně byste je měli znát, pokud pracujete na projektech s jinými vývojáři. Poslední sekce knihy je kolekce krátkých exkurzí do několika úloh a témat. Ačkoliv nejsou tak zásadní, jako dříve probraná témata o základní struktuře PHP, nebo jak uchovávat informace, přesto se jedná o věci, na které dříve či později narazíte, až strávíte nějaký čas s PHP. Tyto kapitoly vám poskytnou potřebné základy. Kapitola 15 ukazuje schopnosti PHP pro práci s datem a s časem. V kapitole 16 se diskutuje o správě balíků (package management), která nabízí nesmírně zajímavý způsob, jak začleňovat do kódu užitečné knihovny napsané jinými lidmi. Kapitola 17 vysvětluje, jak odesílat z programu PHP e-mailové zprávy. V kapitole 18 se prozkoumávají tři oblíbené PHP frameworky, s nimiž můžete rychle začít pracovat na projektech, aniž byste museli psát spoustu běžného nudného kódu. V kapitole 19 se dozvíte, jak používat PHP z příkazového řádku, což může být šikovný způsob, jak psát jednoduché utility nebo testovat krátké programy. A konečně, v kapitole 20 je čtenáři knihy poskytnuto několik technik, jak vytvářet programy PHP, které bezchybně zvládnou zpracování textu psaného v různých jazycích a znakových sadách. Dva knižní dodatky obsahují dodatečný materiál. Chcete-li spouštět programy PHP, musíte mít na počítači nainstalovanou kopii PHP enginu (nebo mít účet u nějakého poskytovatele webového hostingu, který podporuje PHP). Dodatek A vám pomůže se zprovozněním PHP, ať už pracujete pod Windows, OS X nebo Linuxem. Dodatek B pak obsahuje odpovědi na cvičení zahrnutá v této knize.

Co v knize není Z pochopitelných důvodů nemůže tato kniha obsahovat úplně všechno, co je třeba vědět o PHP. Jejím hlavním cílem poskytnout úvod do PHP 7 a do základů počítačového programování. Pokud jste už programátorem PHP a zajímají vás pouze novinky obsažené v PHP 7, doporučujeme si obstarat knihu Upgrading to PHP 7, kterou napsal Davey Shafik (O’Reilly).1 Najdete v ní spoustu informací ohledně novinek a změn v této nejnovější verzi PHP. Další užitečné informace také najdete v komentovaném souhrnu odkazů a referencí, který sestavil Bruno Skvorc na SitePointu.2

Další zdroje Skvělým zdrojem pro prozkoumávání rozsáhlé knihovny funkcí PHP je online manuál PHP.3 Sami uživatelé do něj přispívají svými komentáři obsahujícími užitečné rady a ukázkové kódy. Kromě něj existuje celá řada e-mailových newsletterů zaměřených na PHP, které vám doporučujeme. Pokrývají problematiku instalace, programování, rozšiřování a spoustu dalších témat. O těchto newsletterech se více dozvíte na php.net, kde 1 2 3

http://www.oreilly.com/web-platform/free/upgrading-to-php-seven.csp http://bit.ly/skvorc-php7 http://www.php.net/manual


12 se také můžete přihlásit k jejich odběru. Rozhodně zde stojí zmínit i PHP Presentation System, což je archiv prezentací PHP z různých konferencí.4 Pokud se již vyznáte v nějakém jiném programovacím jazyku a chcete zvládnout i PHP, může být pro vás užitečný web s názvem PHP The Right Way.5 Až budete mít dobře zvládnutou látku probíranou v této knize, navázat na ni můžete četbou těchto knih: Programming PHP.6 Autoři Rasmus Lerdorf, Peter MacIntyre a Kevin Tatroe (O’Reilly). Podrobnější

a techničtější pohled na to, jak vytvářet programy v PHP. Zahrnuje informace o bezpečnosti, XML a generování grafik. PHP Cookbook.7 Autoři David Sklar a Adam Trachtenberg (O’Reilly). Vyčerpávající kolekce běžných

programovacích problémů PHP a jejich řešení. Modern PHP.8 Autor Josh Lockhart (O’Reilly). Jak už název napovídá, tato kniha není o syntaxi nebo

o specifických záležitostech v PHP. Pomůže vám s vytvářením kódu PHP v konzistentním, vysoce kvalitním stylu a s pochopením dobrých praktik softwarového inženýrství. Probírají se zde záležitosti tykající se například rozmisťování kódu (deployment), testování a profilování. Následující knihy pojednávají o databázích, SQL a MySQL: Learning PHP, MySQL & JavaScript.9 Autor Robin Nixon (O’Reilly). Vysvětluje, jak docílit harmonic-

ké spolupráce PHP, MySQL a JavaScriptu pro vybudování robustního dynamického webu. SQL in a Nutshell.10 Autoři Kevin E. Kline, Daniel Kline a Brand Hunt (O’Reilly). Probírají se nezbyt-

né znalosti, abyste mohli psát SQL dotazy. Nechybí ani informace o SQL dialektech, které používají Microsoft SQL Server, MySQL, Oracle a PostgreSQL. MySQL Cookbook.11 Autor Paul DuBois (O’Reilly). Vyčerpávající kolekce běžných úloh MySQL. MySQL Reference Manual.12 Nepostradatelný zdroj informací o schopnostech MySQL. MySQL profesionálně – Optimalizace pro vysoký výkon.13 Kolektiv autorů (Zoner Press). Kniha je

určena jak novým uživatelům MySQL, kteří si s MySQL zatím jen pohrávali a chystají se psát své první aplikace, tak i zkušeným uživatelům, kteří už mají za sebou dobře vyladěné aplikace založené na MySQL a chtějí z nich dostat nějaký ten výkon navíc.

Konvence používané v knize V knize se používají následující programovací a typografické konvence.

Programovací konvence Příklady kódu v knize jsou navrženy tak, aby pracovaly s PHP verze 7.0.0. Byly otestovány s PHP 7.0.5, což byla nejnovější verze PHP 7, která byla k dispozici v době vydání knihy. Pokud se někde v knize odkazujeme 4 5 6 7 8 9 10 11 12 13

http://talks.php.net/ http://www.phptherightway.com/ http://bit.ly/prog-php http://bit.ly/phpckbk3 http://bit.ly/modern_phps http://bit.ly/lpmjch_4e http://bit.ly/sql-nutshell http://bit.ly/mysql_ckbk_3e http://dev.mysql.com/doc/mysql https://www.zonerpress.cz/mysql-profesionalne-optimalizace-pro-vysoky-vykon


13 na funkce, které byly přidány do PHP 5.4.0 nebo pozdějších verzích, obvykle uvádíme, ve které verzi byla daná funkce do PHP přidána.

Typografické konvence V knize se používají následující typografické konvence: Text s neproporcionální písmem. Indikuje příkazy, volby, přepínače, proměnné, atributy, klíče, funkce,

typy, třídy, jmenné prostory, metody, moduly, vlastnosti, parametry, hodnoty, objekty, události, zpracovatele událostí, XML značky, HTML značky, makra, obsah souborů, názvy souborů, výstup z příkazů. TIP

Obsahuje tip, doporučení nebo všeobecnou poznámku.

UPOZORNĚNÍ

Obsahuje upozornění nebo varování.

Zdrojové soubory Přepisovat zdrojové kódy ručně do počítače bude pro vás užitečné jen tehdy, pokud se zrovna potřebujete naučit psát na klávesnici (což nepředpokládáme). Zdrojové kódy doporučujeme stáhnout z této adresy: http://soubory.zonerpress.cz/zrk1606

Kniha existuje proto, aby vám pomáhala s úlohami, které řešíte. Kód uvedený v této knize můžete používat ve svých programech nebo dokumentaci. Obvykle nemusíte žádat vydavatele o povolení za předpokladu, že nechcete někde reprodukovat podstatnou část kódu. Například, když píšete program, v němž použijete několik fragmentů kódu z této knihy, nemusíte žádat o povolení. Když budete prodávat nebo distribuovat CD-ROM obsahující příklady z našich knih, povolení potřebujete. Pokud chcete získat odpověď na nějakou otázku, ve které zmíníte tuto knihu a uvedete kód nějakého příkladu, povolení nepotřebujete. Chcete-li začlenit podstatnou část kódu příkladu z této knihy do dokumentace svého produktu, povolení potřebujete.

Poděkování Tato kniha je konečný výsledek tvrdé práce mnoha lidí. Konkrétně chci poděkovat: Mnoha programátorům, testerům, lidem, co píší dokumentaci, opravují chyby, i všem ostatním, je-

jichž čas, talent a zanícení učinily z PHP prvotřídní vývojovou platformu, jakou dnes máme. Bez nich bych skutečně neměl o čem psát. Mým pracovitým recenzentům, jimiž byli Thomas David Baker a Phil McCluskey. Zachytili spousty

chyb, matoucí vysvětlení přeměnili na jasná a celkově hodně přispěli k vylepšení této knihy. Mé editorce Ally MacDonaldové. Autor představuje jen jeden z mnoha dílků, které je třeba poskládat,

aby vznikla kniha, a Ally zajistila, aby vše, co se mělo stát s těmito dílky, se také s nimi opravdu stalo. Na závěr nesmím opomenout poděkovat Susannah, s níž si pořád užívám ignorování syntaxe věcí.


87

KAPITOLA 5 Seskupování logiky: funkce a soubory Při psaní počítačových programů je lenost ctností. Když opětovně využíváte kód, který jste napsali někdy předtím, snadněji dosáhnete toho, že budete pracovat co nejméně. Klíčem k opětovnému využívání kódu jsou funkce. Funkce je pojmenovaná sada příkazů, které vykonáte jednoduše tak, že se odvoláte na její název. Nemusíte psát tyto příkazy znovu. Ušetříte svůj čas a předejdete zbytečným chybám. Funkce navíc usnadňují použití kódu, který napsali jiní lidé (což už jste odhalili díky vestavěným funkcím, které vytvořili samotní autoři PHP enginu). Základy toho, jak definovat vlastní funkce a jak je volat, naleznete v sekci "Deklarace a volání funkcí". Když zavoláte nějakou funkci, můžete jí předat hodnoty, s nimiž pak může operovat. Pokud jste například napsali funkci, která kontroluje, zdali uživatel má povolený přístup k aktuální webové stránce, budete potřebovat takové funkci předat uživatelské jméno a název aktuální webové stránky. Těmto hodnotám se říká argumenty. V sekci "Předávání argumentů do funkcí" později v této kapitole se dozvíte, jak psát funkce, které přebírají argumenty, a jak se s těmito argumenty uvnitř funkcí pracuje. Některé funkce jsou jako jednosměrné ulice. Můžete do nich předat argumenty, ale zpět nedostanete nic. Funkce print_header(), která tiskne záhlaví HTML stránky, může převzít argument obsahující titulek (nadpis) stránky, ale poté, co se vykoná, neposkytne žádnou informaci. Prostě jen zobrazí výstup. Většina funkcí přesouvá informace oběma směry. Takovou je i výše zmíněná funkce kontrolující přístup ke stránce. Vrací hodnotu true (přístup udělen), nebo false (přístup odmítnut). Této hodnotě se říká návratová hodnota. S návratovou hodnotou funkce můžete pracovat stejně jako s jakoukoli jinou hodnotou nebo proměnnou. Návratové hodnoty se probírají v sekci "Vracení hodnot z funkcí". V příkazech, které se nachází uvnitř funkce, se proměnné používají stejně jako v příkazech, které jsou vně funkce. Proměnné nacházející se uvnitř funkce a proměnné nacházející se vně funkce ovšem žijí v naprosto oddělených světech. PHP engine považuje proměnnou s názvem $name, která je uvnitř funkce, a proměnnou $name, která je vně funkce, za dvě různé proměnné, které k sobě nemají žádný vztah. Pravidla stanovující, ve kterých částech programu se mohou používat které proměnné, se vysvětlují v sekci "Obor proměnných" dále v této kapitole. Je důležité těmto pravidlům dobře porozumět,


88

Kapitola 5 – Seskupování logiky: funkce a soubory

protože pokud je pochopíte nesprávně, hned máte kód, který se spoléhá na neinicializované nebo nekorektní proměnné. Výsledkem jsou chyby, které se špatně odhalují. Protože funkce jsou vhodné pro opětovné využívání kódu, v praxi je často velmi užitečné vytvářet samostatné soubory s definicemi funkcí a na tyto soubory se následně odkazovat ze samostatných programů. To umožňuje, aby různé programy (a různé části těchto programů) mohly sdílet funkce bez duplikování kódu. Více o této funkcionalitě naleznete v sekci "Spouštění kódu v jiném souboru".

Deklarace a volání funkcí Chcete-li vytvořit novou funkci, uveďte klíčové slovo function, za ním název funkce a pak dovnitř složených závorek tělo funkce. Příklad 5-1 deklaruje novou funkci s názvem page_header().1 Příklad 5-1. Deklarace funkce. function page_header() { print '<html><head><title>Welcome to my site</title></head>'; print '<body bgcolor="#ffffff">'; }

Názvy funkcí se řídí stejnými pravidly jako názvy proměnných: musejí začínat písmenem nebo podtržítkem, ostatní znaky mohou být písmena, číslice nebo podtržítka. PHP enginu nevadí, budete-li mít proměnnou a funkci se stejným názvem, ovšem v praxi byste se měli tomu pokud možno vyhýbat. Když má v programu mnoho věcí podobné názvy, nijak to nepřispívá k jeho srozumitelnosti. Funkci page_header() definovanou v příkladu 5-1 zavoláte úplně stejně, jako byste volali nějakou z vestavěných funkcí PHP. V příkladu 5-2 se s pomocí page_header() vytiskne kompletní stránka. Příklad 5-2. Volání funkce. page_header(); print "Welcome, $user"; print "</body></html>";

Funkce se mohou definovat předtím nebo až poté, co jsou zavolány. PHP engine přečte celý soubor programu a vezme na vědomí všechny definice funkcí, které v něm najde. Teprve poté začne spouštět příkazy uvedené v souboru. Funkce page_header() a page_footer() v příkladu 5-3 se obě vykonají úspěšně, přestože page_header() je definována před tím, než se zavolá, a page_footer() je definována až poté, co se zavolá. Příklad 5-3. Definice funkcí předtím nebo potom, co se zavolají. function page_header() { print '<html><head><title>Welcome to my site</title></head>'; print '<body bgcolor="#ffffff">'; } page_header();

1

Abychom byli přesní, závorky nejsou součástí názvu funkce, nicméně bývá dobrým zvykem je uvádět, když se na funkce odkazujete. Pomáhá to odlišit funkce od proměnných a jiných konstrukcí jazyka.


PHP 7

89

print "Welcome, $user"; page_footer(); function page_footer() { print '<hr>Thanks for visiting.'; print '</body></html>'; }

Předávání argumentů do funkcí Přestože některé funkce (jako page_header() v předchozí sekci) dělají vždy totéž, jiné funkce operují se vstupem, který se může měnit. Vstupním hodnotám dodávaným do funkce se říká argumenty. Argumenty přidávají funkcím na síle, stávají se flexibilnějšími. Upravme funkci page_header() tak, aby přebírala argument obsahující barvu stránky. Modifikovanou deklaraci funkce vidíte v příkladu 5-4. Příklad 5-4. Deklarace funkce s argumentem. function page_header2($color) { print '<html><head><title> Welcome to my site</title></head>'; print '<body bgcolor="#' . $color . '">'; }

Do deklarace funkce jsme přidali $color mezi závorky za názvem funkce. Kód uvnitř funkce pak bude moci používat proměnnou s názvem $color, která obsahuje hodnotu předávanou do funkce při jejím volání. Funkci můžete zavolat například takto: page_header2('cc00cc');

Uvnitř page_header2() tím nastavíte $color na cc00cc, takže vytiskne: <html><head><title> Welcome to my site</title></head><body bgcolor="#cc00cc">

Když definujete funkci, která přebírá nějaký argument (jako v příkladu 5-4), musíte jí předat argument, když ji voláte. Pokud takovou funkci zavoláte bez hodnoty pro její argument, PHP engine vydá upozornění. Pokud byste například zavolali page_header2() takto: page_header2();

engine vytiskne tenhle druh zprávy: PHP Warning: Missing argument 1 for page_header2()

Abyste upozornění (warning) tohoto druhu (chybí argument 1 pro...) nedostávali, definujte funkci tak, aby přebírala nepovinný argument. Zařídíte to tím, že v deklaraci funkce uvedete výchozí (default) hodnotu. Pokud při volání funkce dodáte hodnotu, funkce použije dodanou hodnotu. Pokud při volání funkce hodnotu nedodáte, použije funkce výchozí hodnotu. Výchozí hodnotu specifikujete tak, že ji uvedete za názvem argumentu. V příkladu 5-5 se nastaví výchozí hodnota pro $color na cc3399.


90

Kapitola 5 – Seskupování logiky: funkce a soubory

Příklad 5-5. Specifikace výchozí hodnoty argumentu. function page_header3($color = 'cc3399') { print '<html><head><title>Welcome to my site </title></head>'; print '<body bgcolor="#' . $color . '">'; }

Když zavoláte page_header3('336699'), dostanete stejný výsledek jako s voláním funkce page_ header2('336699'). Když se vykonává tělo těchto funkcí, má $color hodnotu 336699, což je barva určená pro atribut bgcolor značky <body>. Zatímco však volání page_header2() bez argumentu vyprodukuje upozornění, page_header3() můžete spustit bez argumentu, $color se nastaví na cc3399. Výchozí hodnoty pro argumenty musejí být literály, jako jsou 12, cc3399 nebo Shredded Swiss Chard. Nemohou to být proměnné. Následující kód není v pořádku a způsobí, že PHP engine zastaví běh programu: $my_color = '#000000'; // Tohle není správně: výchozí hodnota argumentu nemůže být proměnná function page_header_bad($color = $my_color) { print '<html><head><title>Welcome to my site </title></head>'; print '<body bgcolor="#' . $color . '">'; }

Chcete-li definovat funkci, která přebírá více argumentů, oddělujte je v deklaraci funkce čárkou. V příkladu 5-6 přebírá page_header4() dva argumenty: $color a $title. Příklad 5-6. Definice funkce přebírající dva argumenty. function page_header4($color, $title) { print '<html><head><title>Welcome to ' . $title . '</title></head>'; print '<body bgcolor="#' . $color . '">'; }

Když voláte funkci, která přebírá více argumentů, ve volání funkce je oddělujte čárkami. V příkladu 5-7 se volá page_header4() s hodnotami pro $color a $title. Příklad 5-7. Volání funkce přebírající dva argumenty. page_header4('66cc66','my homepage');

Příklad 5-7 vytiskne: <html><head><title>Welcome to my homepage</title></head><body bgcolor="#66cc66">

V příkladu 5-6 jsou oba argumenty povinné. Chcete-li u funkcí, které přebírají více argumentů, vyznačit pro argumenty výchozí hodnoty, dělá se to stejně jako u funkce, která přebírá jen jeden argument. Všechny nepovinné argumenty ovšem musí následovat až za povinnými argumenty. Příklad 5-8 ukazuje správné způsoby definice funkce se třemi argumenty, když jeden z nich, dva nebo všechny tři jsou nepovinné. Příklad 5-8. Několik nepovinných argumentů. // Je-li nepovinný jeden argument, musí být poslední function page_header5($color, $title, $header = 'Vítejte') {


PHP 7

91

print '<html><head><title>Welcome to ' . $title . '</title></head>'; print '<body bgcolor="#' . $color . '">'; print "<h1>$header</h1>"; } // Přípustná volání této funkce: page_header5('66cc99','my wonderful page'); // použije výchozí $header page_header5('66cc99','my wonderful page', 'This page is great!'); // použije hodnotu uvedenou ve volání // Jsou-li nepovinné dva argumenty, musejí být uvedené jako poslední dva function page_header6($color, $title = 'the page', $header = 'Welcome to ') { print '<html><head><title>Welcome to ' . $title . '</title></head>'; print '<body bgcolor="#' . $color . '">'; print "<h1>$header</h1>"; } // Přípustná volání této funkce: page_header6('66cc99'); // použije výchozí hodnoty pro $title a $header page_header6('66cc99', 'my wonderful page'); // použije výchozí $header page_header6('66cc99', 'my wonderful page', 'This page is great!'); // použije hodnoty uvedené ve volání // Všechny argumenty jsou nepovinné function page_header7($color = '336699', $title = 'the page', $header = 'Welcome') { print '<html><head><title>Welcome to ' . $title . '</title></head>'; print '<body bgcolor="#' . $color . '">'; print "<h1>$header</h1>"; } // Přípustná volání této funkce: page_header7(); // použije výchozí hodnoty pro všechny argumenty page_header7('66cc99'); // použije výchozí pro $title a $header page_header7('66cc99','my wonderful page'); // použije výchozí pro $header page_header7('66cc99','my wonderful page', 'This page is great!'); // použije hodnoty uvedené ve volání

Všechny nepovinné argumenty musejí být na konci seznamu argumentů, aby se zamezilo vzniku nejednoznačnosti. Kdyby se mohla funkce page_header7() definovat s prvním povinným argumentem $color, druhým volitelným argumentem $title a třetím povinným argumentem $header, co by pak znamenalo volání page_header7('33cc66','Good Morning')? Argument 'Good Morning' by mohl být hodnotou buď pro $title, nebo pro $header. Nicméně, když se všechny nepovinné argumenty uvádějí až za povinnými, k takovým zmatkům vůbec nedochází.


265

KAPITOLA 15 Datum a čas Datum a čas se ve webové aplikaci vyskytují všude. V nákupním vozíku potřebujete pracovat s datem expedice zakoupených produktů. Na fóru je třeba sledovat, kdy byly jednotlivé příspěvky zveřejněny. V aplikacích všech možných druhů je potřeba evidovat, kdy se jednotliví uživatelé naposledy přihlásili, abyste je mohli například informovat, že "od vašeho posledního přihlášení přibylo 15 nových zpráv". Řádná práce s datumem a časem je v programech o něco složitější, než když pracujete s řetězci nebo s čísly. Datum nebo čas nejsou jediná hodnota, ale kolekce hodnot: například den, měsíc a rok, nebo hodina, minuta a sekunda. Z tohoto důvodu mohou být matematické operace s nimi dost obtížné. Nemůžete prostě sčítat nebo odečítat dva kompletní datumy či dva kompletní časy, musíte brát v úvahu jednotlivé komponenty i povolené rozsahy hodnot jednotlivých komponent. Hodin může být nejvýše 12 (nebo 24), minut a sekund nejvýše 59, přičemž všechny měsíce nemají stejný počet dní. PHP vás zbavuje tohoto obtížného břemene, protože poskytuje třídu DateTime, kde jsou zapouzdřeny veškeré informace o konkrétním časovém okamžiku. S metodami této třídy vytisknete datum nebo čas v takovém formátu, jaký si zvolíte, budete moci sečíst dvě data, odečíst jedno datum od jiného i pracovat s časovými intervaly. V této knize chápeme pod termínem komponenty času (nebo komponenty data nebo komponenty data a času) pole nebo skupinu dílčích částí data a času, jako jsou den, měsíc, rok, hodina, minuta a sekunda. Naformátovaný řetězec času (nebo naformátovaný řetězec data atd.) znamená řetězec, který obsahuje nějaké konkrétní seskupení komponent pro datum a čas, například "Thursday, October 20, 2016" nebo "3:54 p.m".

Zobrazování data nebo času Nejjednodušším zobrazením data nebo času je situace, kdy uživatelům sdělíte, co je dnes za den a kolik je hodin. K tomuto účelu zavolejte metodu format() objektu DateTime, jak to vidíte v příkladu 15-1. Příklad 15-1. Co je dnes za den a kolik je hodin? $d = new DateTime();


266

Kapitola 15 – Datum a čas

print 'It is now: '; print $d->format('r'); print "\n";

UPOZORNĚNÍ Když spustíte kód z příkladu 15-1 a PHP engine zobrazí upozornění "It is not safe to rely on the system’s timezone settings", přejděte do sekce "Časová pásma", kde se dozvíte, co tato hláška znamená a jak se jí zbavit.

V poledne 20. října 2016 příklad 15-1 vytiskne: It is now: Thu, 20 Oct 2016 12:00:00 +0000

Když vytvoříte objekt DateTime, datum nebo čas v něm uložené jsou k dispozici prostřednictvím konstruktoru. Nedodá-li se mu žádný argument, jako v příkladu 15-1, použije se aktuální datum a čas. Formátovací řetězec předaný metodě format() určuje, jak budou datum a čas naformátovány při tisku. Jednotlivá písmena ve formátovacím řetězci se překládají do odpovídajících komponent data nebo času. Příklad 15-2 vytiskne měsíc, den a rok. Příklad 15-2. Vytištění naformátovaného řetězce data. $d = new DateTime(); print $d->format('m/d/y');

V poledne 20. října 2016 příklad 15-2 vytiskne: 10/20/16

V příkladu 15-2 m zastupuje měsíc (10), d zastupuje den v měsíci (20) a y zastupuje dvoumístný rok (16). Protože lomítko nepatří mezi formátovací znaky metody format(), lomítka zůstanou v řetězci, který format() vrátí. Všechny speciální znaky, kterým rozumí DateTime::format(), jsou vypsány v tabulce 15-1. Tabulka 15-1. Formátovací znaky pro datum a čas. Typ

Formátovací znak

Popis

Rozsah/ukázka

Den

j

Pořadové číslo dne v měsíci; číslo

1–31

Den

d

Pořadové číslo dne v měsíci; číslo; s vedoucí nulou

01–31

Den

S

Sufix pořadové číslovky v angličtině pro den nebo měsíc, text

st, th, nd, rd

Den

z

Pořadové číslo dne v roce; číslo

0–365

Den

w

Pořadové číslo dne v týdnu; číslo; 0 == Neděle

0–6

Den

N

Pořadové číslo dne v týdnu; číslo; 1 == Pondělí

1–7

Den

D

Zkrácený název dne v týdnu; text

Mon–Sun


PHP 7

Praktický průvodce nejrozšířenějším skriptovacím jazykem pro web Nudné weby jsou statické. Zajímavé weby jsou dynamické. Pokud chcete začít pracovat s PHP, nejrozšířenějším skriptovacím jazykem pro web, tato kniha je určena právě vám. Její autor, David Sklar, vás provede všemi aspekty PHP, které jsou nezbytné k tomu, abyste mohli začít budovat dynamické webové stránky. Prozkoumáním funkcionalit a vylepšení obsažených v PHP 7 se dozvíte, jak například pracovat s webovými servery, databázemi a webovými službami. Na konci většiny kapitol pak naleznete praktická cvičení, která vám umožní otestovat si, jak moc dobře jste pochopili právě probíranou látku.

slevy, akce,

novinky

 Ladění  Testování: funguje váš program správně?  Užitečné praktiky softwarového inženýrství  Datum a čas  Správa balíků  Odesílání e-mailových zpráv  Frameworky  PHP na příkazovém řádku  Internacionalizace a lokalizace  Instalace a konfigurace PHP enginu  Řešení ke cvičením v knize

© pixabay.com (2938551)

Kapitoly obsažené v knize:  Orientace a první kroky  Data: práce s textem a s čísly  Logika: rozhodování a smyčky  Seskupování dat: práce s poli  Seskupování logiky: funkce a soubory  Data a logika dohromady: práce s objekty  Výměna informací: webové formuláře  Uchovávání informací: databáze  Práce se soubory  Zapamatování uživatelů: cookie a relace  Komunikace s jinými weby a se službami

Nechejte nám kontakt na novinky.zonerpress.cz a získáte další bonusy, slevy a jiné výhody.

DOPORUČENÁ CENA: 499 KČ KATALOGOVÉ ČÍSLO: ZRK1606

P R E S S

PHP 7

Praktický průvodce nejrozšířenějším skriptovacím jazykem pro web

David Sklar

David Sklar

Z O N E R

PHP 7

Praktický průvodce nejrozšířenějším skriptovacím jazykem pro web

E N C Y K L O P E D I E

ISBN 978-80-7413-363-3

Zoner Press tel.: 532 190 883 e-mail: knihy@zoner.cz www.zonerpress.cz ZONER software, a.s., Nové sady 18, 602 00 Brno

9 7 8 8 0 7 4 1 3 3 6 3 3

David Sklar


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.