<commit_before>---
layout: post
title: Jak psát PHP? (3/3) - Úložiště kódu, databáze a frameworky
---

V poslední části přehledu o nástrojích vhodných pro jazyk PHP se podíváme nejen na github + gitlab, řekneme si něco málo o databázích a předestřu základy frameworků. Navíc si můžeš přečíst [předchozí díl o composeru, gitu a debuggingu](http://jakpsatphp.cz/Jak-psat-php-Zavislosti+verzovaci-systemy+debugging/) nebo [první díl o zdrojích a editorch](http://jakpsatphp.cz/Jak-psat-php-Zdroje-znalosti+vyvojove-prostredi/). 

# Úložiště kódu
Když nebudeš pracovat sám nebo se budeš chtít pochlubit svým novým projektem, musíš svůj kód dát někam online. Kód je vhodné dávat někam, kde se s ním bude dál dobře pracovat, kde ho snadno můžou najít a procházet ostatní a kde ho můžeš jednoduše stáhnout a použít jinde. Přesně pro tyto potřeby vznikly služby, které se specializují na tuto online práci s kódem. 

Nejpoužívanějším úložištěm je [github.com](https://github.com). Je úzce provázaný s gitem a díky němu je možné snadno nahrávat, stahovat, opravovat i větvit cizí i vlastní kód. Jedinnou nevýhodou v neplacené verzi je nemožnost soukromých repozitářů. I přes to bych ho doporučil jako první volbu, protože je vvelmi rozšířený a lze na něj najít spoustu dobrých návodů. 

[Gitlab.com](https://about.gitlab.com/) je mladší služba, která proti githubu nabízí i soukromé repozitáře pro všechny. Jako jedno z mála úložišť je opensourcovaný a můžete si ho tedy zdarma nasadit i do vlastního řešení. Bohužel nenabízí sledování jednotlivých uživatelů a nepoužívá ho tolik lidí jako github. 

[Bitbucket](https://bitbucket.org/) není tak rozšířený jako předchozí varianty, jako jediný ale nabízí podporu [verzovacího systému Mercurial](https://www.mercurial-scm.org/). Navíc velmi ochotně spolupracuje s dalšími aplikacemi od firmy [Atlassian](https://www.atlassian.com/) jako je [Confluence](https://www.atlassian.com/software/confluence) nebo [Jira](https://www.atlassian.com/software/jira). 

Existují i další služby které můžete zkusit, jen se prosím vyhněte SourceForge. Ta měl veliké problémy s přibalováním nevyžádaných probramů do všech hostovaných projektů a je možné, že to dělá dodnes. 

Všechna úložiště poskytují základní funkce jako jsou větvení a klonování kódu, žádosti o rozšíření (Pull Requesty), komentování kódu ostatními (Code Review), hlášení problémů (Issues) nebo podporu dokumentace (Wiki nebo manuály). Pro formátování textu se často na úložištích používá [Markdown](https://cs.wikipedia.org/wiki/Markdown). Neděste se, pokud některému z pojmů nerozumíte. Až tu bude článek popisující verzovací systémy více do hloubky, přibyde tu na něj vysvětlující odkaz. 

# Databáze
Databáze jsou nedílnou součástí PHP i webových aplikací obecně, přesto je vezmu velmi zkrátka - je to disciplína hodná vlastního blogu (šance založit jakpsatdb.cz!). 

Databáze slouží k ukládání dat. Data jdou řešit i jinak, například ukládat je do textových souborů či posílat někam mimo aplikaci. Výhodou databází je ale přístupová rychlost a snadná udržitelnost a zálohovatelnost. 

## Jak se pracuje s databází? 
Program do databázového systému (DMBS) posílá příkazy typicky v jazyce SQL (structured query language), systém je provede a vrátí výsledek. Mezi databázovy systém a PHP se může vložit další programová vrstva (knihovna nebo ORM), která zlepšuje čitelnost a použitelnost příkazů a dat v rámci projektu - více se dozvíš níže. 

Do databáze se pomocí jazyka SQL dají posílat jednoduché příkazy jako: `vrať všechny sloupce z tabulky users`, což zapsáno v SQL vypadá 

```sql
SELECT * FROM users
```

Příkaz pro vybírání je mocný a dá se hodně rozvinout, jako třeba 

```sql
SELECT firstname, surname, photos 
FROM users 
JOIN userPhotos ON userPhotos.user = user.id 
WHERE user.gender = 'female' 
	AND user.age BETWEEN 15 
	AND 25 AND user.city = 'Brno'
```

což znamená něco jako: `vrať všechny jména, příjmení a fotky uživatelů, kteří jsou ženy, mají od 15 do 25 let a jsou z Brna`. 

## Druhy databází
Databáze se obecně dělí na strukturované (relační) a nestukturované (známé i jako noSQL). **Relační databáze** mají pevně danou strukturu tabulek a sloupců v nich. Tabulky vypadají skoro stejně jako ty v Excelu nebo Calcu, relační databáze mezi nimi navíc definují předem dané vazby. Asi nejpoužívanější relační databázový systém je [MySQL](https://www.mysql.com/) od firmy Sun. Další známé systémy jsou [MariaDB](https://mariadb.org/) jako opensource klon MySQL, oblíbený [PostgreSQL](https://www.postgresql.org/), [Firebird](http://www.firebirdsql.org/) používaný hlavně v komerční sféře a jednoduchý [SQLite](https://sqlite.org/) vhodný pro malé projekty. 
<commit_msg>fixed mysql owner<commit_after>---
layout: post
title: Jak psát PHP? (3/3) - Úložiště kódu, databáze a frameworky
---

V poslední části přehledu o nástrojích vhodných pro jazyk PHP se podíváme nejen na github + gitlab, řekneme si něco málo o databázích a předestřu základy frameworků. Navíc si můžeš přečíst [předchozí díl o composeru, gitu a debuggingu](http://jakpsatphp.cz/Jak-psat-php-Zavislosti+verzovaci-systemy+debugging/) nebo [první díl o zdrojích a editorch](http://jakpsatphp.cz/Jak-psat-php-Zdroje-znalosti+vyvojove-prostredi/). 

# Úložiště kódu
Když nebudeš pracovat sám nebo se budeš chtít pochlubit svým novým projektem, musíš svůj kód dát někam online. Kód je vhodné dávat někam, kde se s ním bude dál dobře pracovat, kde ho snadno můžou najít a procházet ostatní a kde ho můžeš jednoduše stáhnout a použít jinde. Přesně pro tyto potřeby vznikly služby, které se specializují na tuto online práci s kódem. 

Nejpoužívanějším úložištěm je [github.com](https://github.com). Je úzce provázaný s gitem a díky němu je možné snadno nahrávat, stahovat, opravovat i větvit cizí i vlastní kód. Jedinnou nevýhodou v neplacené verzi je nemožnost soukromých repozitářů. I přes to bych ho doporučil jako první volbu, protože je vvelmi rozšířený a lze na něj najít spoustu dobrých návodů. 

[Gitlab.com](https://about.gitlab.com/) je mladší služba, která proti githubu nabízí i soukromé repozitáře pro všechny. Jako jedno z mála úložišť je opensourcovaný a můžete si ho tedy zdarma nasadit i do vlastního řešení. Bohužel nenabízí sledování jednotlivých uživatelů a nepoužívá ho tolik lidí jako github. 

[Bitbucket](https://bitbucket.org/) není tak rozšířený jako předchozí varianty, jako jediný ale nabízí podporu [verzovacího systému Mercurial](https://www.mercurial-scm.org/). Navíc velmi ochotně spolupracuje s dalšími aplikacemi od firmy [Atlassian](https://www.atlassian.com/) jako je [Confluence](https://www.atlassian.com/software/confluence) nebo [Jira](https://www.atlassian.com/software/jira). 

Existují i další služby které můžete zkusit, jen se prosím vyhněte SourceForge. Ta měl veliké problémy s přibalováním nevyžádaných probramů do všech hostovaných projektů a je možné, že to dělá dodnes. 

Všechna úložiště poskytují základní funkce jako jsou větvení a klonování kódu, žádosti o rozšíření (Pull Requesty), komentování kódu ostatními (Code Review), hlášení problémů (Issues) nebo podporu dokumentace (Wiki nebo manuály). Pro formátování textu se často na úložištích používá [Markdown](https://cs.wikipedia.org/wiki/Markdown). Neděste se, pokud některému z pojmů nerozumíte. Až tu bude článek popisující verzovací systémy více do hloubky, přibyde tu na něj vysvětlující odkaz. 

# Databáze
Databáze jsou nedílnou součástí PHP i webových aplikací obecně, přesto je vezmu velmi zkrátka - je to disciplína hodná vlastního blogu (šance založit jakpsatdb.cz!). 

Databáze slouží k ukládání dat. Data jdou řešit i jinak, například ukládat je do textových souborů či posílat někam mimo aplikaci. Výhodou databází je ale přístupová rychlost a snadná udržitelnost a zálohovatelnost. 

## Jak se pracuje s databází? 
Program do databázového systému (DMBS) posílá příkazy typicky v jazyce SQL (structured query language), systém je provede a vrátí výsledek. Mezi databázovy systém a PHP se může vložit další programová vrstva (knihovna nebo ORM), která zlepšuje čitelnost a použitelnost příkazů a dat v rámci projektu - více se dozvíš níže. 

Do databáze se pomocí jazyka SQL dají posílat jednoduché příkazy jako: `vrať všechny sloupce z tabulky users`, což zapsáno v SQL vypadá 

```sql
SELECT * FROM users
```

Příkaz pro vybírání je mocný a dá se hodně rozvinout, jako třeba 

```sql
SELECT firstname, surname, photos 
FROM users 
JOIN userPhotos ON userPhotos.user = user.id 
WHERE user.gender = 'female' 
	AND user.age BETWEEN 15 
	AND 25 AND user.city = 'Brno'
```

což znamená něco jako: `vrať všechny jména, příjmení a fotky uživatelů, kteří jsou ženy, mají od 15 do 25 let a jsou z Brna`. 

## Druhy databází
Databáze se obecně dělí na strukturované (relační) a nestukturované (známé i jako noSQL). **Relační databáze** mají pevně danou strukturu tabulek a sloupců v nich. Tabulky vypadají skoro stejně jako ty v Excelu nebo Calcu, relační databáze mezi nimi navíc definují předem dané vazby. Asi nejpoužívanější relační databázový systém je [MySQL](https://www.mysql.com/) původně od firmy Sun, nyní Oracle. Další známé systémy jsou [MariaDB](https://mariadb.org/) jako opensource klon MySQL, oblíbený [PostgreSQL](https://www.postgresql.org/), [Firebird](http://www.firebirdsql.org/) používaný hlavně v komerční sféře a jednoduchý [SQLite](https://sqlite.org/) vhodný pro malé projekty. 

{'fraction_non_alphanumeric': 0.06632598743745342, 'fraction_numerical': 0.0021292451825827745, 'mean_word_length': 4.827543424317618, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 24, 'lorem ipsum': 0, 'www.': 14, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3750940', 'n_tokens_mistral': 4008, 'n_tokens_neox': 4129, 'n_words': 1239}