TechNET: Developer · Mobilmánia · Wapko * EASY www.dobijanie.sk *
MAJACIK HLAVNY IMAGE STRANKY
30. Januára 2003, Štvrtok 
Lekcia 3 - SYNTAX
 

PHP skript je vlastne obyčajná WWW stránka doplnená o špeciálne príkazy. Aby server vedel, že môže dôjsť k takejto situácii a nebude mať do činenia len s obyčajnou WWW stránkou, používajú sa odlišné prípony. Klasická WWW stránka má príponu .html alebo .htm, stránka v jazyku PHP by mala mať príponu .php alebo .phtml. Záleží to od nastavenia Vášho WWW servera. V nasledujúcej tabuľke nájdete všeobecné odporučenie pre prípony, pri používaní PHP. Nie je to fixne dané, je to len nepísané pravidlo, čo znamená, že vy môžete svoje súbory označovať úplne inak. Ja som si zvykol používať príponu .php, takže ju budem používať aj ďalej v texte. Namiesto prípony .inc  používajte .php.

Možno sa  čudujete prečo, ale je to kvôli bezpečnosti. Ak to nie je   špecificky   nastavené, WWW server by po zadaní URL adresy knižnice (napr http://localhost/moja_kniznica.inc odošle prehliadaču kompletný zdrojový kód Vašej knižnice. A to určite nechcete, však? 

Dosť bolo asi teórie, prejdeme do praxe. Nikoho nenútim, aby príklady vypracovával, ale ako sa hovorí prax robí majstra. Dôležitý je aj tzv. “aha efekt”.

Príklad 1

V editore vytvoríme príklad k3_prikl1.php, ktorý bude vyzerať asi takto


Súbor uložíme do adresára, ktorý je súčasťou stromu pre dokumentov Vášho WWW servera. Uložíme ho teda tam, kde sú uložené aj Vaše WWW stránky. Teraz spustíme nejaký prehliadač a vyvoláme skript pomocou jeho URL adresy. Objaví sa stránka, ktorá informuje o systéme PHP.

Čo sa vlastne udialo? Tým, že sme napísali URL adresu 3_prikl1.php, odoslali sme WWW serveru, že chceme zobraziť tento súbor /WWW stránku/. WWW server súbor načítal a zistil podľa prípony, že pôjde o PHP skript. Preto hneď pri značke ‘<?’, ktorá označuje začiatok PHP skriptu predal riadenie modulu PHP. Ten spracoval ďalší riadok, ktorý tvorí funkcia PHPinfo(); a vygeneroval odpovedajúci HTML kód, ktorý predal WWW serveru, aby ho odoslal nášmu prehliadaču. Po  spracovaní tagu ‘?>’ , ktorý označuje koniec skriptu predal riadenie WWW serveru. Keďže WWW server zistil, že v súbore sa už nič viac nenachádza, poslal kompletnú stránku nášmu prehliadaču a  nám sa zjavila WWW stránka s popisom PHP. Čo tam robí ten riadok “THIS IS XML2 NAD ME”.  Len som si dovolil doplniť náš príklad o ďalší príkaz PHP a to príkaz echo(“THIS IS.....ME”);

Dávajte pozor na úvodzovky, nakoľko sa líši ich anglická a slovenská verzia (pod Windows), PHP chce anglickú verziu. Pod OS UNIX je to (ako obvykle) bez problémov.

Príklad 2

<?
   echo("THIS IS XML2 AND ME"); 
   PHPInfo();
?>

Určite ste si všimli, že syntax veľmi pripomína jazyk C. (Paskalisti teraz určite znechutene vstávajú a nadávajú...). Výhoda je tá, že z C-čka PHP prebralo len tie super veci, takže sa niet čoho báť. ( Optimisti, netešte sa, PHP4 alias Zend bude ako druhé C++) Preto doporučujem investovať do kúpy knižky p. Herouta: Jazyk C. Tiež sa budem držať podobnej výukovej osnovy, akú používa p. Herout, iba s tým, že pôjde o PHP.

 3.1 Základy jazyka PHP

Nakoľko PHP je program, je preto zložený z určitej sekvencie príkazov. Pretože býva uložený v HTML dokumente, treba WWW serveru jasne vymedziť, odkial ide o skript PHP a kde náš skript končí. Na to slúžia znaky ‘ <?’ a ‘?>’. Tieto znaky definuje norma SGML. Nasledujúce príklady sú ekvivalentné:

<? echo("Hello World"); ?>
<?php
  echo("Hello World with XML");
?>
 
<SCRIPT LANGUAGE="php"
          echo("Hello World now...");
</SCRIPT>

Prvý príklad je jasne najjednoduchší. Nestačí však, keď chceme použiť PHP na generovanie XML dokumentov. Vtedy uprednostníme druhú verziu, pretože XML je vlastne SGML jazyk, ktorý umožňuje používanie viacerých preprocesorov naraz a je preto nutné odlíšiť ich od seba. Tretia verzia sa používa vtedy, ak chceme, aby náš WYSIWYG editor chápal náš skript ako skript a neotravoval stále hláškami, že tam máme nejaký neznámy kód. V PHP je možné používať aj oddelovače ASP ‘<%’ a ‘%>’.

 Používanie ASP tagov sa nastavuje v  konfiguračnom súbore php3.ini direktívou asp_tags = On. Oddeľovače ASP však nepoužívajte, nakoľko neodpovedajú2 norme SGML Majú však opodstatnenie, ak používate editor, ktorý podporuje len ASP skripty...

<%
  echo ("Hello");
%>
 
<%="Hello" %> // znak = je skrátenou formou príkazu  echo

V jazyku PHP sú jednotlivé príkazy od seba oddelené bodkočiarkou, prípadne každý príkaz je ohraničený znakmi <? a ?> Tak ako v  jazyku C môžeme používať dva druhy komentárov. Pre poznámkuy a komentár po  koniec riadka použijeme znak ‘//’,  ktorý oznamuje, že za týmto má preprocesor všetko ignoro-vať až po koniec riadku. Druhý druh komentárov môže zaberať aj viac riadkov a označuje sa dvojicou znakov ‘/*’ a ‘*/’. Text uložený medzi nimi sa považuje za komentár.Preprocesor PHP je podobne ako jazyk C citlivý na velké a malé písmená v názvoch premenných, pre príkazy a funkcie je jedno, aké písmená použijeme (podobne ako PASCAL). Premenné sa vždy začínajú znakom dolár ‘$’ a môžu okrem písmen a číslic obsahovať aj znak poddtrhovník, pričom sa nesmú začínať číslicou. Premennú nie je nutné deklarovať, deklaruje sa automaticky. V prípade, že ju ani neinicializujeme, obsahuje imlicitne prázdny reťazec (STRING NULL).  PHP má k dispozícii tri základné(integer,string,double) a dva odvodené typy, medzi ktorými vykonáva automatickú typovú konverziu.

 Príklad 3

<?php
$premenna = "ahoj milan" ;       //teraz je tam string
$premenna = 5.1313 ; //a teraz je tam desatinne cislo
/* teraz vypišeme hodnotu premennej $premenna
     na obrazovku */
echo $premenna ;
?>

 

 3.1.1  I N T E G E R

Typ Integer je v PHP reprezentovaný štyrmi bajtmi. Čísla je možné zapisovať či už v desiatkovej, šestnástkovej( prefix  Ox ) alebo osmičkovej (prefox 0) sústave

Jeden z častých omylov je uvedenie prefixu 0 pred číslo. Ak priradíme do premennej $a číslo 0335, mnohí sa veľmi čudujú, že na výstupe bude číslo 221, nakoľko číslo 0335 považuje PHP za číslo v oktetovej (osmičkovej)  sústave.

 3.1.2 S T R I N G

Reťazce v PHP zapisujeme pomocou úvodzoviek, čistý text môžme aj pomocou apostrofov. Ak je nutné používať špeciálny znak vo vnútri reťazca, je nutné použiť tzv. escape sekvencie. C-čkarom nie je nutné vysvetlovať viac. Okrem escape sekvencií je možné používať aj ASCI kód znaku. Escape sekvencie je možné používať iba v reťazcoch uzavretých do úvodzoviek.

význam

znak

sp. lomítko

\\

návrat vozíka

\r

tabulátor

\t

úvodzovky

\"

dolár

\$

Ak chceme pristupovať k jednotlivým znakom reťazca, pristupujeme k nim ako k prvkom poľa pomocou zátvoriek. Toto pole je číslované od nuly.
Príklad 4

   
<?php 
$a = 10;
echo "V premennej \$a je hodnota $a <BR>" ;
echo ' A toto je cisty test <BR>';
$b = "Milan Gacik";
echo " $b[0] <BR>";
//vypise M $c = "\x41\0302"
echo " $c <BR>" ; // vypise AB 
$x = 0Xff ; // o premenej uložime 255 
$vysledok = $x + $a ; 
echo "Vysledok je $vysledok <BR> "; //vypise 265
?>  

 3.1.3  D O U B L E

Typ double reprezentuje desatinné čísla, spravidla uložené do 8 bajtov. K dispozícii máme 15 platných číslic  Môžme však používať matematickú knižnicu BC, ktorú PHP priamo podporuje. Čísla je možné zadávať aj v exponencionálnom tvare.

$premenna = 4.2e3 ;// použitie exponenc. tvaru

3.1.4  P O L E

Pole je špeciálna dátová štruktúra, v ktorej sú jednotlivé premenné prístupné pomocou indexu.Index pola sa zapisuje do hranatých zátvoriek. Jednotlivé prvky poľa môžu byť ľubovolného typu, pričom index poľa môžu tvoriť aj reťazce.

 
$pole[0] = "Slovensko";
$pole[1] = "Maďarsko";
$pole[2] = "Rusko";
 
$obsah_skrine[0] ="Kosela";
$obsah_skrine[2] = 5;
$obsah_skrine[33] = 1.111111;
 
$plat["Milan"] = 10000;
$plat["Jozo"] = 20000;

 

Pole môžeme inicializovať priradením hodnôt ku každému prvku, alebo jednoduchšie a ľahšie pomocou funkcie Array Funkcia bude ukladať hodnoty na prvé  indexy, prípadne od určitého indexu. Podobne je možné využiť tzv. prázdny index, kde sa hodnota uloží na miesto prvého voľného indexu. Viac napovedia príklady:

$mesiac[ ]="Januar";// tu indexuje od 0
$mesiac[ ]="Februar";
$mesiac[ ]="Marec";

Skúsme použiť array.

$mesiac = Array("Januar","Februar","Marec");// tu indexujem od 0
$mesiac = Array(1=>"Januar","Februar","Marec");// tu index od 1

Operátor ‘=>’ môžeme použiť u ľubovolného prvku poľa. Občas je vhodné použiť aj viacrozmerné pole. Vtedy stačí pridať do hranatých zátvoriek ďalší index, pričom napr. dvojrozmerné pole sa práva ako pole jednorozmerné, ktorého jednotlivé prvky sú tiež jednorozmerné polia.  

Príklad 5

Vytvorte program, ktorý vypočíta súčet prvkov na diagonále.

<?php
5
4
3
3
2
1
1
0
0
$M= Array (Array(5,4,3), Array(3,2,1), Array(1,0,0));
$vysledok = $M[0][0] + $M[1] [1] + $M [2] [2];
echo "Vysledok je ".$vysledok." <BR>" ;
?>

Nezabudnite, že pole je indexované od nuly!
Pri práci s poľom sa často používajú nasledujúce funkcie:

Reset ()          - nastaví index na prvý prvok poľa

Current()        - vráti hodnotu prvku poľa

Next()            - posunie ukazovateľ a vráti hodnotu prvku poľa

Count()           - zistí počet prvkov poľa

Key()              - vracia index poľa, na ktorý je nastavený ukazovateľ

Veľmi dôležitá je aj funkcia List(), ktorá zabezpečuje načítanie poľa do premenných.

List ($mesiac_1,$mesiac_2,$mesiac_3) = $mesiac;

V premennej $mesiac_1 bude “Januar”, v premennej $mesiac_2 “Februar” atď.

3.2 TYPOVÉ KONVERZIE

Ako som už spomínal, PHP podporuje automatické pretypovanie. Znamená to, že ak sčítame premennú typu integer s premennou typu double, výsledok bude typu double.. V prípade, že chceme typ premennej nastaviť manuálne, použijeme funciu SetType ($premenna, ”cielovy_typ”). Ak chceme zistiť, akého je premenná typu, pou6ijeme funciu GetType(premenna). Podobne môžeme použiť aj funkcie Is_Integer, Is_String, Is_Double, Is_Array,Is_Object. Je možné používať aj tzv. jednorázové pretypovanie známe z C-čka, kde stačí žiadaný typ uviesť do zátvorky pred premennú.
$a = 5.5 ;           //typ double
$b = 10;                   //integer
$c = $a + $b;        //vysledok je double
$d = (integer) $c;       // pretypujeme na integer
SetType( $d,"double");          // a znova na double

 

Pri konverzii string na číslo a opačne PHP postupuje nasledovne

1. Ak retazec obsahuje na prvom mieste pismeno, bude = 0 inak krok 2

2. Ak reťazec obsahuje ‘.’ , ‘E’ alebo ‘e’, bude typu double, inak bude typu integer.

Príklad 6

Skúste odhadnúť, čo bude výsledkom typovej konverzie. Vaše odhady overte v PHP. Určte,  akého bude premenná $a typu.

$a = 100+ "100";
$a = 100+ ".100";
$a = 100+"Januar";
$a = 100+"10 Januar";
$a = 100+"-10e10 Januar"

3.3 KONŠTANTY 

Konštanta slúži podobne ako premenná k uchovaniu hodnôt, ale na rozdiel od premennej nemôže meniť svoju hodnotu. tá je prevne definovaná pri inicializácii konštanty. Pre vytvorenie konštanty slúži funkcia define(meno_konštanty, hodnota, citlivosť_na_velkost_pismen). Posledný parameter (true, false) nie je povinný.

define("pocet_mesiacov",12,true);

Konštanty pocet_mesiacov, POCET_MESIACOV atď.. budú mať rovnakú hodnotu, a to 12. Na overenie, či je konštanta definovaná, slúži funkcia defined (konštanta)

3.4 Premenná typu VARIANT 

Premenná typu variant predstavuje výkonný systém odlišného prístupu k premennej. Viac napovie príklad:

$a = "b";
$b = "Ahoj";
echo $$a;

Čo sa vlastne udialo? Do premennej a sme uložili reťazec b. Preto príkaz echo vypísal hodnotu premennej $b. Výhody? Netušené, aj keď sa to nemusí zdať. Napríklad môžme ukladať do premenných príslušné hodnoty. Táto vec napr. BORLAND DELPHI strašne chýba.

$cislo_mesiaca=5;
${"mesiac".$cislo_mesiaca} = 31;     //priradi do premennej $mesiac5   pocet dni 31

 Typ variant je vhodné používať aj ako ukazovateľ na funkcie. V novej verzii PHP však bude tento systém trochu prepracovanejší.

 $funkcia = "Sin";
echo $funkcia(100) ; //vypise sinus uhla 100

3.5 OBJEKTY A TRIEDY  

Prívrženci OOP (objektovo orientovaného programovania) sa doteraz určite len pousmievali a zabávali sa nad týmito „prízemnosťami“. Mám tu však aj niečo pre nich. Jazyk PHP prináša možnosť definície tried. Trieda je určitý typ, ktorý obsahuje dáta a dátové štruktúry (ale aj nemusí) a funkcie (metódy), ktoré su nad danými dátovými štruktúrami definované. Inštancia triedy v programe sa nazýva 3. objekt. Objekt je teda fyz. štruktúra v pamäti počítača, pričom trieda je len akýsi predpis, ako objekt vytvoriť. Pomocou tried a objktov dosiahneme väčšiu čistotu a bezpečnosť programu, nakoľko to vychádza z objektovo orientovaného programovania a jeho troch základných vlastností: dedičnosti, polymorfizmu a zapúzdrenosti.

Trieda má v jazyku PHP nasledovný schématický tvar

class meno_triedy
{
    definícia premenných [ = inicializačná hodnota ] ;
    definícia funkcií ;
}
Definícia premenných začína kľúčovým slovom var. Zoznam premenných oddeľujeme čiarkami, riadky bodkočiarkami. Pri definícii triedy je možné ju hneď aj inicializovať, ale nie je to povinné.
class Cstudent
{
  var $aMeno, $aPriezvisko,$aRC;
  var $aAdresa = "SLOVENSKO";
}

Teraz vytvoríme inštanciu triedy, objekt a priradíme ho premennej $student. Inštanciu vytvoríme použitím funkcie new. Dealokáciu nevyužívaných objektov a premenných PHP zabezpečuje automaticky. K jednotlivým premenným objektu pristupujeme pomocou operátora ‘->’.

$Student = new Cstudent;
$Student->aMeno = "Milan";
$Student->aPriezvisko = "Gacik";
$Student->aRC = 7701116666;
$Student->aAdresa = "Tatranska Lomnica";
echo $Student->aMeno . "BÝVA NA ". $Student->aAdresa ." <BR>" ;

Funkcie manipulujú s dátami v objekte. Podľa princípov OOP (zapúzdrenie) by sa malo k premenným pristupovať len pomocou definovaných funkcií (metód). My si k triede Cstudent vytvoríme jednu jednoduchú funciu Pohlavie() , ktorá zistí z rodného čísla, o koho ide. Vo funkcii musíme používať operátor this, ak chceme pristupovať k premennej, nakoľko tá ešte fyzicky neexistuje.

Príklad 7

<?php
class Cstudent
{
// definicia premennych 
var $aMeno, $aPriezvisko,$aRC;
var $aAdresa = "SLOVENSKO"; 

// definicia funkcii 
function Pohlavie() 
{ 
if (($this->aRC[2]=="5")or($this->aRC[2]=="6" )) 
echo "JE TO ZENA <BR>"; 
else echo "JE TO MUZ <BR>"; 
}
}

//Teraz vyskúšame:

$Student = new Cstudent;
$Student->aMeno = "Milan";
$Student->aPriezvisko = "Gacik";
$Student->aRC = (string) 7756116666;
$Student->aAdresa = "Tatranska Lomnica";
echo $Student->aMeno." ".$Student->aPriezvisko." BÝVA NA ADRESE: <BR>".
$Student->aAdresa ." <BR>" ;
$Student->Pohlavie();
?>

Funkcie budú podrobnejšie rozobraté ďalej. Pravdaže, je možné volať funkciu aj s parametrami. Medzi špeciálne funkci patria konštruktor a deštruktor. Ich názov sa zhoduje s názvom triedy a plnia špeciálne funkcie, konštruktor inicializuje a alokuje zdroje objektu, deštruktor ich zas uvoľnuje. PHP vo verziin 3.x implementuje len konštruktor. (Ako to bude v PHP 4.x, nie je mi zatiaľ úplne jasné- nasledujúci príklad preto nemusí byť funkčný na PHP 4 ktorý implementuje this trochu odlišne).

Príklad 8
 
<?php
class Cstudent
{
// definicia premennych 
var $aMeno, $aPriezvisko,$aRC; 
var $aAdresa = "SLOVENSKO"; 
function Cstudent ($aMeno,$aPriezvisko,$aRC,$aAdresa) 
{ 
$this->aMeno = $aMeno; 
$this->aPriezvisko = $aPriezvisko;
$this->aRC= $aRC; 
$this->aAdresa= $aAdresa  
} 
function Pohlavie() 
{ 
if (($this->aRC[2] ==”5” ) or ($this->aRC[2]==”6” )) 
echo “JE TO ZENA <BR>” 
else echo “JE TO MUZ <BR>”; 
}
}


$Student = new Cstudent(“Milan”,”Gacik”,"7701117777",”Vysoke Tatry”);
$Student->Pohlavie();

?>

Konštruktor je vhodné inicializovať default hodnotami vhodné sú napr. NULL stringy

function Cstudent($aMeno = "",$aPriezvisko="",$aRC=0,$aAdresa="")   //konštruktor
                {
                    $this->aMeno    = $aMeno;
                     $this->aPriezvisko = $aPriezvisko;
                     $this ->aRC     = $aRC;
                     $this->aAdresa  = $aAdresa;           
                }

Inicializovať potom môžeme rôzne. V prípade, že nedodáme atribút, konštruktor použije default hodnotu.

$student1 = new CStudent("Milan");
$student2 = new CStudent ();

Dedičnosť je ďalšia vlastnosť, ktorá je v PHP implementovaná. Škoda len, že na polymorfizmus sa dostane asi až vo verzii PHP4/ZEND.

Máme teda možnosť vytvoriť triedu, ktorá zdedí dátové typy aj metódy. K novovzniknutej triede môžeme však pridať aj nové dátové typy a nové metódy. Pre dedičnosť sa používa kľúčové slovo extends. Predpokladajme, že každý študent musí mať od nového roka aj občiansky preukaz (viem, že je to somarina, ale nevadí). Vytvoríme teda novú triedu CStudentNew

 

class CStudentNew extends Cstudent
{
  var aCislo_OP;
  function Vypis_OP()
                {
                   echo $this->aCislo_OP . "<BR>";
                }
}
 
$Novy_Student = new CstudentNew;
$Novy_Student->aCislo_OP = "SD 3789 111";
$Novy_Student->Vypis_OP();

3.6 Jednoduché výrazy 

Výraz je vlastne hocičo, čo má nejakú hodnotu. Konštanta, či premenná suú takisto výrazy. Funkcia, ktorá vracia hodnotu sa tiež považuje za výraz. V PHP sa priradenie  tiež chápe ako výraz

            premenná = výraz;

Inicializovanie premennej je teraz už ľahká záležitosť. Preprocesor vyhodnocuje z prava do ľava, takže všetky premenné budú mať hodnotu 0;

$a = 0; $b =0; $c = 0;
$a = $b =$c =0;

Zložitejší výraz tvorí nasledujúce priradenie:

            premenná = výraz bin_operátor výraz;

lný zápis

Skrátený zápis

a = b + c

-

a = a + c

a += c

a = a - c

a -= c

a = a * c

a *= c

a = a / c

a /= c

a = a % c

a %= c

Operátory majú stanovenú určitú prioritu, ktorú je možné ovplyvňovať pomocou zátvoriek. Tabuľka priorít je uvedená nižšie. PHP podobne ako C-čko podporuje skrátený  zápis priradení. V nasledujúcej tabulke je uvedený prehľad operácií, ktoré PHP umožňuje zadávať v skrátenej forme. Takže PHP rozpoznáva dva základné druhy operátotov: unárne (+ , - ) a binárne (+,-,*,/,celočíselné delenie / a následné pretypovanie a delenie modulo % ).To, či bude delenie celočíselné alebo nie tu na rozdiel od jazyka C nezávisí od typov operandov. PHP pozná špeciálne typy unárnych operátorov, ktoré su v PASCALE neznáme a to: inkrement(++) a dekrement ( - - ). Oba operátory je možné použiť ako predponu (prefix – a priori) alebo príponu (suffix- a posteriori), pričom to má rôzny význam

   ++ výraz                                     výraz++

 * inkrementuje pred použitím                 * ikrementuje po použití         

 * výraz sa najprv zväčší o jednotku        *  je vrátená pôvodná hodnota 

   a nová hodnota je vrátená ako             výrazu a potom je výraz 

   hodnota  výrazu                                   zväčšený o jednotku

 
$a = 10;
$a++;
$b =++$a;
$d = --$b – 2;
 

operácia

PASCAL

PHP

rovnosť

=

= =

nerovnosť

<>

! =

logický súčin

AND

& &

logický súčet

OR

| |

negácia

NOT

!

menší

<

menší alebo rovný

<=

väčší

>

väčší alebo rovný

>=

V prípade, že potrebujeme výraz, ktorého výsledkom je pravda (TRUE) alebo nepravda (FALSE), použijeme napríklad v jazyku PASCAL typ Boolean. V jazyku PHP však tento typ implicitne nie je, miesto neho sa používa typ Integer, kde nulová hodnota znamená FALSE a nenulová (najčastejšie 1, ale nemusí to byť vždy tak) TRUE. V nasledujúcej tabulke nájdete rozdiely medzi booleanovskými výrazmi v jazyku PASCAL a PHP. Nezabudnite si uvedomiť rozdiel medzi porovnaním  = = a priradením =.

 

$i = 5 je priradenie, ktoré mení hodnotu premennej i na hodnotu 5                 

$i == 5 je výraz, ktorý vracia TRUE, ak premenná i jmá hodnotu 5 a FALSE, ak má inú hodnotu, pričom hodnota i sa nemení

Jazyk PHP podporuje podobne ako C skrátené vyhodnocovanie logických výrazov.Argumenty výrazov sú vyhodnocované zľava doprava a hneď ako je možné určiť konečný výsledok, vyhodnocovanie končí. Táto vlastnosť (short circuit) sa využíva, napr. výraz

if  ($y != 0 && $x / $y < $z)

je správny a k deleniu nulou (DIVISION BY ZERO) nedôjde, pretože prvá časť výrazu $y != 0 ukončí vyhodnocovanie výrazu ešte pred delením.

3.7 Priority vyhodnocovania log. operátorov

Podobne ako v jazyku C, má v PHP každý  operátor definovanú svoju prioritu, takže pri zložitejších operáciách a výrazoch je presne určené, čo sa bude vykonávať ako prvé.  Ak majú dva operátory rovnakú prioritu, vykonávajú sa postupne zľava doprava

Z tabulky je jasné, že napríklad index poľa a zátvorky majú vyššiu prioritu ako napríklad inkrement, preto výraz ++$Pole[10] bude vyhodnocovaný takto: Ideme zprava doľava (implicitný smer) a nájdeme operátor s najvyššou prioritou [ ].Podľa asociativity budeme postupovať teraz zľava doprava, našli sme premennú $Pole, takže budeme niečo vykonávať s  prvkom poľa $Pole s indexom 10. Vyhodnocujeme výraz ďalej. Ďalší operátor v poradí priorít je inkrement ++, ktorý vyhodnotíme zprava doľava, takže nám zvýši hodnotu prvku poľa s indexom 10. (po lopate 10ty prvok poľa $Pole sme zvýšili o 1).

 

 V PHP majú aritmetické operátory a operátor porovnania vyššiu prioritu, ako logické operátory, takže výraz  

if  ($plat >= 10000 && $plat <= 20000)                                                                         

je správny, pričom Paskalovský výraz

if ($plat >= 10000 AND $plat <= 10000)         

je chybný

Preto v logických výrazoch (a často nielen tam) platí pravidlo: “Zátvorka nič nepokazí”

Na precvičenie príklady. Skúste ich vyhodnotiť sami.

$b = $b && ($a = 2) ;
$b = $b && ($a == 2) ;
$b = $b ||  ($a / 2) ;
$b = !$b && ($a = $a + 1) ;

Tu sú správne výsledky:

1.      a bude 2, b bude 1, pretože b == 1 (TRUE) a výraz a =2 TRUE (nenulový)

2.      b bude 0, pretože a == 1 FALSE

3.      b bude 1 ,a zátvorke nezáleží

4.      b bude 0, a zostane 1, pretože !b je FALSE  

Ak ste správne vyhodnotili všetky výrazy, môžete sa smelo pustiť ďalej. V opačnom prípade si ešte raz preštudujte príslušné pasáže, nakoľko neznalosť takýchto elementárnych vecí sa zvykne neskôr vypomstiť. C-čkarom by to nemalo robiť žiadne väčšie problémy.

Pre spájanie reťazcov slúži operátor ‘.’ Operátor prevedie operandy na reťazce a spojí ich do jedného reťazca. Samozrejme je možné používať aj skrátený operátor ’ .=’

Príklad 9

$presny_cas="10:23";
echo "Hello World ". $presny_cas." <<<";
$retazec = "Ahoj ";
$retazec .= " svet";  
echo $retazec; // vypíše “Ahoj svet”

Prvý krát sa stretávame so symbolom rekapitulácie, nakoľko nasledujúca kapitola obsahovala toľko vecí, že rekapitulácia by zabrala ďalšie 3 strany, jej opakovanie nechám na Vás. Nezabudnite si však vypracovať nasledujúce kontrolné príklady, budú testom, či danej problematike naozaj rozumiete.

Kontrolné príklady

 

1.      Vytvorte skript, ktorý vypíše “Priklad 1” a odriadkuje.

2.      Vytvorte skript, kde budete mať v poli názvy mesiacov.

3.      Vytvorte skript, kde v poli budete mať uložené adresy svojich zamestnancov, pričom indexy poľa budú ich mená

4.      Vyskúšajte si typovú konverziu








N Á V R A T

Copyright 2003 MGX


 
Dnes má meniny
Ema
nic.sk - domeny + hosting
PHP Club

Klub
 Registrácia
 Informácie
Special
 XML I diel
 
XML II diel
 
XML III diel
 
XML IV diel
 
XML V diel
 
XML VI diel
 
XML VII diel
 
XML VIII diel
 
XML IX diel
 
Anketa č. 21
Považujem sa za...
(Odpovedalo už 1579 ľudí)

PHP guru (157)
 10%
Perfektného programátora v PHP( 117)
 7%
Strednú triedu (373)
 24%
Začiatočníka (743)
 47%
Čo je PHP ? (189)
 12%

Klikni na zvolenú odpoveď!
Výsledky minulých ankiet.
 
Diskusia

PRÍSPEVKY
 Podľa tém
 Podľa dáta
 Podľa klikov
 Iba dnešné

UTILITY
 Registrácia
 Zmena hesla
 Zmena profilu

Dobré linky:
PC News
Developer
  (c) 2003 www.php.sk