PHP_01 - Základy jazyka

1. Obsah

  1. Obsah
  2. Úvod
  3. Začlenění PHP do stránek
  4. Typy proměnných
  5. INTEGER
  6. DOUBLE
  7. STRING
  8. ARRAY
  9. Přetypování a konverze
  10. Operace s proměnnými
  11. Komentáře
  12. Předávání obsahu prvků formuláře do proměnné
  13. Úkol
  14. Zdroje a citace
[Zpět]

2. Úvod

[Zpět]

3. Začlenění PHP do stránek

Nejjednodušší způsob:
<? echo "1.způsob"; ?>
U tohoto způsobu ale pozor na nastavení některých webových hostingů, které z důvodu podpory více interpetovoaných jazyků, tuto zjednodušenou direktivu <? nepodporují, proto se obecně doporučuje používat následující 2. způsob, který funguje vždy a všude!

Vhodné pro generování XML dokumentů:
<?php print "2. způsob"; ?>

Když to jinak nejde:
<script language="php">
    echo "3. způsob";
</script>

Příkaz echo versus print:
Podle této studie je příkaz echo o něco rychlejší než příkaz print - při zpracovaní velkého objemu výstupních dat. Osobně mám z praxe vyzkoušeno, že je vhodné všude na výstup dat používat příkaz echo a print používat jen při debuggingu (lazení) aplikace pro výstup kontrolních dat či chybových hlášek. Poté stačí, před nasazením aplikace do ostrého provozu, skripty aplikace projít hromadným vyhledávaáním a odstranit všechny printy, aby někde nedocházelo ke zobrazování dat uživatelům, které jim nejsou určena.

Úkol:
Vytvořte na vašem serveru, který podporuje PHP (Apeche, WAMP, ...) skript bez diakritiky "vase_prijmeni.php" a vložte do něj následující kód:

<?php
	phpinfo();
?>

Skript zavolejte v prohlížeči na adrese http://localhost/vase_prijmeni.php a prohlédněte si výsledek.

[Zpět]

4. Typy proměnných

Pravidla pro použití a tvorbu názvu proměnné:

Doporučená pravidla pro použití a tvorbu názvu proměnných:

[Zpět]

5. INTEGER

Rozsah je <-2 147 483 648; + 2 147 483 648>
V šestnáckové soustavě zapisujeme ve tvaru 0xčíslo nebo 0Xčíslo, používáme malá nebo velká písmena ABCDEF.
Pozor! Pokud číslo začíná nulou pak je považováno za číslo v osmičkové soustavě.
[Zpět]

6. DOUBLE

Rozsah je přibližně <-1.7 10308; +1.7 10308>.
Nejmenší kladné číslo je 3.4 10-324. Větší přesnost dosáhnete s použitím knihovny BC.
Čísla v exponenciálním tvaru zapisujem pomocí e nebo E.
[Zpět]

7. STRING

Řetězce zapisujeme do uvozovek ("text") nebo apostrofů ('text'). Pokud potřebujeme speciální znaky použijeme "escape sekvence" začínající zpětným lomítkem (\).
Sekvence Význam
\t tabulátor
\\ zpětné lomítko
\$ dolar
\" uvozovky
\' apostrof (jen u řetezce, který začíná apostrofem!)
\r "návrat vozíku"
\n nový řádek
\r\n ukončení řádku ve windows
Znaky můžete napsat také pomoci ASCII kódu, jak je vidět v následující tabulce.
ASCII Znak
\41 osmičková soustava A
\x42 šestnáctková soustava B

V PHP je velký rozdíl v použití uvozovek nebo apostrofu pro definování hodnoty retezce. Rozdíl mezi uvozovkami a apostrofy uvidíte na následujících příkladech.

Příklad 6.1
Vytvořte si na vašem webovém serveru skript retezec.php a do něj vepište tento kód:
<?php
	$skola = "EDUCAnet Brno";
	echo "Moje škole se jmenuje $skola.<br />\r\n";
	echo 'Moje škole se jmenuje $skola.';
?>
Vyzkoušejte výstup v prohlížeči zadáním adresy http://localhost/retezec.php a provnejte výstup!

Řetězec je pole znaků, ukážeme na příkladu.

Příklad 6.2
Vytvořte si na vašem webovém serveru skript retezecjepole.php a do něj vepište tento kód:
<?php
	$skola = "EDUCAnet Brno";
	echo $skola."<br />\r\n";
	echo $skola[0];
	echo $skola[1];
	echo $skola[2];
?>
Vyzkoušejte výstup v prohlížeči zadáním adresy http://localhost/retezecjepole.php a provnejte výstup!
[Zpět]

8. ARRAY

Prvky pole mohou být libovolného typu.
Příklad 7.1:
    $pole[0] = "škola";
    $pole[1] = 2006;
    $pole[2] = 3.14;

Můžete použít i asociativní pole.
Příklad 7.2:

    $pole["skola"] = "EDUCAnet Brno";
    $pole["zeme"] = "MORAVA";
Pro použití asociativního pole uvnitř řetězce uvozeného uvozovkami ("), se používá speciální notace pomocí složených závorek { }. Takže náš index zeme bychom z $pole v našem řetezci zavolali takto:
    echo "Země pro naší školu je {$pole['zeme']} dobré, že?";

Jiný způsob inicializace pole.
Příklad 7.3:

	$pole = Array ("Petr", "Pavel", "Jiří",);
Za poslední položkou v poli může volitelně následovat čárka, ale nemusí, což se hodí napžíklad při generování pole pro PHP skript v jiném jazyce Java, Perl a podobně.

Pokud chceme aby indexace pole začínala od 2 nikoli od 0 zvolíme zápis jako v příkladu 7.4.
Příklad 7.4:

	$pole = Array (2=>"leden", "únor", "březen");

Můžete definovat i vícerozměrná pole, jak je vidět v příkladě 7.5.
Příklad 7.5:

<?php
    $pics_arr['245AH']['PIC_DIR'] = '2'; // adresar s obrazky
    $pics_arr['245AH']['GEO'] = Array('GEO_49_996582_17_271894.PNG');
    $pics_arr['245AH']['A'] = Array('A1_245AH.JPG'=>'A1_245AH_HOV.JPG');
    $pics_arr['245AH']['B'] = Array('B1_245AH.JPG'=>'',
                                    'B2_245AH.JPG'=>'',
                                    'B3_245AH.JPG'=>'B3_245AH_HOV.JPG');
    $pics_arr['245AH']['GPS'] = '49°59\'47.688"N 17°16\'18.805"E Přesnost GPS umístění: ±5 m'; 
    $pics_arr['245AH']['EQI'] = Array(1,7); // vybaveni
    $pics_arr['245AH']['ACC'] = Array(3,6); // dostupnost
?>
[Zpět]

9. Přetypování a konverze

Většinu přetypování a konverze provádí PHP automaticky. Pokud chceme mít jistotu, používáme následující funkce.

    GetType($promenna)
    Is_Integer($promenna) 
    Is_Double($promenna) 
    Is_String($promenna) 
    Is_Array($promenna) 
    Is_Object($promenna)

Změnu typu proměnné provádíme funkcí SetType($promena, typ).

Dočasnou změnu pro použití ve výrazu následovně $realnecislo = (double) $celecislo;.

[Zpět]

10. Operace s proměnnými

Matematické operátory
Operace Normální způsob Poznámka
sčítání $a = $a + $b; $a += $b;  
odčítání $a = $a - $b; $a -= $b;  
násobení $a = $a * $b; $a *= $b;  
dělení $a = $a / $b; $a /= $b;  
modulo $a = $a % $b; $a %= $b;  
preinkrementace $a = $a + 1; ++$a; zvětší o 1, pak vrátí hodnotu
postinkrementace $a++;   nejprve vrátí hodnotu, pak zvětší o 1
predekrementace $a = $a - 1; --$a; zmenší o 1, pak vrátí hodnotu
postdekrementace $a--;   nejprve vrátí hodnotu, pak zmenší o 1
Vysvětlení rozdílu pre/post - inkrementce a dekrementace vidíte v příkladu 9.1
Příklad 9.1:
<?php
    echo "Postinkrementace";
    $a = 5;
    echo "Mělo by být 5: " . $a++ . "<br>\n";
    echo "Mělo by být 6: " . $a . "<br>\n";
    
    echo "Preinkrementace";
    $a = 5;
    echo "Mělo by být 6: " . ++$a . "<br>\n";
    echo "Mělo by být 6: " . $a . "<br>\n";
    
    echo "Postdekrementace";
    $a = 5;
    echo "Mělo by být 5: " . $a-- . "<br>\n";
    echo "Mělo by být: " . $a . "<br>\n";
    
    echo "Predekrementace";
    $a = 5;
    echo "Mělo by být 4: " . --$a . "<br>\n";
    echo "Mělo by být 4: " . $a . "<br>\n";
?>
Logické operátory
Příklad Nebo Název Výsledek
$a and $b $a && $b And TRUE, když $a a $b současně mají hodnotu TRUE.
$a or $b $a || $b Or TRUE, když $a nebo $b má hodnotu TRUE.
$a xor $b   Xor TRUE, když pouze $a má hodnotu TRUE nebo pouze $b má hodnotu TRUE.
!$a   Not TRUE, když $a nemá hodnotu TRUE.
Znak ' | ' můžeme na české klávesnici napsat stisknutím pravého Altu a w (Alt + W).

Spojování řetězců
Pro spojování (zřetězení) používáme operátor tečka, nikoli operátor plus (+). Pokud náhodou použijete plus místo tečky bude výsledný řetězec 0!
Příklad 9.2:

    $celynazev = $nazev1.$nazev2;
    $pozdrav = "Ahoj ".$jmeno;
    $pozdrav .= "a na závěr";

Ternární (podmíněný) operátor
Velice užitečný zápis jednoduchých podmínek, který šetří čas a misto ve skriptech. Ternální operátory lze samozřejmě i zanořovat, ale je potřeba vhodně uzávorkovat výrazy a přikazy. Ternální operátor ve stejném syntaktickém použití využijete ve všech post-cobolských jazycích jako je C, C#, Java, Javascript a pod.
Obecná syntaxe výrazu: podmínka?prikaz_pri_pravde:prikaz_pri_nepravde;

Příklad 9.3:
Pokud je podmínka pravdivá bude proveden příkaz 1 jinak bude proveden příkaz 2.
<?php
	  $cislo = 0;
	  echo ($cislo > 0)?"číslo je kladné":"číslo je záporné ";
?>

Příklad 9.4:
Ukázka zanořeného ternálního operátoru pří zjištění dělitelnosti čísla čísly 2 a 6.
Podle přiřazené hodnoty do proměnné $cislo bude vypsána jedna z možností:

<?php
$cislo = 6;
echo 'Dělistelnost '.(($cislo % 6 == 0) && ($cislo % 2 == 0))?'6 i 2.':
     ('jen '.($cislo % 6 == 0)?'6.':($cislo % 2 == 0)?'2.': 'ani 6 ani 2.');
?>
Všimněte si optimalizace redundancí v kódu pomocí zřetězeni a podobně.
[Zpět]

11. Komentáře

[Zpět]

12. Předávání obsahu prvků formuláře do proměnné

Předávání probíhá metodou get nebo post. Za tímto účelem existují v php globální pole $_POST[] a $_GET[] (Pozn.: způsobů předání je více např. pomoci pole $_REQUEST, případně jde PHP kompiler nastavit, aby všechny prvky formulářů s uvedeným name převáděl na proměnné jako $hodnota_name_atributu, což je ale velice nevhodný způsob ze strany výkonu...)

Příklad 11.1:
Ukázka formuláře v HTML.

   <form method="post_nebo_get" target="cilova_adresa_formu">
      Zadejte prosím vaše jméno:
      <input type="text" name="uzivatel">
      <input type="submit" value="Odeslat" name="odeslat">
    </form>

V PHP se pak podle typu metody na formu zavolá hodnota inputu uzivatel takto:

<?php
    // v pripade metody GET
    $uzivatel=$_GET['uzivatel'];
    
    // v pripade metody POST
    $uzivatel=$_POST['uzivatel'];
?>

...samozřejmě se takto dá zavolat i input odeslat. Také nesmíme zapomenout ošetřit vstupy pro případ, že:

  1. input není vyplněn,
  2. není stisknuto tlačítko odeslat,
  3. vložená data proti útokům SQL injection, XSS a pod.

Ale ono ošetření je již na vás, na metodách jaké zvolíte a podobně, ale přidávám příklad jedné ze základních metod ošetření pro případ 1.

Příklad 11.2:
<?php
    
    // v pripade metody GET 
    // -> osetreno jen na exsitujici hodnoty pomoci ternalniho operatoru a metody isset 
    // (lze pouzit i metodu empty)
    $uzivatel=isset($_GET['uzivatel'])?$_GET['uzivatel']:'';
    
    // v pripade metody POST
    // -> osetreno jen na exsitujici hodnoty pomoci ternalniho operatoru a metody isset 
    // (lze pouzit i metodu empty)
    $uzivatel=isset($_POST['uzivatel'])?$_POST['uzivatel']:'';
?>
[Zpět]

13. Úkol

Napište php skript ukol01.php, který zpracuje data z tohoto formuláře (metoda je post položky cislo1 a cislo2 ):
S čísly provede 5 různých matematických operací a vypíšte je. (ve tvaru např. 1 + 2 = 3 atd.)

Úkol

[Zpět]

14. Zdroje a citace

  1. ACHOUR, Mehdi, Friedhelm BETZ, Antony DOVGAL, Nuno LOPES, Hannes MAGNUSSON, Georg RICHTER, Damien SEGUY a Jakub VRÁNA. PHP: PHP Manual. [online]. [cit. 2012-08-21]. Dostupné z: www.php.net/manual/
  2. W3SCHOOLS.COM. PHP Operators [online]. [cit. 2012-08-21]. Dostupné z: http://www.w3schools.com/php/php_operators.asp
  3. VRÁNA, Jakub. Kniha 1001 tipů a triků pro PHP [online]. 1. vyd. 2010 [cit. 2012-08-21]. Dostupné z: http://php.vrana.cz/kniha-1001-tipu-a-triku-pro-php.php
  4. How to differentiate between the popular Echo and Print commands in PHP. In: Learn PHP Online [online]. [cit. 2012-08-22]. Dostupné z: http://www.learnphponline.com/php-basics/php-echo-vs-print
  5. Poznámky neznámého učitele ze SPŠ Zlín :-)
[Zpět]

HTML5 Powered with CSS3 / Styling, Device Access, Graphics, 3D & Effects, and Semantics
© Jan Wellech 2012, ver. 1.2