Skip to content

Latest commit

 

History

History

01-html-zaklady-php

1. HTML, základy PHP syntaxe

HTML

  • předpokládáme, že už všichni umíte napsat aspoň jednoduchou HTML stránku...

Opakování základů HTML a CSS

PHP

  • interpretovaný programovací jazyk spouštěný na straně serveru
  • aktuálně obvykle využívána řada 5.x
    • od prosince 2015 je k dispozici také verze 7
    • jednotlivé verze se řeší ve funkcionalitě, některé zastaralé funkce jsou postupně odstraňovány
  • PHP soubory mají obvykle příponu .php
  • nejčastěji je PHP využíváno ke generování textových výstupů (HTML, XML, JSON, plain text atp.), ale je možné generovat také jakýkoliv jiný obsah (PDF, obrázky), či mít skript, který na výstup nevrací nic
  • obvykle spouštěno přes webový server (typicky Apache)
    • vytvořený soubor nahrajeme na server a načteme přes prohlížeč
    • pro výuku budeme využívat server eso.vse.cz - viz info k přístupům
    • nezapomeňte, že i výstup vygenerovaný pomocí PHP musí být validní - viz validátor
    • volitelně lze PHP skripty spustit i z konzole
  • v řadě syntaxe PHP podobná Javě
    • podobné
      • stejné zápisy komentářů
      • každý příkaz končí středníkem
      • podobné zápisy cyklů atp.
    • rozdílné
      • volitelné využívání objektů
      • netypovost proměnných
      • nemožnost vícenásobných definic stejných funkcí s různými atributy
      • magické funkce

Vložení PHP do webových stránek

<?php
  // vlastní kód
?>
  • PHP bloků může být v kódu libovolné množství
    • všechny PHP bloky na sebe navazují
    • před odesláním obsahu jsou z kódu stránek všechny PHP bloky "odstraněny" (klient je nevidí)
  • existují i zkrácené zápisy - pokud možno se jejich využívání vyhněte
  • Ukázky:
  • pokud chcete jen vypsat hodnotu proměnné, je možné využít také zkrácený zápis
<?=$promenna?>

Základní syntaktické konstrukce

Komentáře

  • pomáhají se vyznat v kódu
  • dokumentační komentáře umožňují napovídání v rámci IDE (popisy proměnných a jejich datové typy)
// jednořádkový komentář
# jednořádkový komentář
/*
  víceřádkový komentář
*/
/**
 * dokumentační komentář funkce
 * @param int|string $vstup
 * @return bool
 */
/** @var $x dokumentační komentář proměnné */

Proměnné

  • všechny proměnné jde poznat podle znaku $, kterým začíná jejich název
  • proměnné není nutné deklarovat, prostě rovnou přiřadíme do dané proměnné hodnotu
  • názvy proměnných
    • v názvu se smí vyskytovat pouze písmena, číslice a podtržítka
    • PHP rozlišuje velikost písmen v názvu proměnné
    • název musí začínat písmenem či podtržítkem
    • obvykle využíváme velbloudí nebo podtržítkovou notaci
  • PHP používá automatické přetypovávání čísel a řetězců
  • pozor na boolean hodnoty
    • jako false jsou vyhodnoceny proměnné s hodnotou false, null, 0, "" (prázdný řetězec)
    • všechny ostatní hodnoty jsou při přetypování na boolean vyhodnoceny jako true
  $a = 10;
  $b = '1';
  echo $a + $b;
  • pozor, PHP hledá proměnné v kódu a řetězcích
    • zápis $$a bude vyhodnocen tím způsobem, že PHP nejprve nahradí $a textovou hodnotou dané proměnné (např. "b") a poté bude pracovat s výslednou proměnnou (např. $b)
    • název funkce může být uložen také v proměnné - např. $a() spustí funkci, jejíž název je uložen v proměnné $a
  • kromě implicitního přetypování lze v PHP samozřejmě vynutit i přetypování ruční
  $x = intval($x); //dále např. floatval()
  $str = (string)$s;
  $pole = (array)$objekt; //lze využít i pro přetypování pole na objekt (a naopak)
  • je samozřejmě možné zjistit, jestli je daná proměnná definována a také ji volitelně smazat (jako by nikdy definovaná nebyla)
  $existuje = isset($a);//funkce isset zjistí, jestli je daná proměnná definována
  $prazdna = empty($a);//funkce empty zjistí, jestli je daná proměnná definována a není prázdná
  unset($a); //smaže proměnnou $a
  • pro ladění se hodí také možnost nechat si vypsat informace o proměnné včetně jejího obsahu, či zastavit běh celého skriptu
  var_dump($promenna); //vypíše obsah proměnné
  exit(); //ukončí běh skriptu

Textové řetězce

  • řetězce zapisujeme v jednoduchých či dvojitých uvozovkách
    • ve dvojitých uvozovkách jsou vyhledávány
      • proměnné => jsou nahrazeny svojí textovou hodnotou (volitelně je lze oddělit od okolního textu složenými závorkami)
      • řídící znaky - např. \n, \r, \t
    • řetězec v jednoduchých uvozovkách je prostě řetězcem, PHP v něm nehledá nic jiného vyjma zpětných lomítek a dalších jednoduchých uvozovek
    • uvozovky jdou backslashovat
    • pro speciální případy lze využít NOWDOC (HEREDOC) syntaxi
  • příklad řetězce
  echo "The \"best\" paper is $paperName";

Operátory

Základní operátory
Operátor Popis Příklad
= přiřazení hodnoty do proměnné $promenna = "hodnota";
+ sčítání $vysledek = $a + $b;
- odečítání $vysledek = $a - $b;
* násobení $vysledek = $a * $b;
/ dělení $vysledek = $a / $b;
% modulo (zbytek po celočíselném dělení) $vysledek = $a % 10;
** exponent (jen v PHP 5.6+) $vysledek = $a ** 2;
. spojení řetězců $text = $a.$b;
+=, -=, *=, /=, .= zkrácené operátory upravující hodnotu dané proměnné $a+=10; (= ekvivalentní k $a=$a+10;)
++ zvětšení hodnoty proměnné o 1 $a++; ++$b;
-- zmenšení hodnoty proměnné o 1 $a--; --$b;
Porovnávací a logické operátory
Operátor Popis Příklad
== operátor porovnání $a == $b
!= operátor nerovnosti (alternativně lze zapsat pomocí <>) $a != $b
=== operátor porovnání včetně kontroly datového typu $a === $b
!== operátor nerovnosti včetně kontroly datového typu $a !== $b
> větší než $a > $b
< menší než $a < $b
>=, <= operátory větší/rovno, menší/rovno $a >= $b
&& logické AND $a && $b
|| logické OR $a
and logické AND $a and $b
or logické OR $a or $b
xor logické XOR $a xor $b
! negace !$a

Podmínky

Jednoduchá podmínka
if (podminka){
  //true větev
}else{
  //false větev; volitelně ji lze vynechat
}
  • pokud má být v dané větvi vykonán jen jeden příkaz, není nutné ho balit do složených závorek
Vícenásobná podmínka
if (podminka1){
  //větev při spojení podmínky 1
}elseif (podminka2){
   //větev při spojení podmínky 2;
}else{
  //při nesplnění žádné předchozí větve
}
  • elseif větví může být zapojeno libovolné množství
Zkrácená podmínka při přiřazení
  • ve výpisech, zapojení příslušné části řetězce atp.
// proměnná = podminka ? true větev : false větev;

$x = ( $a=="tykani" ? "Ahoj" : "Dobrý den" );

Cykly

Cyklus s podmínkou na začátku (while)
  • asi nejčastěji využívaný
  • nepoužívejte cykly, které mají na začátku v podmínce napsané jen true!!!
while(podmínka){
  //příkazy v cyklu
}
Cyklus s podmínkou na konci (do-while)
  • proběhne alespoň jednou
do{
  //příkazy v cyklu
}while(podmínka);
Cyklus s daným počtem opakování (for)
for (inicializace iterátoru; podmínka; úprava hodnoty iterátoru){
  //příkazy cyklu
}

for($x=1; $x>=10; $x-=2){
  //příkazy cyklu
}
Cyklus pro procházení polí a kolekcí (foreach)
Řídící příkazy cyklu
  • break; - ukončí cyklus a pokračuje v kódu za ním
  • continue; - ukončí aktuální průchod cyklem a přejde na podmínku
for($x=0;$x<10;$x++){
  if (podminka){
    continue;
  }
  //další příkazy
}

Switch

  • pro výběr z více variant kódu dle hodnoty jedné proměnné
  • kód je vykonáván od příslušné shody podmínky a pokračuje až do příkazu break; (nebo prostě dál...)
switch ($promenna){
    case "A":
      /*blok kódu*/
      break;
    case "B":
      /*blok kódu*/
    default:
      /*blok kódu*/
}

Funkce

  • pro pojmenování funkcí platí stejné podmínky, jako pro názvy proměnných (jen nezačínají znakem $)
  • funkce nemusejí být zabaleny v žádných třídách
  • u funkcí je podporována typová kontrola parametrů, pokud jimi mají být instance tříd
  • funkce mohou mít také volitelné parametry, které mají rovnou přiřazenou nějakou hodnotu
  /**
   * Ukázková funkce
   * @param string $a
   * @param string $b="x"
   */
  function mojeFunkce($a, $b="x"){
    echo 'hodnota A byla '.$a.', hodnota B byla '.$b;
  }
  • návratová hodnota se vrací pomocí příkazu return
  • parametry funkcí jsou jen vstupní, pokud před jejich název nepřidáme znak & - pak je předávána reference místo hodnoty a danou proměnnou lze přepsat z těla funkce
  • příklady definice funkcí

Konstanty

  • využíváme pro globální označení konkrétní hodnoty, které jsou využívány na více místech kódu
  • pro definici vlastních konstant využíváme funkci define
    • volitelně nemusí být názvy konstant case sensitive
define("KONSTANTA", "hodnota");
define("KONSTANTA2", "hodnota", true);//konstanta bez rozlišení velikosti písmen v názvu
const KONSTANTA = "hodnota";

GOTO

  • příkaz goto umožňuje přeskočit na libovolné místo v kódu, které jsme předem označili návěštím
  • v PHP od verze 5.3, ale doporučuji nepoužívat
    • výrazně porušuje pravidla zapouzdření objektů (a dnes píšeme většinu aplikací objektově)
    • znepřehledňuje kód
    • jako identifikaci návěští, kam chceme pokračovat, stejně nejde definovat v proměnné...
navesti:
  //nějaké příkazy

if (podminka){
  goto navesti;
}

Alternativní PHP syntaxe

  • vedle aktuálně využívané "závorkové" syntaxe lze v rámci PHP využívat také syntaxi převzatou z basicu
  • obě syntaxe je možné volně kombinovat
  • PHP manuál - alternativní syntaxe
if ($podminka):
  //true větev
else:
  //else větev
endif;

for ($x=0; $x<=5; $x++):
  //příkazy cyklu
endfor;