Navigácia
- Výrazy a operátory
- Priorita vyhodnocovania operátorov
- Reťazce
3.1 Funkcie pre prácu s reťazcami
3.1.1 strlen();
3.1.2 strpos();
3.1.3 implode();
3.1.4 explode();
3.1.5 htmlspecialchars();
VÝRAZY a OPERÁTORY
Výrazom v PHP môžme nazvať hocičo čo má nejakú hodnotu. Napríklad aj také premenné ,alebo konštanty sú výrazy.$premenné = výraz;
Operátory sú vlastne znaky pomocou ,ktorých vykonávame potrebné úkony medzi výrazmi. Majú určitú prioritu - tabuľka priorít je uvedené nižšie. Takisto ako v iných programovacích jazykoch je možné operátory vyjadrovať skráteným zápisom.
PHP pozná základné 2 typy operátorov :
unárne (+ , -)
binárne (+ , - , * , / )
PHP pozná ešte špeciálne typy unárnych operátorov :
inkrement (prefix ++) - ++výraz - výraz sa najprv zväčší o jednotku a až potom je jeho nová hodnota vrátená ako hodnota výrazu
dekrement (suffix --) - výraz++ - najprv je vrátená pôvodná hodnota výrazu a až potom je zväčšený o jednotku
Niekedy je potrebný výraz ,ktorého výsledkom je buď pravda (true) ,alebo nepravda (false). PHP na tento výraz nemá špeciálny typ , ale použije sa klasický integer. Kde nulová hodnota znamená false a nenulová true.
Príklad 8
<?php $a = 10; ++$a; //nacita jednotku a vrati novu hodnotu = 11 $b = ++$a; // takisto nacita jednotku a vrati novu hodnotu = 12 echo "$b <br />"; // vypise 12 $a = 10; ++$a; // hodnota = 11 $b = $a++; // vrati podvodnu hodnotu = 11 a potom pripocita jednotku echo "$b <br />"; //vypise 11 ?> |
Tabuľka operátorov
Operátor | Popis |
== |
rovná sa |
!= | nerovná sa |
&& |
logický súčin "AND" |
|| | logický súčet "OR" |
| |
zápor , negácia |
< | menej ako |
> | viac ako |
<= | menší ,alebo rovná sa |
>= | väčší ,alebo rovná sa |
Skrátené zápisy
Zápis | Skrátený zápis |
a = b + c | nie je |
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 |
PRIORITA VYHODNOCOVANIA OPERÁTOROV
Priorita |
Operátor | Asociativita |
1 | () [index poľa] -> |
---------------> |
2 |
! -- ++ (typ) @ |
<--------------- |
3 | * / % |
---------------> |
4 | + - . | ---------------> |
5 | <<>> | ---------------> |
6 | < <= > >= | ---------------> |
7 | != == <> | ---------------> |
8 | & | ---------------> |
9 |
ˆ | ---------------> |
10 | | | ---------------> |
11 | && | ---------------> |
12 | || | ---------------> |
13 | ?: | <--------------- |
14 |
= += -= *= /= %= >>= <<= &= |= ˆ= .= |
<--------------- |
Výraz : if ($b !=0 && $a * $b < $x) , znamená asi toľko (časť v zátvorkách) : $b sa nerovná nule (pre prípad násobenia nulou) a $a * $b je menšie ako $x. K násobeniu nulou nedôjde ,pretože $b !=0 ukončí výraz. Prečo $b !=0 ukončí výraz ?
Môže za to vlastnosť nazvaná short circuit (skrátene vyhodnocovanie výrazov). Hneď ako je možné vo výraze určiť konečný výsledok ,vyhodnocovanie skončí.
Z tabuľky je jasné ,ktorý operátor má akú prioritu. Ak sa stretnú dva operátory tej istej priority vyhodnocujú sa postupne zľava doprava. Inak implicitný smer je presne opačný zprava doľava. Vysvetlíme si to na výraze :
if ($plat >=10000 && $plat <= 20000)
Ideme zprava doľava (implicitný smer) a nájdeme výraz s najvyššou prioritou (). Podľa asociativity postupujeme zľava doprava a nájdeme dve operátory rovnakej priority. Takže prvé je $plat je väčší,alebo rovná sa 10000 , ďalej $plat je menší ,alebo rovná sa 20000 a nakoniec logický súčin &&.
REŤAZCE
Čo je reťazec ?Je to súbor znakov , či už písmen , číslic ,alebo špeciálnych znakov. Zjednodušene by sa dalo povedať ,že je to hodnota premennej typu string.
Posledný operátor s ktorým Vás oboznámim je ".". Slúži na spájanie reťazcov. Použitie napovie jednoduchý príklad : Príklad 9
<?php $text_1 = "Hello"; echo $text_1."World !"; //vypíše Hello World! //teraz skrátený zápis $text_1 .= "World !"; echo $text_1; //vypíše takisto Hello World! ?> |
FUNKCIE PRE PRÁCU S REŤAZCAMI
Funkcia strlen();Funkcia strlen() nám vracia počet znakov (aj vrátane medzerí) v reťazci. Jej jediným parametrom je daný reťazec.
Príklad :
Zápis funkcie
strlen("počet znakov!");
nám vráti hodnotu 13.
Funkcia strpos();
Funkcia strpos() nám vráti prvú pozíciu hľadaného výrazu v reťazci. Má dve parametre - reťazec v ktorom vyhľadávame pozíciu a reťazec ,ktorého pozíciu hľadáme. Viac už objasní príklad :
Zápis funkcie
strpos("počet znakov!","znakov");
nám vráti hodnotu 6.
Číslo 6 je prvá pozícia hľadaného reťazca , tj. písmeno "z". Dôvod prečo nám funkcia nevracia hodnotu "7" , keďže písmeno "z" je siedmym znakom je ten ,že prvá pozícia - písmeno "p" má hodnotu "0".
Funkcia explode();
Touto funkciou zabezpečíme transformáciu reťazca na pole. Má tri parametre :
explode("deliaci znak","reťazec","limit");
"deliaci znak" (povinný parameter)
je znak ,ktorý sa použije na selekciu reťazca a tento sa neskôr využije na vytváranie poľa. Viac objasní príklad.
"reťazec" (povinný parameter)
je reťazec ,ktorý má byť transformovaný na pole
"limit" (voliteľný paramter)
určuje maximálny počet prvkov poľa
Príklad :
$retazec = "Prvý prvok poľa.Druhý prvok poľa.Tretí prvok poľa";
$pole = explode(".",$retazec);
Výsledok je nasledovný :
$pole[0] = Prvý prvok poľa
$pole[1] = Druhý prvok poľa
$pole[3] = Tretí prvok poľa
Ako deliaci znak sme použili "." , preto sa po každej bodke vytvorí nový prvok poľa. Deliacim znakom môže byť aj medzera.
Funkcia implode();
Táto funkcia je presným opakom explode(); , čiže nám pole transformuje na reťazec. Má dve parametre :
explode("oddeľovač","pole");
"oddeľovač" (voliteľný parameter)
Je znak (môže byť aj medzera, ktorá je defaultne nastavená) ,ktorý sa pridá do reťazca medzi jednotlivé prvky poľa.
"pole" (povinný parameter)
Je pole ,ktoré chceme transformovať na reťazec.
Vezmime si pole použité v predošlom príklade :
$pole = array("Prvý prvok poľa","Druhý prvok poľa","Tretí prvok poľa");
$retazec = implode(".",$pole);
echo $retazec;
Vypíše "Prvý prvok poľa.Druhý prvok poľa.Tretí prvok poľa".
Funkcia htmlspecialchars();
Toto je posledná funkcia s ktorou Vás oboznámim. Je veľmi užitočná ,pretože mení znaky HTML na neškodné. Ako to myslím ?
Vezmime ,že máte aplikáciu - diskusné fórum , kde užívatelia píšu svoje príspevky. Viete si predstaviť čo sa stane ak nejaký mudrlant vloží ako príspevok HTML tagy , ktoré sa nezobrazia ,ale použijú ! Nie ?
V najlepšom prípade Vám len zruší formátovanie stránky.
Takže táto funkcia mení znaky :
& na &
" na "
' na '
< na <
> na >
Má dve parametre :
htmlspecialchars("reťazec","úvodzovky","znaková sada");
úvodzovky (voliteľný parameter)
nastavenie "END_COMPACT" - mení len dvojité úvodzovky " , toto je východzie nastavenie
nastavenie "END_QUOTES" - mení obe typy úvodzoviek " aj '
nastavenie "END_NOQUOTES" - nemení žiadne úvodzoky
znaková sada (voliteľný parameter)
definuje použitú znakovú sadu. Nerozpoznané reťazce sa automaticky transformujú na ISO-8859-1.
Príklad :
$retazec = "<FONT COLOR="RED">červené písmo</FONT>";
bez použitia tejto funkcie nám prehliadač zobrazí tento reťazec červeným písmom. Ak použijeme :
htmlspecialchars($retazec);
prehliadač nám tento font tag nebude akceptovať a html kód bude nasledovný :
<FONT COLOR="RED">červené písmo</FONT>
Spomenul som len niektoré z množstva funkcií ,ktoré PHP používa na prácu s reťazcami. Odkaz (v angličtine) na kompletný zoznam týchto funkcií je uverejnený nižšie v sekcii "odkazy".
Články
Predošlý článok : 2. Premenné podrobnejšie
Ďalší článok : Rekapitulácia I
Odkazy
Stiahnite si vypracované príklady použité v článku
Externý odkaz na w3cschools.com - PHP String Functions
Komentáre
hladam funkciu
-potrebujem jednu funkciu, ktora by mi prehladavala nejaky reťazec a keby nasla urcite vyrazy, zareagovala by (to by som dal mozno cez switch).
-potrebujem ju na vyhladavanie urcitych slov v retazci (trebars smaj1, smajl2), a keby nasla dane vyrazy, zobrazila by v knihe navstev im priradene smajliky. ten retazec by ale mala prehladavat cely, aby zobrazila i viac smajlov.
-existuje taka vyhladavacia funkcia?
-dik
str_replace
pre situáciu so smajlíkmi by som použil funkciu str_replace(). Táto v prehľadávanom texte zmení zadanú hodnotu na iné hodnotu, resp. znaky , text a pod. Jej zápis je :
str_replace(hľadaná_hodnota,zmeniť_na_hodnotu,prehľadávaný_text,počet)
parameter počet je nepovinný , ten určuje koľko krát má zmena hodnoty prebehnúť.
Pre tvoj prípad s viacerými smajlíkmi by som použil pole :
$text = "kjfdkj smajl1 dsj hfsjk smajl2 ds hfsduihf smajl3";
$treba_zmenit = array("smajl1","smajl2","smajl3");
$zmenit_na = array("<img src='umiestnenie so smajlikom1'>","<img src='umiestnenie so smajlikom2'>","<img src='umiestnenie so smajlikom3'>");
$upraveny_text = str_replace($treba_zmenit,$zmenit_na,$text);
echo $upraveny_text;
Výstup html by bol nasledovný :
kjfdkj <img src='umiestnenie so smajlikom1'> dsj hfsjk <img src='umiestnenie so smajlikom2'> ds hfsduihf <img src='umiestnenie so smajlikom3'>
Samozrejme do hodnoty na zmenu môžeš zapisovať aj znaky , teda aj smajlíky. Ak máš ešte hociakú otázku , kľudne píš :)
dik
-dik za info, pomohlo a už to funguje..
-neviem, vela som pocul este o zabezpecovani php skriptov, ak sa napajaju na databazu mysql.. nemas nejake odporucania?
zabezpečenie skriptov
to bodne
-neni to na tuto debattu, ale nevies mi nahodou poradit,preco mi firefox nechce po kliknuti na smajlikov vlozit ich do textarea? opera aj ie to zvladaju..
tu je kod:
<script type="text/javascript">
<!--
function add_smile(t){
this.formular.text.value+= '' + t + '';
this.formular.text.focus();
}
-->
</script>
body:
<img src="images/smajl/s2.gif" onclick="add_smile(' *smajl2* ')" border="0">
alebo:
<a href="javascript:add_smile(' *smajl3* ')"> <img src="images/smajl/s3.gif" border="0"> </a>
ani jedno nechape..
qwertyu