Sunteți pe pagina 1din 95

PROGRAMUL DE FORMARE PROFESIONALA- CALIFICARE - PENTRU OCUPATIA -

WEB DESIGNER

SUPORT DE CURS

BUCURETI 2010

CUPRINS

1. Analiza si !"i#$%a!#a s%!&$%&!ii si%#-&l&i 2. Li'(a)&l *TML +. Li'(a)&l P*P

I ANALI,A SI PROIECTAREA STRUCTURII SITE-ULUI 1. Noiuni introductive

Pentru a lucra pe internet este necesar s nelegei notiunile de client i server. Majoritatea informaiilor pe care le vei accesa pe Internet sunt stocate n calculatoare numite servere. Orice tip de calculator poate fi server, ce l face server este rolul pe care l joac depo!itea! informaii pentru a fi folosite de ctre clieni. "n client este un computer sau un program specific de computer care tie s comunice cu un anumit server pentru a folosi informaiile e#istente pe server sau pentru a stoca informaii pe acesta. "n e#emplu de client este $ro%serul &e$ pe care l folosii c'nd comunicai cu un computer pe care sunt stocate paginile &e$ ( serverul &e$. Internetul nu inseamn doar pagini &e$. Pentru a folosi pota electronic este necesar un client de mail pentru a comunica cu un server de mail. )ceast te*nologie arat ce este de fapt Internetul ( un mediu de comunicare. +iferitele tipuri de clienti i servere i nu Netul n sine sunt cele care permit e#ecutarea unor activiti variate ,ermenul -&e$. este folosit at't de des de media pentru a descrie i ilustra Internetul, nc't multe persoane cred c &e$(ul i Internetul sunt identice. +ar nu sunt. &e$(ul este doar o parte a Internetului i este cel mai captivant deoarece are evoluia cea mai rapid i este partea cea mai uor de folosit a Internetului. &orld &ide &e$ este alctuit din site(uri %e$. )cestea sunt locaii care grupea! pagini %e$ /fiier 0,M12 la care se adaug sau nu fiiere de alt tip. "n site %e$ se compune dintr(o pagin principal /3*ome page32 la care se adaug un numr varia$il de pagini i eventual de fiiere /multimedia, e#ecuta$ile, etc.2, toate fiind interconectate prin *iperlegturi /*iperlin42. 5iecare site are o adres precis care este n general adresa paginii principale. 5iecare pagin i fiecare fiier pre!ente pe site au de asemenea c'te o adres care este format pornind de la adresa site(ului. )dresa unui fiier /pagina %e$ sau alt fel de fiier2 pre!ent pe internet este numit "61 /"niform 6esource 1ocator2 i este unic pentru fiierul respectiv n aa fel nc't acesta s poat fi gsit cu uurina i s nu fie confundat cu un alt fiier. 7ite &e$ i pagin &e$ sunt termeni folosii fle#i$il, dar un site &e$ este n general un server &e$ sau o parte dintr(un server &e$ unde este stocat o colecie de pagini &e$ despre un anumit su$iect. 8. 9lossar de termeni i acronime :ro%ser

<9I

<77

5las* 5,P 9;,

*iperlin4

0,M1 0,,P Aava7ript M=7E1 P0P

;ste un program care ofer o interfa ntre utili!ator i serverul de %e$ de pe Internet. :ro%serul contactea! serverul i transmite cererea de informaie apoi primete informaia i o afiea! pe calculatotul clientului <ommon 9ate%a= Interface ( standard care definete o modalitate prin care serverele &e$ comunic cu programe e#terne i vice(versa, astfel nc't programele e#terne pot produce cod 0,M1 sau imagini, iar serverul le tratea! la fel ca orice cod 0,M1 sau imagini care nu sunt generate de programe e#terne. <ascading 7t=le 7*eet 7tilurile pun la dispo!iia creatorilor de site(uri %e$ noi posi$iliti de personali!are a paginilor 0,M1. "n stil repre!int un mod de formatare e#act a unui $loc de te#t /spre e#emplu anumite caracteristici pentru font, mrime, culoare, aranjare n pagin, distanare fa de margini etc2. 5las* este un instrument cu ajutorul cruia se pot construi pagini %e$ animate sau interactive 5ile ,ransfer Protocol, cel mai simplu mod de a transmite fiiere ntre calculatoare pe Internet Metod n protocolul 0,,P, prin care datele dintr(un formular sunt trimise adug'nd la sf'rsitul "61(ului un semn de ntre$are i coninutul formularului. 7e creea! un "61 e#tins conin'nd adresa paginii i parametrii care tre$uie trimii scriptului /de e#emplu *ttp >>%%%.domeniu.dom>cgi($in>script.pl?name@Ao*nB tel@18CD2. 1egturile /lin4(urile2 repre!int partea cea mai important a unei pagini &e$. ;le transform un te#t o$inuit n *iperte#t sau *iperlegtur, care permite trecerea rapid de la o informaie aflat pe un anumit server la alt informaie memorat pe un alt server aflat oriunde n lume. /0=per,e#t Mar4up 1anguage2 1im$aj folosit pentru crearea paginilor &e$ 0=perte#t ,ransfer Protocol, protocol folosit de $ro%serele de %e$ pentru a transmite te#t, sunete, imagini video pe Internet Aava7cript este un lim$aj de scripting pentru client de!voltat la origine de Netscape, permi'nd scrierea de secvene de program care se e#ecut la apariia unui eveniment utili!ator. <el mai cunoscut i folosit lim$aj pentru $a!ele de date 0=perte#t Preprocessor( P0P este un lim$aj de scripting pentru

Plug(in

PO7, "61 %%% FM1

server, asemntor javascript, n sensul c am'ndou permit introducerea unor programe /scripturi2 n paginile %e$ )plicaiile de tip plug(in sunt similare celor de tip *elper /7e folosesc pentru e#ecutarea fiierelor audio sau video sau pentru a afia diverse formate grafice necunoscute de $ro%ser.2, dar, spre deose$ire de acestea, ele lucrea! direct n interiorul $ro%serelor Metod din protocolul 0,,P prin care datele din formular nu sunt trimise ca parte a "61(ului, ci su$ forma unui fiier codat cu standardul MIM; nglo$at n corpul mesajului trimis ctre server. "niform 6esouce 1ocator ( repre!int unui site &orld &ide &e$ este un univers de informaie disponi$il prin protocol 0,,P eFtensi$le Mar4up 1anguage ( Fml este un lim$aj creat pentru a structura, stoca i transmite informaiile. 7pre deose$ire de 0,M1, care a fost creat pentru a afia datele, FM1 a fost proiectat pentru a descrie datele

G.,ipuri de site(uri Hn funcie de rolul pe care siIl propun siteurile %e$, acestea sunt de mai multe tipuri. 7ite(uri de pre!entare de companie 7ite(uri care ofer informaii despre o companie, inclu!'nd profilul, istoricul, portofoliul, produsele i serviciile, locaia i alte informaii. 7ite(uri de pre!entare de produs > eveniment 7ite(uri care ofer informaii despre un produs, o gam unitar de produse sau un eveniment. Portaluri generaliste )cestea sunt site(uri care intesc pu$licul larg. ;ste vor$a despre portaluri 3ori!ontale3 care ofer lin4uri sau directoare ctre alte site(uri, reunesc coninut intern i e#tern i ofer servicii diverse pentru utili!atori, de tipul conturilor de e(mail. Maga!ine online 7ite(uri care v'nd online produse sau servicii i facilitea! tran!aciile. <omuniti virtuale 7ite(uri care facilitea! interaciunea i comunicarea. )ccentul este pus pe instrumente i elemente care ntresc sentimentul de apartenen precum tirile comunitii, c*at(uri, forum( uri. 7ervicii i tran!acii online 7ite(uri care ofer servicii de recrutare, de v'n!are a spaiilor pu$licitare, servicii matrimoniale, servicii de trimitere a felicitrilor, al$ume foto online, agende, servicii de e(mail, calendare online, ar*ivarea fiierelor, do%nload(uri, nregistrarea domeniului, etc. Mass(media Jersiuni online ale pu$licaiilor, televi!iunilor sau radio(urilor care ofer tiri, inclusiv site(uri de tiri care au doar versiune online. +ivertisment 7ite(uri dedicate jocurilor, *o$$=(urilor, sportului, mu!icii sau umorului. )ctivism social 7ite(uri care promovea! o cau! social i au ca o$iectiv mo$ili!area sau o$inerea sprijinului unor categorii de pu$lic. <ele$riti i personaliti 7ite(uri care pre!int personaliti pu$lice, pun'nd accentul pe re!ultate deose$ite, pe interese sau pe $iografia complet etc. 7ite(uri dedicate unor mu!icieni, actori sau actrie, sim$oluri ale culturii, ec*ipe de sport, personaliti de televi!iune, politicieni. ;(guvernare 7ite(uri care au legtur cu serviciile guvernamentale, inclu!'nd siteurile care ofer acces la serviciile online ale instituiilor guvernamentale i site(uri care diseminea! informaii

despre deci!ii guvernamentale. )rt i cultur 7ite(uri de arte vi!uale i e#presie artistic, teatru, literatur, mu!ic clasic, ar*itectur. 7iteurile includ elemente de coninut precum cronici, recen!ii, e#po!iii, galerii, portofolii, etc. Pentru site(uri al cror o$iectiv principal este v'n!area online a unor produse, inclusiv artistice, este recomandat seciunea 3Maga!ine online3. Portaluri tematice 7ite(uri care acoper c't mai mult un domeniu anume al cunoaterii. Ofer referine i informaii pe o tem $ine conturat. 7ite(uri ale instituiilor 7ite(uri de pre!entare a unor instituii, primrii, coli, licee, universiti, care cuprind informaii, istoric etc. 7ite(uri personale 7ite de pre!entareK conine <J, fotografii, date de contact, etc. D.7tructura unei pagini &e$ Hn afar de unele pri opionale, majoritatea paginilor &e$ conin urmtoarele elemente. )ceste elemente tre$uie cunoscute deoarece diversele $ro%sere interpretea! n mod diferit aceste pri. ;lementele pre!entate sunt de o$icei vi!i$ile prin intermediul $ro%serului 1. ,itlu ( este afiat pe $ara de titlu a ferestrei n care apare pagina. 8. ,e#t ( trasmite scopul i coninutul paginii G. 7emntura ( este afiat n partea de jos a paginii, identific autorul paginii i adesea include i o adres de e(mail a autorului /%e$master2. D. 1inii ori!ontale ( decorea! pagina i o mpart n seciuni logice. L. Imagini ( ofer mai multe informaii n pagin. M. <uloare sau model de fundal ( repre!int o culoare solid sau o imagine integrat care este afiat n spatele te#tului. C. )nimaii ( te#t sau imagini care se mic ntr(un anumit fel. N. 1egturi ( conduc vi!itatorul ctre alte locaii /alte pagini &e$, adrese de e(mail, fiiere tip document, videoclipuri, etc2 O. 0ri de imagini ( imagini 1P. 5ormulare ( locaii unde vi!itatorii pot rspunde la un c*estionar online. ;#ist i alte elemente care aparin paginii &e$, dar care nu sunt vi!i$ile 1. ;lementele de identificare ( numele sau adresa de e(mail a autorului, un sistem special de codare, care ajut motoarele de cutare s descopere su$iectul i coninutul paginii. 8. <omentarii ( te#tul pe care autorul dorete s l fac vi!i$il doar atunci c'nd este citit direct codul 0,M1, nu atunci c'nd pagina este vi!uali!at cu un $ro%ser. G. 0,M1 ( formatul de fiier n care paginile &e$ sunt stocate pe un computer. D. <odul Aava7cript ( adaug elemente dinamice paginii &e$ L. )pplet(uri Aava ( m$untesc interaciunea dintre $ro%ser i server. L. 7tructura unui site Modul de structurare a site(ului se refer la navigarea n cadrul acestuia. O navigare uoar ntre pagini presupune pre!ena unei $are de navigare n care s fie pre!ente alturi de pagina ga!d i paginile cele mai importante. ,oate seciunile unui site tre$uie s se m$ine armonios n structura acestuia permi'nduse astfel trecerea uoar de la o seciune la alta. O structur $un se aseamn cu structura unui ar$ore care ar avea i nite cone#iuni ntre ramurile sale cele mai mari. Pe &e$ se nt'lnesc mai multe moduri de organi!are logic a informiei ntr(un site 1. 7tructura de tip panou de pre!entare ( o singur pagin simpl care descrie o person, o afacere sau un produs. Multe pagini personale sunt reali!ate n acest mod conin legturi ctre resurse

preferate pe Internet, dar nu i ctre pagini din cadrul aceluiai document. 8. 7tructura liniar de o pagin ( o pagin &e$ creat pentru a fi citit de sus p'n jos. Poate fi utili!at un cuprins pentru a(i ajuta pe vi!itatori s fac salturi rapide ctre orice seciune. G. 7tructura liniar pe mai multe pagini ( aceeai structur ca mai sus, numai c paginile curg una dup alta. Ji!itatorii sunt g*idai prin plasarea n josul fiecarei pagini a unei legturi care conduce ctre pagina precedent i cea urmtoare. D. 7tructura ierar*ic ( structura clasic nt'lnit pe &e$. Pagina ga!d /sau o pagina special2 tre$uie sa conin un fel de 3cuprins3 al site(ului, cu legturi ctre paginile cele mai importante. )cestea din urm sunt practic nite pori de intrare ctre seciuni speciali!ate ale site(ului, conin'nd i ele ta$le de materii cu adresele paginilor %e$ su$ordonate. L. . 7tructura de tip reea ( este o structur ierar*ic fr ierar*ie. Orice pagin poate conine o legtur ctre alt pagin. ;#ist o pagin principal, dar apoi vi!itatorii se pot plim$a prin acea reea fr o cale anume. 7e pot reali!a site(uri %e$, pornind de la cel de pre!entare i p'n la de!voltarea de module dinamice i soluii pentru comerul electronic i v'n!area online. ,e*nicile folosite sunt 0,M1, Aavascript, <77, P0P, M=7E1, 5las*, FM1, &M1, &)P etc. +ac dorim s crem singuri site(ul va tre$ui s nvm lim$ajul 0,M1 i s nvm s folosim un program de editare 0,M1. ;#ist i opiunea /recomandat pentru nceptori2 s folosim un program de editare 0,M1 de tipul JIQIN, /vi!ual(intuitiv2 care ne permite s crem pagini %e$ i s adugam elemente 0,M1 la ele fr sa cunoatem lim$ajul 0,M1. Programele de tip vi!it sunt numite n lim$a engle!a &R7I&R9 /3%*at =ou see is %*at =ou get3 ( ceea ce ve!i este ceea ce vei o$ine2 i ele necesit din partea utili!atorului doar pricepere n aranjarea n pagina a coninutului acesteia. ;#ist foarte multe programe de editare 0,M1, dintre care o parte sunt gratuite. "n program de tipul JIQIN, este 35rontPage3 produs de compania Microsoft. )lte programe de editare 0,M1 de tipul JIQIN, sunt 3OpenOffice.org 0,M1 ;ditor3 care este disponi$il n suita gratuit OpenOffice.org /pre!enta n mod periodic pe <+(urile unor reviste cu specific I,2 i 3,rellian &e$Page3 /necesit nregistrare gratuit pe site(ul productorului2. -. C!i%#!ii In reali!area proiectelor, un %e$designer se poate $a!a pe urmtoarele criterii M.1. <oninut ( o$iectul declarat este uor de recunoscutK ( coninutul este relevant, folositor i captivant pentru vi!itatoriK ( informaia este clar i concis. ( evitai folosirea unui lim$aj strict te*nic, care nu poate fi ineres pe deplin de toat audiena "n site tre$uie s ai$ un coninut original, $ogat, interesant i actuali!at periodic pentru a deveni popular n r'ndul utili!atorilor. "n astfel de site va fi vi!itat frecvent c*iar dac aspectul su grafic nu este la cel mai nalt nivel. "n rol important l are alturi de coninutul n informaie i modul de scriere al materialelor. )cestea tre$uie s fie redactate ntr(un stil uor de citit, fr fra!e e#cesiv de lungi i complicate. ,oate materialele tre$uie s fie verificate pentru a nu conine greeli de ortografie. M.8. "urin n folosire ( te#tul este li!i$il, iar imaginile i celelalte elemente multimedia sunt optimi!ate pentru specificul pu$licului intK

( organi!area informaiilor este intuitivK ( folosii <77 /<ascading 7t=le 7*eets2. 5olosii fiiere css pentru formatarea te#tului. Putei sc*im$a astfel foarte uor formatarea ntregului site iar dimensiunea paginilor se micorea!. ( informaiile importante sunt uor de gsit. ( adugai o nota la paginile %e$ prin care s reamintii vi!itatorilor s fac un $oo4mar4 /semn de carte2. )cest lucru va duce la creterea anselor ca vi!itatorii s se ntoarc. M.G. +esign ( designul este potrivit o$iectului site(ului i este adecvat utili!atorilorK ( conceptul creativ este uor de identificat i coerentK ( designul nu atrage atenia de la coninutK ( folosii aceleai fonturi, dimensiune a te#tului i culoare a fundalului pentru tot site(ul ( folosii acelai aliniament /st'nga, dreapta sau centru2 pentru mac*etarea paginilor ( designul este suficient de diversificat pentru a pstra atenia utili!atorilor. )spectul grafic al unui site se refer la ae!area n pagin a materialelor i la gama de culori folosite. Materialele de pe site tre$uie s fie uor de citit, adic tre$uie s ai$ un corp de liter adecvat, s fie scrise pe un fundal plcut i odi*nitor pentru oc*i i s fie formatate /mprite n paragrafe, etc.2 special pentru o citire uoar. +e asemenea tre$uie luat n calcul adugarea de imagini i ta$ele dac este necesar acest lucru. ,re$uie evitat cu orice pre suprancrcarea cu elemente grafice inutile a site(ului pentru c n ca! contrar afiarea paginilor devine greoaie. "tili!atorii din toata lumea au drept caracteristic lipsa de r$dare i ca urmare este foarte pro$a$il s nu atepte p'n la capt descrcarea paginii i s prefere mai degra$ vi!itarea unui alt site. ;lementele grafice cu dimensiuni n S: importante /de tipul animaiilor 5las* sau a imaginilor mari2 tre$uie folosite cu moderaie i doar dac este necesar. Pe %e$ mrimea contea!. Pe de alt parte autorul unui site speciali!at n grafic %e$ poate s pun pe site(ul su oric'te animaii 5las* i imagini dorete pentru c site(ul este cartea sa de vi!it i i pune n eviden talentul. M.D. 5uncionaliti ( site(ul este compati$il cu mai multe platformeK ( timpul de ncrcare al paginii este sc!utK ( toate lin4(urile i formularele funcionea! corectK )ccesi$ilitatea repre!int una dintre cerinele de $a! atunci c'nd se proiectea! o pagina %e$. )ceasta nseamn c orice netsurfer poate s ai$ acces la site(ul pe care l(ai reali!at, indiferent de $ro%serul pe care(l folosete /inclusiv $ro%sere te#t ca 1=n#2, re!oluia sau dimensiunile ecranului, setrile calculatorului sau eventualele disfuncii ale vederii. +in aceste motive, nu tre$uie s proiectai un sit %e$ pentru un $ro%ser specific sau pentru o anumit re!oluie a monitorului. <utai s evitai inserarea n pagina principal a unor anunuri de forma 3)cest site se vede cel mai $ine cu Internet ;#plorer L.L 3 sau 35olosii o re!oluie de CMN # 1P8D3 n acest fel nu facei dec't s ndeprtai cititorii care folosesc un alt $ro%ser sau o alt re!oluie. ;ste puin pro$a$il ca acetia s ncarce $ro%serul I; L.L sau s sc*im$e re!oluia monitorului numai pentru a vedea n cele mai $une condiii paginile dvs. Prin accesi$ilitate se nelege i oferirea unor informaii necesare unui alt tip de vi!itatori ai siteurilor %e$. )cetia sunt ro$oii motoarelor de cutare. Pentru ei tre$uie s completai cu atenie etic*etele M;,) corespun!toare /,I,1;, +;7<6IP,ION, S;R&O6+7 etc2. 5oile de stiluri /st=le s*eets2, scripturile, appleturile Aava i te*nologia 5las* sunt noi apariii n arsenalul %e$designerilor. ,oate acestea tre$uiesc ns folosite cu ma#im atenie deoarece nu toate $ro%serele le pot suporta, iar unii utili!atori au de!activate opiunile respective. +e asemenea, nu uitai s folosii atri$utele )1,, &I+,0 i 0;I90, asociate etic*etei IM9. 6eali!area unui site accesi$il unor categorii c't mai largi de utili!atori implic imaginaie i mult munc, dar re!ultatele vor fi pe msura efortului depus. M.L. <ulori <uloarea, pentru un designer grafic repre!ent o simpl noutate, fiind destinat doar pentru proiectele de anvergur i pentru designul am$alajelor. +ei anterior a fost considerat prea scump pentru a fi folosit fr rost, acum ea este ceva o$inuit. )l$(negrul a devenit avangardist i artistic. )u trecut de asemenea !ilele n care culoarea era folosit doar pentru a ne $ucura de ea. <ulorile au o semnificaie cultural. +umneavoastr, ca designer, avei responsa$ilitatea de a cunoate semnificaia lor dar i de a fi n pas cu tendinele coloristice. 5olosii culori pastelate pe fonduri al$e. Identitatea voastr, dar nu n mod necesar sigla, poate fi asociat cu orice culoare pe care o dictea! tendinele actuale. )lte influene asupra preferinelor coloristice le repre!int pro$lemele sociale i stilul de via. +ac cineva este interesat de o pro$lem sau de o cau!, persoanele respective pot s prefere

culorile asociate acelei cau!e. +e e#emplu, un ecologist poate fi su$iectiv n faa unor culori cum ar fi $runul sau verdele. "n militant al *omose#ualilor poate prefera culori mai vii i mai vi$rante, deoarece curcu$eul este folosit foarte des pentru imaginea cau!ei acestora. "n cretin conservator se va nclina spre culori conservatoare cum ar fi $leu(marin i gri. )r fi indicai s avei n vedere asemenea factori, c'nd v adresai unui anumit pu$lic(int. In%#!#s&l $&l"!il"! <ulorile au n general anumite implicaii sociale. Hn timp ce nici o semnificaie preconceput nu poate fi considerat universal, cercettorii consider c urmtoarele nelesuri sunt oarecum precise Negru 7emnificaie )utoritate sau putere i, uneori, rutate. +art* Jader era negru din toate aceste motive. )l$ 7emnificaie Puritate, sterilitate sau inocen. Miresele poarta al$ pentru a sugera puritatea i inocena. 6ou 7emnificaie 5urie, averti!are, conflict i dragoste. <uloarea roie poate c*iar s provoace puls ridicat i respiraie accelerat. 5olosit n anumite conte#te, poate avea un efect negativ, pe c'nd n altele poate avea un efect $enefic. )l$astru 7emnificaie <alm, pace ( dar rece i deprimant (, no$ilitate, loialitate. <ostumele pentru afaceri sunt de multe ori $leu(marin pentru c aceasta implic loialitateK n acelai timp, slile de clas sunt deseori !ugrvite n al$astru desc*is, datorit efectului calmant al al$astrului. Hn lim$aj mu!ical, se vor$ete deseori de T$lues. /n engle!, $lue @ al$astru2, deoarece at't acest stil mu!ical c't i culoarea pot avea un efect deprimant. Jerde 7emnificaie Naturalee, prospeime i fertilitate. 1egtura clar cu verdele este natura, dar folosirea acestei culori n spitale este similar cu efectul al$astrului, verdele fiind i el o culoare care calmea!. 9al$en 7emnificaie 5ericire, optimism i concentrare. 9al$enul m$untete capacitatea de concentrare i ea poate contrasta cu aproape toate culorile. Jiolet 7emnificaie 6egalitate, lu# i romantism. +e(a lungul istoriei, familiile regale au fost asociate cu violetul datorit faptului c se nt'lnete rareori n natur i tre$uiau c*eltuite sume mari pentru a putea crea vopsea de aceast culoare. Maro 7emnificaie solid, de ncredere i terestru.

C. Pu$licarea i promovarea unui site Orice %e$master vrea, fie c o recunoate desc*is sau nu, ca site(ul su s fie vi!itat de c't mai muli utili!atori i dac se poate, c't mai des. )ceast dorin /care ine de considerente financiare sau de ego2 nu este ns reali!a$il dec't dac %e$masterul i toi ceilali implicai n administrarea site( ului depun un efort constant pentru a menine coninutul i aspectul site(ului c't mai aproape de cerinele utili!atorilor. 7uccesul unui site, ca de altfel al oricrui produs, se datorea! n mare msur i modului n care este promovat, cu alte cuvinte mar4etingul este aproape la fel de important ca i calitatea unui produs. Hn aceast lume a internetului nc foarte t'nr, e#perii n crearea de site(uri &e$ sau redactorii de articole interesante nu sunt de o$icei i e#peri n mar4eting. ,ocmai din aceast cau! promovarea eficient a unui site %e$ este fcut de cele mai multe ori de ctre profesioniti. )cetia i ofer serviciile contra cost i la ei apelea! companiile care vor s(i construiasc o pre!en important pe &e$. 7umele investite n mar4etingul profesional sunt impresionante i n permanent cretere. O caracteristic a Internetului este ca acesta, n calitatea sa de spaiu virtual permite oricrui utili!ator s(i construiasc un site &e$, e#ist'nd, spre deose$ire de spaiul real, destul loc pentru toat lumea. Mai mult, utili!atorul respectiv nu tre$uie s ai$ cunotine avansate de lim$aj 0,M1 sau s plteasc vreun $an pentru locul de pe Internet unde vrea s(i construiasc site(ul /se e#clud $ineneles c*eltuielile legate de conectare2. ;#ist n momentul de fa poate !eci de milioane de site(uri &e$ n toat lumea, cele mai multe dintre ele aparin'nd unor utili!atori o$inuii i nu unor companii sau instituii. 7ite(urile mici sunt ns poteniale surse de c'tig material pentru proprietari, pentru c e#ist

companii interesate s cumpere spaiu pu$licitar c*iar i pe site(urile mici, cu condiia ca acestea s fie vi!itate des. "n site $ine fcut i care i(a do$'ndit deja o 3clientel3 de utili!atori constant, poate fi la un moment dat cumprat pentru o sum important de ctre o companie mult mai mare, e#ist'nd n plus posi$ilitatea ca administratorii site(ului s(i pstre!e locurile de munc pentru a continua s menin i s m$unteasc site(ul. Uin'nd cont de faptul ca utili!atorii rom'ni care sunt n acelai timp i %e$masteri vor s le fie vi!itate siteurile, ei tre$uie s nvee s(i fac singuri activitatea de mar4eting, pentru c nu au mijloacele financiare necesare pentru apelarea la specialiti. Multe firme rom'neti care vor sa ai$ site(uri %e$ de succes sunt n aceeai situaie, din cau!a dificultilor financiare neput'nd fi luat n discuie cumprarea de spaiu pu$licitar pe Internet sau angajarea unor specialiti n mar4eting. 9reul promovrii site(ului cade astfel pe umerii %e$masterului, transformat peste noapte i n responsa$il cu mar4etingul. Hn cele ce urmea! vor fi pre!entate metodele prin care orice utili!ator poate s(i promove!e site(ul fr a fi nevoit s apele!e la profesioniti. Metodele cele mai eficiente de promovare a unui site sunt urmtoarele 12 Optimi!area site(ului %e$ pentru inde#area adecvat de ctre motoarele de cutare 82 Hnscrierea site(ului n cataloagele de adrese ale portalurilor internaionale i rom'neti G2 Promovarea site(ului pe forumurile on(line sau n grupurile de discuii D2 Participarea la clasamentele site(urilor care fac topuri Primul pas este s alegem un domeniu pentru site(ul organi!aiei. Numele unui domeniu nu tre$uie s conin spaii de aceea dac vom folosi un cuv'nt compus tre$uie s folosim o liniua pentru a lega prile sale componente. )l doilea pas care tre$uie fcut este sa g!duim site(ul pe un server. 7pre e#emplu e#ist servere care permit g!duire gratis cum ar fi %%%.*ome.ro, %%%.G#.ro etc., iar la altele tre$uie pltit g!duirea %%%.m=#.ro , %%%.elite.ro>%e$(*osting>, %%%.apis.ro>domeniu.*tml. +up ce am creat site(ul tre$uie sa(l ncrcm pe serverul care l g!duiete. )cest lucru se reali!ea! foarte simplu dac suntem familiari!ai cu programele de tip client 5,P. ,ot cu ajutorul programelor de acest tip se reali!ea! i actuali!area site(ului /tergerea unor pagini, adugarea unora noi, nlocuirea unor pagini cu versiuni mai noi2. )a cum am mai spus, putem s scriem singuri coninutul unui site i s(l punem n pagin sau putem apela la serviciile unor specialiti. ;ste recomandat s ne compunem singuri materialele pentru c astfel putem s le revi!uim ulterior introduc'nd /fr a afecta stilul e#punerii2 anumite informaii care nu erau disponi$ile la momentul scrierii iniiale. <u c't vom scrie mai mult cu at't vom progresa n domeniul e#punerii clare a propriilor idei. +ac socotim c 3nu ne pricepem la scris3 sau pur i simplu nu avem timp pentru a scrie i revi!ui materialele de pe site putem s apelm la serviciile unor specialiti /de e#. studeni la filologie sau jurnalistic2. Noi putem s le dictm acestora materialele iar ei se vor ngriji de partea stilistic a te#telor. Pentru a cunoate c't de vi!itat este site(ul pe care l(ai reali!at i pentru a afla mai multe date despre numrul i statistica vi!itatorilor, informaii care v vor ajuta n reali!area unei campanii de mar4eting online eficiente, este $ine s folosii contoare de pagin. 7ite(ul tre$uie promovat. Muli manageri consider c odat ce site(ul este finali!at i postat pe Internet, lucrurile sunt nc*eiate. +in acest moment organi!aia este pre!ent pe Internet iar utili!atorii interesai de serviciile i produsele organi!aiei vor veni de la sine. +in pcate nu se nt'mpla deloc aa. <el mai pro$a$il, potenialii dumneavoastr utili!atori > clieni nu cunosc i nu caut organi!aia dumneavoastr. ;i sunt n cutarea serviciilor sau produselor pe care le oferii, at't dumneavostr c't i concurena. +ac atunci c'nd un utili!ator caut produsele dumneavoastr, site(ul nu va fi printre primele afiate, cel mai pro$a$il acea persoan va deveni clientul concurenilor dumneavoastr. "n site nepromovat este la fel ca un maga!in strlucitor i plin de mrfuri plasat pe o strdu ntunecoas, pe unde nu trece nimeni. Maga!inul va da faliment n c'teva luni. 7ite(ul va rm'ne un o$iect inutil care nu aduce organi!aiei dumneavostr nici un $eneficiu. "n sistem de promovare a site(ului este i $anner e#c*ange(ul. :anner ;#c*ange nseamn pu$licitate reciproc n cadrul unei reele de site(uri n sc*im$ul reclamelor /$annerelor2 pe care le pu$licai pe site(ul dumneavoastr, site(urile partenere pu$lic reclamele /$annerele2 dumneavoastr. O astfel de pu$licitate reciproc prin sc*im$ de $annere se poate reali!a ntre oricare dou

sau mai multe site(uri, cu condiia ca sc*im$ul s fie ec*ita$il. "n sistem centrali!at de pu$licitate reciproc /$anner e#c*ange > lin4 e#c*ange2 asigur ec*itatea sc*im$ului n reele cu un numar mare de participani, numeroase dimensiuni i formate de $anner, selecia i monitori!area site(urilor participante, statistici ale campaniilor pu$licitare derulate etc. 7ite(ul tre$uie actuali!at. <a i promovarea, ntreinerea i actuali!area site(ului sunt nite operaii foarte adesea neglijate. Nu odat am v!ut pe Internet site(uri cu informaii vec*i, cu date de contactneactuali!ate, cu oferte care nu mai sunt vala$ile, cu ru$rici de Noutai al cror coninut nu a mai fost sc*im$at de la lansarea site(ului. Pentru un potenial client care vi!itea! frecvent site(ul, o asemenea situaie este un motiv puternic de a pune la ndoial serio!itatea organi!aiei dumneavoastr. Nu tre$uie s uitai nici o clip c, pe Internet, site(ul organi!aiei este nsi organi!aia. Iar un site neactuali!at este la fel ca un maga!in cu mrfuri prfuite i cu termenul de garanie e#pirat. +umneavoastr ai cumpra ceva dintr(un asemenea maga!in? 7ite(ul tre$uie sa funcione!e corect +ei $una funcionare a site(ului pare o condiie de la sine neleas, destul de des pot fi gsite site(uri cu pagini care nu se desc*id, cu $a!e de date care dau erori, cu formulare care funcionea! incorect. "n site care d erori la funcionare i va ndeprta definitiv pe potenialii vi!itatori care nu vor mai reveni pe site i nici la organi!aia dumneavostr. Vi, fr ndoial, justificat. Nici dumneavoastr nu ai mai reveni ntr(un maga!in n care liftul s(a $locat ntre etaje sau casa de marcat s(a defectat tocmai c'nd, dup o ateptare de jumtate de or, ai ajuns s pltii. )a nc't, la finali!area proiectului, re!ervai(v o or pentru a vi!ita site(ul n ntregime i asigurai(v c totul funcionea! fr gre.

N. Optimi!are site Optimi!area paginilor %e$ este o strategie aplicat de toi specialitii n mar4etingul site(urilor %e$ i se refer la 3cosmeti!area3 paginilor, n aa fel nc't ele s se afle n fruntea listei de pagini care este generat de un motor de cutare atunci c'nd un utili!ator caut paginile care conin un anumit cuv'nt sau o anumit sintagm. Optimi!area unui site %e$ pentru a fi inde#at adecvat de ctre motoarele de cutare este un procedeu foarte simplu, ns n acelai timp destul de la$orios n ca!ul n care avem un site cu multe pagini. ;a se refer la alegerea titlului paginilor, la alegerea unor cuvinte(c*eie legate de coninutul fiecrei pagini n parte i la aranjarea te#tului n pagin. Hn general se spune despre orice pagin %e$ c are o anumit tem i conine anumite cuvinte(c*eie. ,ema paginii este su$iectul luat n discuie iar cuvintele(c*eie sunt cuvintele foarte importante /pentru nelegerea temei de!$tute2 care apar n te#t. Orice pagin %e$ are o parte vi!i$il, care este afiat de e#plorator /3$ro%ser32 i pe care o vedem noi c'nd o vi!itm. +e asemenea, orice pagin %e$ are i o parte 3invi!i$il3 pentru e#plorator, care este n fapt vi!i$il doar dac se desc*ide pagina respectiv cu un editor 0,M1 sau cu un editor de te#t /de e#. Notepad2. )ceast parte 3invi!i$il3 conine codul 0,M1 al paginii i unele marcaje /3tags32 folosite n scopul unei inde#ri adecvate a paginii respective de ctre motoarele de cutare. <odul 0,M1 al unei pagini poate fi v!ut atunci c'nd avem pagina afiat n e#plorator dac facem clic pe meniul 3Jie%3 i apoi pe opiunea 37ource3. Ja fi lansat automat programul Notepad n care vom vedea codul 0,M1.

N.1. Optimi!area coninutului paginii &e$ Motoarele de cutare sunt programate s utili!e!e n mod optim $a!a de date o$inut de Tro$oii t'r'tori. care inde#ea! paginile de pe internet. 7copul lor este s pre!inte foarte rapid utili!atorilor liste cu pagini %e$ n care primele locuri s fie ocupate de pagini cu un coninut informativ, util. +eci algoritmul de sortare a paginilor tre$uie s fie foarte $ine conceput pentru c el are rolul de a sorta mii sau !eci de mii de pagini ntrun timp foarte scurt i cu un re!ultat care s fie pe placul utili!atorilor. "n ro$ot t'r'tor nu vede paginile %e$ aa cum le vd oamenii, el acord o importan cov'ritoare te#tului unei pagini, fr a fi impresionat deloc de aspectul ei grafic. <a urmare $a!ele de date ale motoarelor de cutare conin pagini inde#ate dup coninutul lor scris i nu dup cel grafic. )cest coninut scris este cel care d CPW din relevana unei pagini %e$, restul de GPW fiind dat de optimi!area /3cosmeti!area32 paginii %e$. 7arcina lingvitilor i a matematicienilor implicai n de!voltarea motoarelor de cutare a stat tocmai n crearea i optimi!area unui algoritm care s poat s ordone!e un numr mare de pagini %e$ n funcie de utilitatea coninutului lor scris. Hn mod evident, unele din caracteristicile algoritmului nu sunt uor de sesi!at de ctre persoanele care nu au lucrat la el. )lte caracteristici pot fi ns deduse anali!'nd paginile %e$ care apar n mod constant pe primele locuri ale listelor generate de motoarele

de cutare. ;ste uor de intuit faptul c algoritmul favori!ea! paginile %e$ care au un coninut de te#t important, pentru c se consider c aceste pagini conin mult informaie, iar utili!atorii caut n mod special aceast caracteristic a paginilor %e$. Nu se tie precis cum este evaluat de ctre algoritm coninutul de te#t al unei pagini dar este foarte posi$il s fie luat n calcul numrul de caractere /litere2 din pagin aa cum a fost calculat de ro$otul t'r'tor care a inde#at pagina. )sta nu nseamn c pentru ca paginile noastre s ai$ succes suntem o$ligai s le umplem cu te#t p'n la refu!, fr s inem cont i de alte aspecte, cum este de e#emplu calitatea e#punerii informaiilor din te#tul respectiv. Paginile cu mult te#t sunt pe placul algoritmilor dar oamenii sunt mai rafinai, ei prefer de cele mai multe ori o cantitate re!ona$il de te#t i care n plus tre$uie s fie interesant, util, $ine scris i formatat n aa fel nc't s fie plcut de citit. "n alt aspect care nu tre$uie neglijat este actuali!area periodic a conintului site(ului i adugarea de noi materiale. )tunci c'nd scriem te#tul dintr(o pagin tre$uie s ne asigurm c folosim i sinonime pentru cuvintelec*eie i de asemenea c folosim i variante mai puin folosite ale acestora. +e e#emplu ntr(o pagin %e$ care tratea! un su$iect despre site(urile %e$ /g!duire de e#.2 tre$uie folosit n principal cuv'ntul 3site3 dar tre$uie pus n parante! i varianta 3sit3. Hn acest fel dac un utili!ator va cuta paginile care conin sintagma 3g!duire site %e$3 avem toate ansele ca i pagina noastr care tratea! acest su$iect s fie luat n seam de motorul de cutare pentru includere pe lista re!ulatelor cutrii.

N.8. Hnregistrarea site(ului la motoarele de cutare

Hn general se consider c nu este nevoie s ne nregistrm site(ul la motoarele de cutare pentru c acestea l vor inde#a atunci c'nd ro$otul t'r'tor l va nt'lni n 3plim$rile3 sale periodice pe internet. Muli %e$masteri prefer ns s fie siguri c site(ul va fi inde#at c't mai repede i atunci apelea! la serviciul de propunere de site(uri pre!ent la toate motoarele de cutare. )cest serviciu este fie gratuit fie cu plat /1oo4smart, 1=cos2. +ac site(ul nostru apare n listele generate de un ro$ot de cutare nu mai tre$uie s l nregistrm, este evident c paginile sale au fost deja inde#ate. 5iecare motor de cutare are o pagin special numit 3)dd "613 /adaug adresa unui site2 sau cu un titlu asemntor /37u$mit a 7ite32. Hn pagina respectiv scriem ntr(o caset de te#t adresa site(ului /de e#emplu *ttp >>%%%.masinidespalat.*ome.ro2 i n alt caset un mic comentariu /descrierea site(ului sau nite cuvintec*eie2 i apsm $utonul 3)dd "613. Nu este nevoie s nregistrm dec't adresa paginii ga!d a site(ului. 6o$otul motorului de cutare va inde#a toate paginile site(ului pornind de la aceasta. Hn final, am cutat c'teva modaliti de urmrire a traficului pe site(ul %e$. )m setat dou contoare de trafic. "nul rom'nesc /%%%.trafic.ro2 i unul strin /%%%.sitemeter.com2. )m$ele sunt gratuite i ofer o mulime de informaii utile despre numrul de vi!itatori i pagini %e$ /page vie%s2 accesate, mprite pe ani, luni, sptm'ni. Hn plus, mai sunt preci!ate tipul de $ro%ser folosit, IP(ul, prima i ultima pagin accesat etc. +up ce v nscriei la aceste site(uri %e$, vei primi un cod 0,M1 pe care tre$uie s(l inserai /fr nici un fel de modificare2 n pagina %e$, acolo unde dorii ca el s apar. 1a ,rafic tre$uie s alegei categoria n care se ncadrea! site(ul dvs. )poi, vei putea urmri n fiecare sptm'n evoluia site(ului dvs. /nr. de vi!itatori, creterea fa de sptm'na nc*eiat, po!iia o$inut n cadrul seciunii respective etc.2. .. P!"%#)a!#a $"n/in&%&l&i &n&i si%# ,ermenul de cop=rig*t este specific american, dar se folosete i n ;uropa sau pe alte continente, cu aceeai semnificaie drept de autor. Hn 6om'nia, dreptul de autor este reglementat juridic prin 1egea nr. N > 1OOM. Hn conformitate cu prevederile acestei legi, opera de creaie intelectual este recunoscut i protejat, independent de aducerea la cunotin pu$lic, prin simplul fapt al reali!rii ei, c*iar neterminat /)rt. 1, )lin. 82. +reptul de autor este legat de persoana autorului i comport atri$ute de ordin moral i patrimonial /)rt. 1, )lin.12. )adar, un site %e$ repre!int o oper de creaie intelectual i poate constitui o$iect al dreptului de autor. )ceasta nseamn c informaiile pe care le introducei ntr(o pagin personal v aparin i dreptul de autor v revine n ntregime asupra te#tului respectiv. +ac ns lucrai ntr(o ec*ip sau suntei angajat al unei firme de %e$design atunci suntei co(autor i vei fi protejat prin drepturi de autor asupra imaginilor pe care le(ai creat, mac*etrii paginii sau programelor pe care le(ai reali!at. Muli oameni consider, n mod eronat, c se pot copia fr a cere acordul nimnui diverse materiale disponi$ile online /te#te, imagini, sunete, fiiere video etc.2 ;#ist ntr(adevr site(uri de unde se pot copia astfel de fiiere sau de unde se poate ncrca soft%are gratuit. Pe aceste site(uri vei gsi o not e#plicit care v permite utili!area acestora. +ac nu gsii o not n acest sens, este indicat s cerei prin e(mail acordul %e$masterului site(ului %e$ de la care vrei s copiai materialele respective. Hn majoritatea ca!urilor vi

se va rspunde afirmativ. +e asemenea, este $ine s includei o noti de cop=rig*t n su$solul fiecrei pagini n care se vor preci!a sim$olul de cop=rig*t /X2, autorul i anul n care a fost fcut pu$lic pagina respectiv. +ac considerai necesar, putei s trecei i alte meniuni specifice. Pe l'ng protejarea coninutului unui site, i aspectul acestuia, modul te*nic de reali!are, interaciunea ntre componentele acestuia pot fi o$iectul proteciei. 7unt numeroase situaiile n care un site poate fi protejat n sine, ca oper independent, fr ca protejarea coninutului acestuia s fie impus sau s e#iste. Hn egal msur, coninutul unui site poate constitui o$iectul proteciei n timp ce elementele grafice i funcionale ale acestuia s fie li$ere. 1P. 5eed$ac4 /interaciunea cu vi!itatorii2 P'n acum, principala form de comunicare ntre comerciani i clienii lor era pu$licitatea. +ar aceast comunicare nu oferea o oportunitate de interaciune ntre cele dou pri sau feed$ac4. Odat cu rsp'ndirea Internetului se poate reali!a foarte uor o comunicare n am$ele sensuri. Hm$untirea metodelor prin care utili!atorii interacionea! cu paginile unui site %e$ este esenial pentru crearea unui site $un. 5olosirea feed$ac4(ului este foarte important pentru creterea numrului de vi!itatori i ofer posi$ilitatea ca acetia s(i e#prime opiniile, sugestiile i comentariile n legtur cu un site %e$. ;( mailul este cea mai important i mai uoar cale de a recepiona mesaje de la cititori. J recomand s nu scriei nici o adres de e(mail n clar, ci s o inserai ca imagine, pentru a evita spamul. O alt variant este pre!entat n imagine +e aceea, este o$ligatorie furni!area adresei e(mail pe fiecare pagin. Pe de alt parte, un %e$master tre$uie s fie capa$il s rspund n timp scurt pentru a menine o relaie de ncredere reciproc. ;#ist pe Internet mii de site(uri %e$ care v ofer posi$ilitatea s v creai gratuit unul sau mai multe conturi de e(mail. <'teva dintre cele mai cunoscute sunt urmtoarele ( *ttp >>%%%.*otmail.com ( *ttp >>%%%.=a*oo.com ( *ttp >>%%%.geocities.com ( *ttp >>%%%.freeservers.com ( *ttp >>%%%.netadress.com ( *ttp >>%%%.*ome.ro<ri de oaspei /guest$oo4s2 <ompletarea formularelor este o practic des nt'lnit pe Internet. )cestea permit colectarea de feed$ac4(uri de la cititori ntr(un mod organi!at. "n formular %e$ se poate reali!a uor folosind direct codul 0,M1 sau cu ajutorul unui editor 0,M1. "n e#emplu de formular des nt'lnit l repre!int aa numitele crti de oaspei unde cititorul poate s(i scrie impresiile i comentariile dup vi!itarea unui site. O carte de oaspei gratuit se poate o$ine vi!it'nd site(urile %e$ urmtoare ( *ttp >>%%%.t*eguest$oo4.com ( *ttp >>%%%.dream$oo4.com ( *ttp >>%%%.guest$oo4s.net ( *ttp >>%%%.count!.com>guest$oo4.*tml ( *ttp >>%%%.freecenter.com>guest$oo4.*tml ( *ttp >>%%%.lpage.com ( *ttp >>%%%.$ravenet.com ( *ttp >>%%%.guest$oo4Dfree.com>en> <amere de c*at Pentru a aduce c't mai muli vi!itatori la site(ul pe care l(ai creat, putei s setai un serviciu propriu de c*at. "nele site(uri ofer gratuit aceast facilitate, ca de e#emplu )ction <*at / *ttp >>%%%.ten(percent.com> 2 6am(Page <*at / *ttp >>%%%.ram(page.com> 2 1iste de discuii Pentru a crete gradul de interactivitate cu vi!itatorii putei s setai n pagin o list de discuii. ;#ist multe site(uri, ca de e#emplu ,opica sau Ra*oogroups care ofer gratuit aceast facilitate. Mai multe informaii despre acest su$iect gsii n capitolul TPromovarea site(ului %e$.. 11. 9reeli 5recvente 1. Prea multe imagini "nii %e$ designeri fac e#ces de !el n mpodo$irea paginilor cu grafic i animaii, din convingerea ca astfel vor fi mai atrgtoare. ;ste o eroare frecvent mai ales pentru cei care intr n contact cu %e$ designul prin grap*ic design. Imagini multe, mari, neoptimi!ate nseamn vite! de ncrcare a paginii drastic sc!ut. Mai mult, nici un motor de cutare nu inde#ea! nc imagini, deci un *ome page

constituit din imagini nucitor de atrgtoare, i nici o linie de te#t /*tml, nu desenat pe $itmap2 va genera un numr constant de listri pe cuvinte c*eie n 9oogle !ero. Hn consecin, la ce folosete o pagin foarte frumos desenat, dac doar c'iva ajung s o vad /cei care nu s(au plictisit atept'nd s se descarce i cei cu cone#iuni de nalta vite!2, sau cei care cunosc adresa din alte surse. 8. Imagini neoptimi!ate pentru %e$ +in nou, greeala frecvent la cei care au un $ac4ground n design grafic. Pe %e$, mrimea contea!. Programe de editare de imagine ca )do$e P*otos*op ofer opiuni de optimi!are pentru %e$, dar e#ist i unelte mai simple i mai putin costisitoare pentru optimi!area de imagini. G. ;#ces agasant de animaii Muli designeri cred c o pagin pe care se mic ceva n permanen este mult mai atractiv. Numai c principiul de -e=e catc*ing. se refer la un 7IN9"6 element care focali!ea! atenia. Vi deja am descoperit greeala. Hn loc s atrag atenia, elementele animate dintr(o pagin distrag atenia cititorului, funcion'nd ca nite vi!iuni periferice. )celai re!ultat l au i efectele de tip :lin4 ajung s agase!e vi!itatorul, alung'ndu(l de pe site, la fel de nedumerit cum a a venit. )adar, atenie la do!area animaiilorY D. <od redundant i de!ordonat Oricine poate vedea coninutul(cod al unei pagini %e$ select'nd opiunea -Jie% source.. +eocamdat, nu e#ist un procedeu de ascundere a sursei unei pagini %e$. Nu ncurajm scripturile java de $locare a afirii coninutului, acesta fiind un motiv de penali!are n motoarele de cutare, i o metod sigur de agasare a vi!itatorului /care e o$inuit s foloseasc $utonul dreapta al mouse( ului2 ns dac avei stiluri proprii n pagin, de pild, este de preferat s le introducei ntr(un document separat /.css2, ctre care s se lege fiecare pagin din site. Motivul principal este optimi!area codului nu mai e nevoie s introducei stilul n fiecare pagin, reduc'nd astfel considera$il codul. Pe de alt parte, la fel de important este de reinut c e#ecut'nd modificri repetate n pagin cu ajutorul unui editor vi!ual de *tml, avei toate ansele s o$ineti un cod nc'lcit, redundant, cu taguri inutile rmase din poriuni terse etc ( de aceea este recomanda$il s e#ecutai codul -de m'n. pe c't posi$il. 7uficient de -ameit., codul va genera rapid i funcionarea defectuoas a site(ului. L. ,estare ;vident, c'nd creai o pagin %e$ o verificai n $ro%serul vostru s vedei cum arat. +ar nu e suficient, nici pe departe. O pagin care arat super n Internet ;#plorer M.#, la re!oluia voastr de 1P8D#CMN se poate transforma ntr(un de!astru vi!ual la o re!oluie diferit, cu un font si!e diferit, n Netscape, Opera sau Mo!illa. Uinei cont i de utili!atorii care au $ro%serul setat s nu afie!e imagini, de cei care folosesc alt sistem de operare dec't &indo%s. <reai(v ta$elele, imaginile, te#tele /daca nu folosii <772 astfel nc't s fiecompati$ile cu vi!uali!area n majoritatea situaiilor /ideal n toate2. M. 5ee$ac4 5ormularele sunt o parte interactiv a unui site. Hntr(o pagin cu formular, te apropii de vi!itator mai mult dec't n celelalte. ; sta$ilirea unei relaii, i nceputul unui sc*im$. ; poate partea cea mai personal a unui site, acolo unde userul ii d informaii despre el, ii mprtete opiniile sale, tu i oferi un serviciu sau o oportunitate etc. +e aceea modul n care e#ecui formularele este foarte important pentru succesul site(ului tu. O relaie se $a!ea! pe respect i ncredere d(i vi!itatorului ceea ce i(ai promisK afiea!(i o pagin de confirmare > mulumire dup completarea formularuluiK afiea!(i o pagin de eroare n ca!ul n care a completat greit c'mpurile sau a omis un c'mp o$ligatoriu. 5eed$ac4, feed$ac4, feed$ac4. Vi $ineneles, verific(i scripturile, ca s te asiguri c formularul funcionea!. C. Prea mult te#t )vem o$inuine rmase de la pagina de *'rtie, i de multe ori se vede pe %e$. O pagin de %e$ nu e citit n auto$u! sau n tren /s numrm cate laptopuri cu cone#iune %ireless se plim$ acum cu rapidul :ucureti( <onstana?2. Pentru cri, e#ist varianta e(:oo4. Nu facei e#ces de te#t, pentru c nu va fi citit. 7pargei te#tul n paragrafe, cu titluri relevante. Hn plus, su$ 1LW din utili!atori fac scroll pe o pagin %e$, aa nc't ncercai s pstrai informaia esenial n partea de sus a paginii. Internetul e un mediu dinamic, utili!atorii

o$inuiesc s accese!e mai multe pagini n acelai timp, i evident sunt mai uor distrai de la coninutul fiecreia dintre ele. ;vident, un te#t do!at pentru astfel de condiii de citire nu nseamn nicidecum un te#t laconic, din care vi!itatorul s nu poat e#trage nici o informaie util. +impotriv, oferii(i un coctail de esene, astfel nc't s o$in c't mai multe informaii ntr(un mod c't mai clar organi!at, n c't mai puin spaiu. N. Prea puin te#t ,otui, nu fii laconici. <ine ajunge pe pagin, dorete s se infome!e. Oferii suficiente date, suficient coninut, pentru vi!itatori i pentru motoarele de cutare. Oricum, de o$icei site(urile %e$ pctuiesc prin prea mul te#t, nu prea puin. O. ,e#t de tip spZm > reclama Nu scriei -<el mai tare site de pe %e$., -<ea mai $un firm de consultan. sau 3<ea mai mare colecie de mpG(uri3. 1asai(l pe vi!itator s decid, artai(i respect. Hn plus, formulri prea comerciale au toate ansele s piard vi!itatorul. Vi el e stul de reclam, ca oricare dintre noi. +ac a venit n cutarea unei informaii, oferiii informaia, nu laude de sine. 7untei ndeajuns $un n ceea ce facei ca s(l convingei cu fapte, nu cu vor$e goale i locuri comune care trec pe l'ng urec*e fr a fi procesate. 7u$linierile /underline2 se folosesc doar pe lin4uri, lsai(le acolo. Nu folosii cuvinte scrise cu majuscule, aceasta este o marc a spZmului, de care Internauii s(au sturat p'n dincolo. Nu vrei s fii asociai cu un fenomen negativ. 1P. 7ite map <u c't e mai mare un site, cu at't mai necesar devine un g*id de navigare. "tili!atorii sunt gr$ii, deci tre$uie s le artai e#act unde gsesc ceea ce caut. +e asemena, i agenii de cutare gsesc foarte prietenoas *arta site(ului, din aceleai motive. 11. Mentenan "n site tre$uie ntreinut. Nu lsai informaii vec*i, -e#pirate.. )ducei mereu coninut nou pentru vi!itatori, dar i pentru motoarele de cutare ( dac vrei s avei un ran4ing $un. Hn fond, natura Internetului este dat de nsui dinamismul su. Uinei pasul.

2. LIMBA0UL *TML

1. S%!&$%&!a a1inii <u ajutorul lim$ajului 0,M1 /0=per ,e#t Mar4up 1anguage2 poti construi pagini %e$ nu foarte pretentioase insa repre!inta un inceput pentru reali!area site(urilor profesionale. . ;ditarea acestora se poate face in orice program de editare te#te, pornind c*iar cu $analul N"%# a2 din &indo%s. ,oate notiunile pre!entate in acest g*id pot fi puse in practica utili!and Notepad, astfel incat "%i 2#s$3i2# N"%# a2 a$&'. +esi e#ista mai multe programe care au grija de codul 0,M1 atunci cand faci o pagina %e$, pentru a usura folosirea lor este nevoie de cel putin cateva notiuni elementare de 0,M1. )ceste programe se numesc editoare 0,M1 si pot fi de doua tipuri editoare clasice si editoare de tipul &R7I&R9 /&*at Rou 7ee Is &*at Rou 9et, care se traduce prin ceea ce ve!i este ceea ce o$tii2. In ca!ul celei de(a doua categorii de editoare 0,M1, utili!atorii nu tre$uie decat sa se ocupe de partea grafica, de ase!area in pagina etc., scrierea codului 0,M1 ramanand in seama acestor programe. O o$servatie demna de luat in seama este si aceea ca cele mai $une editoare 0,M1 nu sunt gratuite. In conclu!ie, invatarea lim$ajului 0,M1 are trei mari avantaje [ este foarte simpla si nu necesita mult timp [ ofera controlul a$solut asupra reali!arii paginii %e$ [ poti folosi in cadrul paginilor pe care le vei reali!a secvente de cod 0,M1 3imprumutate3 de la alte pagini %e$ /pentru a vedea codul sursa al unei pagini %e$, in Internet ;#plorer intra in meniul Jie% si apoi selectea!a 7ource2

Pentru a intra in posesia editoarelor 0,M1 sau a variantelor demo ale editoarelor profesionale, le poti descarca de pe internet, dar daca nu ai o cone#iune $una la internet, le poti gasi si pe <+(urile revistelor de I,. 5isierul pe care il vom edita se va numi in2#4.3%'l. In general fisierul principal al unui site internet /cel care se incarca atunci cand tastam o adresa de genul %%%.a$c.a$c2 este numit inde#.*tml. Instructiunile pe care le folosim intr(o pagina 0,M1 se numesc %a1(uri si acestea indica $ro%ser(ului /Netscape, Internet ;#plorer, etc2 modul de pre!entare a informatiei din pagina. ,ag(urile se scriu intre semnele \ si ]. ,ag(urile nu tre$uie scrise respectand reguli foarte stricte /nu e nevoie sa scrii numai cate un tag pe rand sau sa foloseti numai litere mari, etc2."n e#emplu de utili!are a tag(ului 5ON, este \5ON, 5)<;@)6I)1 <O1O6@^55PPPP]):< 761 ( lider pe piata serviciilor\>5ON,]

Instructiunea de mai sus va determina afisarea te#tului 3):< 761 ( 1ider pe piata serviciilor3 cu font arial si culoarea rosie. +upa cum se poate o$serva, e#ista un tag inain%#a te#tului si unul care in$3#i# te#tul respectiv. Ma)"!i%a%#a %a1-&!il"! 5&n$%i"n#aza in a$#s% '"26 s# &n inain%#a in5"!'a%i#i # $a!# 2"!i' sa " !#z#n%a' in%!-&n an&'# '"2 ia! a "i la s5a!si%&l a$#s%#ia , ca in e#emplul de mai sus. <ontinutul oricarui fisier 0,M1 tre$uie inclus intre tag(urile 7*TML8 si 79*TML8. )ceasta inseamna ca tag( ul \0,M1] tre$uie sa fie primul lucru care apare intr(un fisier 0,M1, iar tag(ul \>0,M1] tre$uie sa fie ultimul \0,M1] ...aici \>0,M1] se completea!a informatia de pre!entat in pagina...

<a structura, o pagina 0,M1 are doua parti o parte delimitata de tag(urile 7*EAD8 si 79*EAD8 ce contine informatii de identificare a paginii si o parte delimitata de tag(urile 7BOD:8 si 79BOD:8 ce contine informatiile de pre!entat efectiv in pagina. )supra primei sectiuni nu vom insista prea mult. <el mai important tag utili!at in sectiunea 0;)+ este cel care da titlul paginii. )cest titlu va fi incadrat de 7TITLE8 si 79TITLE8. "n e#emplu de pagina 0,M1 foarte simpla, avand titlul 3):< 7613 este \0,M1] \0;)+] \,I,1;]):< \>0;)+]

761\>,I,1;]

\:O+R] ...aici \>:O+R] \>0,M1]

se

completea!a

continutul

paginii...

,ag(urile \0,M1]...\>0,M1], \0;)+]...\>0;)+], \,I,1;]...\>,I,1;] si \:O+R]...\>:O+R] vor aparea o singura data in cadrul unui fisier 0,M1, dupa cum arata e#emplul de mai sus. )pasa pe imaginea de mai jos pentru a vedea cum arata fisierul ce contine instructiunile de mai sus /se desc*ide intr(o fereastra separata pe care o poti inc*ide dupa consultare2

2. D#s !# %#4%#

<el mai important element al unei pagini internet este, desigur, %#4%&l. Intr(o forma simpla, acesta poate fi scris efectiv intr(o pagina 0,M1, dupa cum am va!ut in e#emplul anterior am scris in fisierul 0,M1 te#tul 3...aici se completea!a informatia de pre!entat in pagina...3 si acesta s(a incarcat in mod identic in $ro%ser.

Jom studia in continuare elemente de 5"!'a%a!# a %#4%&l&i. +oua lucruri tre$uie mentionate in primul rand, legate de formatarea te#telor utili!area s a%iil"! si %!#$#!#a la &n n"& !an2 . Intr(un fisier 0,M1 afisarea mai multor spatii consecutive nu este posi$ila prin scrierea directa in fisierul *tml ci folosind de mai multe ori sintagma ;n(s <. )stfel, pentru a pune trei spatii intre cuvintele ):< si 761 in te#tul 3):< 7613 va tre$ui sa scriem in fisierul 0,M1 astfel ):<Bn$spKBn$spKBn$spK761

T!#$#!#a la &n n"& !an2 nu se face apasand ;nter in fisierul 0,M1, ci utili!and tag(ul 7BR8 /acest tag se utili!ea!a singurK nu se foloseste cu \>:6]2.)stfel, pentru a scrie 3):<3 pe un rand, a lasa un rand li$er, si 37613 pe un rand separat, vom folosi ):<\:6]\:6]761

)m utili!at mai sus de doua ori tag(ul :6 o data pentru a trece la un nou rand si o data pentru a lasa un rand li$er. ,ag(ul utili!at pentru formatarea modului de afisare a te#tului este 7FONT8...79FONT8. ,ag(ul 5ON, suporta mai multi parametri, printre care ( 7IQ;@#, unde # este dimensiunea fontului /1 fiind dimensiunea cea mai mica2K ( <O1O6@^6699:: ( culoarea cu care se va afisa fontul /vom reveni asupra acesteia in capitolul urmator2.<uloarea implicita este negruK ( 5)<;@font ( fontul cu care va fi scris te#tul respectiv. )tentieY Ji!itatorii paginii tale tre$uie sa ai$a fontul respectiv instalat pe calculator, deci utili!ea!a numai fonturi 3clasice3. 5ontul implicit este ,imes Ne% 6oman )cesti parametri poti fi utili!ati separat sau simultan in cadrul tag(ului 5ON,. )stfel, instructiunea de mai jos afisea!a te#t folosind culoarea al$astru \5ON, <O1O6@^PPPP))]):< 761 ( 1ider pe piata serviciilor\>5ON,]

Instructiunea de mai jos afisea!a acelasi te#t cu font arial, culoare al$astra si dimensiune mai mare \5ON, <O1O6@^PPPP)) 7IQ;@D 5ON,@)6I)1 ]):< 761 ( 1ider pe piata serviciilor\>5ON,]

+upa cum se poate vedea, se pot utili!a mai multi parametri in cadrul aceluiasi tag 5ON,. )cestia nu se despart prin virgula, ci printr(un spatiu.+e retinut ca parametrul 5)<; poate primi mai multe fonturi. )stfel, un tag de tipul 7FONT FACE=>ERDANA?ARIAL8...79FONT8 va instrui $ro%serul sa utili!e!e fontul Jerdana, iar daca acesta nu este gasit, sa utili!e!e )rial. Mai e#ista trei tag(uri utile pentru formatarea te#telor 7B8...79B8 ( utili!at pentru scrierea te#telor cu ("l2, 7I8...79I8 ( utili!at pentru scrierea te#telor cu italics /litere inclinate2 si 7U8...79U8 ( pentru a scrie te#t su$liniat. +esigur, pot e#ista com$inatii intre tag(ul 5ON, si tag(urile de su$liniare, ingrosare sau inclinare, ca de e#emplu \5ON, <O1O6@^PP))PP]\:],e#t verde ingrosat\>:]\>5ON,]

,ine cont ca tag(urile tre$uie inc*ise in aceeasi ordine in care au fost desc*ise. Pentru e#emple concrete de utili!are a tuturor informatiilor de mai sus, apasa pe imaginea de mai jos /se desc*ide intr(o fereastra separata pe care o poti inc*ide dupa consultare2

In fisierul inde#.*tml desc*is in Notepad, sterge randul cu 3...aici se completea!a informatia de pre!entat in pagina...3 si inlocuieste(l cu \:6] \5ON, \:6] 7IQ;@D <O1O6@^PPPP))]\:]):< 761 ( 1ider pe piata serviciilor\>:]\>5ON,]

)cum, daca salve!i fisierul inde#.*tml si il reincarci in :ro%ser, ar tre$ui sa arate cam asa /apasa pe

imaginea de mai jos ( se va desc*ide intr(o fereastra noua2

;#emplu \*tml] <head> <title> :locuri paragraf</title> </head> <body> Prima linie <p> 1ini generata de un paragraf /implicit paragraful este aliniat la stanga2. <p align="right"> Paragraf aliniat la dreapta.Paragraf aliniat la dreapta.Paragraf aliniat la dreapta.Paragraf aliniat la dreapta. Paragraf aliniat la dreapta.Paragraf aliniat la dreapta.Paragraf aliniat la dreapta. <p align="center"> Paragraf aliniat in centru.Paragraf aliniat in centru.Paragraf aliniat in centru.Paragraf aliniat in centru. Paragraf aliniat in centru.Paragraf aliniat in centru.Paragraf aliniat in centru. </body> </html>

+. D#s !# $&l"!i

)m va!ut in capitolul anterior ca te#tele din paginile 0,M1 pot avea diverse culori cu un tag de tipul 7FONT COLOR=@00FF008...79FONT8. Jom pre!enta in continuare sis%#'&l 2# $"2i5i$a!# a $&l"!il"! pentru paginile %e$. 5iecare culoare este interpretata ca fiind compusa din diverse procente ale culorilor !"s&, A#!2# si al(as%!&. )cestea sunt e#primate prin numere in $a!a 1M. )stfel, numarul PP repre!inta nivelul minim dintr(o anumita culoare iar numarul 55 repre!inta nivelul ma#im. )cordand ponderi e#primate prin aceste numere in $a!a 1M culorilor rosu, verde si al$astru /6ed, 9reen, :lue ( 69:2 se poate o$tine orice culoare \5ON, <O1O6@^55PPPP] !"s& \5ON, <O1O6@^PP55PP] A#!2# \5ON, <O1O6@^PPPP55] al(as%!&

\5ON, <O1O6@^5555PP] 1al(#n \5ON, <O1O6@^55PP55] '"A \5ON, <O1O6@^PP5555] (l#& \5ON, <O1O6@^PPPPPP] n#1!& \5ON, <O1O6@^555555] /al$2

<ulorile de mai sus vor fi mai putin 3aprinse3 daca in loc de 55 se foloseste )), spre e#emplu @00AA00. 5olosind acelasi sistem vom putea specifica culoarea de fundal / (a$B1!"&n22 a unei pagini %e$, in cadrul tag( ului :O+R despre care am vor$it la inceputul acestui g*id \:O+R

:9<O1O6@^++5555]

,ag(ul :O+R mai poate contine si alte informatii interesante, ca de e#emplu culoarea cu care vor fi afisate lin4( urile catre alte pagini /utili!and atri$utul 1INS2 si lin4(urile catre alte pagini care au fost vi!itate deja /folosind atri$utul J1INS2 \:O+R :9<O1O6@^++5555 1INS@^PPPP))

J1INS@^PPPP))]

In fisierul inde#.*tml din Notepad, inlocuieste randul continand tag(ul 7BOD:8 cu cel de mai sus si salvea!a fisierul /se inlocuieste tag(ul :O+R de la inceputul fisierului, nu cel de la sfarsit care este \>:O+R]2. 5undalul paginii tale ar tre$ui sa devina $leu

C. D#s !# %a(#l#

,a$elele se utili!ea!a folosind tag(ul 7TABLE8...79TABLE8. Imaginati(va un ta$el simplu desc*is in &ord care cuprinde mai multe casute. In fisierul 0,M1, casutele sunt organi!ate pe !an2&!i /ro%s ( linii ori!ontale de casute2. 1a randul lor, randurile sunt organi!ate in #l#'#n%# /casute2 1

,a$elul de mai sus contine G randuri, fiecare rand continand L elemente.In interiorul unui tag de tip ,):1;, randurile sunt declarate folosind tag(ul 7TR8...79TR8, iar in cadrul fiecarui tag ,6 elementele sunt declarate cu tag(ul 7TD8...79TD8. 5iecare element /casuta2 poate contine te#t, imagini, lin4(uri, etc. "n ta$el de tipul celui de mai sus ar fi codificat astfel \,):1;] \,6]\,+]1\>,+]\,+]\>,+]\,+]\>,+]\,+]\>,+]\,+]\>,+]\>,6] \,6]\,+]\>,+]\,+]\>,+]\,+]\>,+]\,+]\>,+]\,+]\>,+]\>,6] \,6]\,+]\>,+]\,+]\>,+]\,+]\>,+]\,+]\>,+]\,+]\>,+]\>,6] \>,):1;]

In e#emplul de mai sus avem un tag 7TABLE8...79TABLE8 care delimitea!a ta$elul si trei tag(uri 7TR8...79TR8 corespun!and celor trei randuri ale ta$elului. 5iecare tag ,6 contine cate L tag(uri 7TD8...79TD8. Intre \,+] si \>,+] se introduce continutul efectiv al fiecarei casute. In e#emplul de mai sus numai casuta din stanga(sus are continut ( cifra 1 /nu incercati e#emplul de mai sus, intrucat casutele fara continut nu sunt afisate2. ,ag(urile de definire a ta$elelor pot avea diverse atri$ute, pentru formatarea ta$elului. )stfel, tag(ul ,):1;

poate avea ( &I+,0@# sau &I+,0@#W ( acesta specifica lungimea intregului ta$el in pi#eli /de e#emplu &I+,0@LPP2 sau in procente fata de lungimea intregii ferestre /de e#emplu &I+,0@LPW2K ( 0;I90,@# sau 0;I90,@#W ( similar cu &I+,0, dar pentru inaltimea intregului ta$el /e#emple 0;I90,@GPP sau 0;I90,@1PPW2K ( :O6+;6@# ( daca # este 1 atunci ta$elul va avea si 3cadru3 /linii de delimitare a elementelor. +aca # este P, atunci acestea vor lipsi /deci :O6+;6@P sau :O6+;6@12K ( <;117P)<IN9@# ( specifica spatiul dintre casute, in pi#eliK ( <;11P)++IN9@# ( specifica spatiul dintre marginea unei casute si continutul acesteia, in pi#eli. 7i in acest ca! pot fi folosite toate aceste atri$ute impreuna, numai o parte a lor, sau nici unul. "n tag ,):1; ce le foloseste pe toate ar arata astfel \,):1; .......... \>,):1;] &I+,0@NPW 0;I90,@8PP :O6+;6@1 <;11P)++IN9@P <;117P)<IN9@L]

7i tag(ul ,+ poate avea tot felul de atri$ute interesante ( &I+,0@# sau &I+,0@#W ( lungimea casutei in pi#eli sau ca procent din lungimea intregului ta$elK ( 0;I90,@# sau 0;I90,@#W ( inaltimea casutei in pi#eli sau ca procent din inaltimea intregului ta$elK ( :9<O1O6@^6699:: ( culoarea fundalului casutei, ca de e#emplu :9<O1O6@^;;;;++. ( )1I9N@6I90,, )1I9N@1;5, sau )1I9N@<;N,;6 ( modul cum va fi po!itionat continutul casutei in casuta la dreapta, la stanga sau centralK ( J)1I9N@,OP, J)1I9N@:O,,OM sau J)1I9N@<;N,;6 ( similar, dar pentru po!itionarea pe verticala sus, jos sau central. ,ine cont de faptul ca te#tul din interiorul unei casute tre$uie formatat si el la randul sau. O casuta ce ar contine un te#t rosu pe fond verde desc*is s(ar codifica astfel \,+ :9<O1O6@^++55++]\5ON, <O1O6@^))PPPP]te#t\>5ON,]\>,+]

Ja pre!entam si doua ta$ele atipice <;1"1) 1 <;1"1) 8 <;1"1) G <;1"1) D "n asemenea ta$el s(ar codifica astfel

\,):1;] \,6]\,+]<;1"1) \,6]\,+ \>,):1;]

1\>,+]\,+]<;1"1) 8\>,+]\,+]<;1"1) COLSPAN=+]<;1"1)

G\>,+]\>,6] D\>,+]\>,6]

Notea!a utili!area atri$utului COLSPAN=+ in prima celula a celui de(al doilea rand. )cesta spune ca celula respectiva se 3intinde3 pe lungimea a trei celule din structura normala a ta$elului.+esigur, acest al doilea rand va contine numai o singura celula, nu trei. 7imilar se poate proiecta un ta$el cu o celula care se intinde pe verticala pe spatiul a doua celule <;1"1) 1 <;1"1) 8 <;1"1) D <;1"1) L 7i \,):1;] \,6]\,+]<;1"1) \,+ \,6]\,+]<;1"1) \>,):1;] codul 1\>,+]\,+]<;1"1) ROWSPAN=2]<;1"1) D\>,+]\,+]<;1"1)

<;1"1) G

este

8\>,+] G\>,+]\>,6] L\>,+]\>,6]

7e o$serva utili!area atri$utului ROWSPAN=2 in a treia celula a primului rand al ta$elului. )cesta spune ca aceasta celula se intinde pe verticala pe 3inaltimea3 a doua randuri. +esigur, cel de(al doilea rand contine numai doua celule /nu trei2, intrucat a treia vine din randul de sus. ,a$elele pot repre!enta un instrument foarte puternic in cadrul unui fisier 0,M1. O te*nica interesanta de po!itionare cat mai e#acta a unor informatii consta in utili!area unor ta$ele in ta$ele /tag(uri ,+ care au drept continut un ta$el, de e#emplu2. In acest ca! este foarte importanta succesiunea corecta a tag(urilor ,+, ,6 si ,):1; pentru o afisare corecta. O alta te*nica interesanta este utili!area ta$elelor cu :O6+;6@P /fara cadru2 pentru gruparea unor date fara a da impresia e#istentei unui ta$el propriu(!is. D. E4#' l# 2# %a(#l# In continuare vom da doua e#emple de ta$ele care pot fi incarcate si in fisierul inde#.*tml des#*is in Notepad

\,):1; &I+,0@CPP :O6+;6@P <;11P)++IN9@L <;117P)<IN9@L] 7TR8 \,+ &I+,0@GPW :9<O1O6@^PPMMMM )1I9N@1;5,] \5ON, 5)<;@J;6+)N),)6I)1 7IQ;@8 <O1O6@^555555] \:] )dresa \>:]\>5ON,]\>,+] \,+ :9<O1O6@3^<<;;;;3 )1I9N@1;5,] \5ON, 5)<;@J;6+)N),)6I)1 7IQ;@8] \I] :ulevardul Independentei nr. P, :loc P, )p P, 7ector P, :ucuresti \>I]\>5ON,]\>,+] 79TR8 7TR8 \,+ &I+,0@GPW :9<O1O6@^PPMMMM )1I9N@1;5,] \5ON, 5)<;@J;6+)N),)6I)1 7IQ;@8 <O1O6@^555555] \:] )ctivitate \>:]\>5ON,]\>,+] \,+ :9<O1O6@3^<<;;;;3 )1I9N@1;5,] \5ON, 5)<;@J;6+)N),)6I)1 7IQ;@8] \I] ):< 761 va ofera o gama larga de produse si servicii necesare de!voltarii activitatii societatii +umneavoastra. Ne recomandam prin structura deose$ita a ofertei noastre precum si prin politica de preturi practicata. \>I]\>5ON,]\>,+] 79TR8 \>,):1;] ;#emplul de mai sus nu contine decat notiuni e#plicate deja in capitolele anterioare este vor$a de un ta$el 3clasic3 cu lungime de CPP pi#eli /&I+,0@CPP2, fara cadru /:O6+;6@P2 si cu spatiu de L pi#eli atat intre casute /<;117P)<IN9@L2 cat si intre cadru si informatia din casuta /<;11P)++IN9@L2K ta$elul are doua randuri /continute intre cele doua perec*i de tag(uri 7TR8...79TR82K fiecare rand contine cate doua casute ( prima de lungime GPW din total /&I+,0@GPW2 cu culoarea fondului $leumarin /:9<O1O6@^PPMMMM2 si te#tul aliniat la stanga. ,e#tul din aceasta casuta este scris cu font Jerdana de dimensiune 8 si culoare al$a /5ON, 5)<;@J;6+)N),)6I)1 7IQ;@8 <O1O6@^5555552 si este ingrosat /:2. ( a doua casuta cu fond $leu /:9<O1O6@^<<;;;;2 si te#t aliniat de asemenea la stanga /)1I9N@1;5,2. <ontine te#t cu acelasi font Jerdana de dimensiune 8, dar scris cu negru /implicit2 si cu litere inclinate /I2. Poti copia e#emplul de mai sus in fisierul tau inde#.*tml desc*is in Notepad /po!itionea!a(l intre ultimul tag 7BR8 si tag(ul 79BOD:8 de la sfarsitul fisierului2. Incarcat intr(un $ro%ser, inde#.*tml ar tre$ui sa arate astfel

Iti \,):1; \,6]\,+ \5ON, \:]

mai

pre!entam &I+,0@CPP

inca

un

ta$el, :O6+;6@1

ceva

mai

simplu

5)<;@J;6+)N),)6I)1 NO"

<;11P)++IN9@L] :9<O1O6@^<<;;;;] 7IQ;@8] \>:]

Incepand cu luna fe$ruarie societatea noastra aplica reduceri la produsele oferite de la GPW la LPW, in functie de cantitate. Ja invitam sa ne apelati la telefon \:]PPP.PPPP\>:] pentru informatii suplimentare. Ja stam la dispo!itie si prin \:]e(mail\>:] cu o oferta completa de preturi. Puteti vi!ita si pagina societatii \:]FRQ\>:] cu care cola$oram indeaproape apasati aici. \>,+]\>,6]\>,):1;]

)cest ta$el are aceeasi lungime de CPP de pi#eli /&I+,0@CPP2, are si cadru /:O6+;6@12 si un spatiu de la cadru la te#tul din casute de L pi#eli /<;11P)++IN9@L2. ,a$elul contine un singur rand si o singra casuta in acest rand. <asuta are fondul $leu /:9<O1O6@^<<;;;;2.In interiorul casutei este un te#t scris cu font Jerdana de dimensiune 8. "nele cuvinte din ta$el sunt scrise cu $old /:2.

<opia!a si acest e#emplu in fisierul tau inde#.*tml desc*is in Notepad /po!itionea!a(l intre tag(ul 79TABLE8 de jos si tag(ul 79BOD:8 de la sfarsitul fisierului2. Incarcat intr(un $ro%ser, inde#.*tml ar tre$ui sa arate cam asa acum

-. LinB-&!i si "zi%i"na!#

"n element important al oricarei pagini %e$ il constituie linB-&!il# catre alte pagini. )cestea pot fi lin4(uri e#terne, care fac referire catre un alt site, sau lin4(uri interne care fac referire catre alte pagini ale aceluiasi site. )m$ele tipuri se codifica asemanator prin folosirea unui tag de tipul 7A *REF=linB.3%'l8...79A8 /pentru un lin4 intern2 sau 7A *REF=3%% 699EEE.a($.a($8...79A8 pentru un lin4 e#tern. )stfel codul de mai jos va afisa te#tul 3)pasati aici pentru pagina 83 care prin apasare va incarca fisierul pag8.*tml \) 06;5@pag8.*tml])pasati aici pentru pagina 8\>)]

<odul de mai jos va afisa 3)pasati aici pentru pagina FRQ 7613, te#t care prin apasare va incarca pagina %%%.#=!.#=! \) 06;5@*ttp >>%%%.#=!>#=!])pasati aici pentru pagina FRQ 761\>)]

In e#emplul de mai sus poti specifica in ce mod se va incarca pagina respectiva folosind atri$utul TARGET ( ,)69;,@3nume3, unde nume este numele pe care vrei sa il dai unei noi ferestre unde se va incarca pagina. Poti folosi si ,)69;,@3_$lan43 pentru o fereastra noua sau ,)69;,@3_self3 pentru incarcarea in aceeasi fereastra. O alta varianta este posi$litatea transmiterii unui e(mail. )stfel, codul de mai jos afisea!a 37crie(neY3, te#t care prin apasare va desc*ide o fereastra pentru transmiterea unui mesaj la adresa officeZa$c.a$c \)

06;5@3mailto officeZa$c.a$c3]7crie(neY\>)]

In acelasi mod o pagina 0,M1 poate fi impartita in mai multe 3capitole3 /sectiuni2, in ca! ca este foarte lunga. )stfel, fiecarei sectiuni i se va asigna un nume, nume ce va putea fi utili!at in incarcarea paginii respecitve, astfel incat sa se afise!e e#act sectiunea respectiva. 5ie fisierul lucrare.*tml pe care il impartim in doua sectiuni.<odul care face acest lucru ar fi \) ...te#t \) ...te#t NAME=&n&]7ectiunea pentru NAME=2"i]7ectiunea pentru sectiunea sectiunea

1\>)] 1... 8\>)] 8...

)poi, daca dorim sa incarcam fisierul lucrare.*tml din alta pagina, dar astfel incat sa se incarce direct sectiunea 8, vom utili!a

\)

06;5@lucrare.*tml@2"i])pasa

aici\>)]

<el mai $ine vom demonstra aceste lucruri printr(un e#emplu /se desc*ide intr(o pagina separata2

In mod similar poti afisa fisiere te#t /cu e#tensia %4%2 sau poti da posi$ilitatea vi!itatorului sa salve!e pe disc un alt tip de fisier /zi de e#emplu2 \) 06;5@raport.t#t]6aport\>)] sau \) 06;5@program.!ip]7alvea!a programul\>)]

"n alt element util in formatarea paginii %e$ este tag(ul 7CENTER 8...79CENTER8. )cesta este utili!at pentru alinierea pe centru a unor elemente /te#te, ta$ele imagini2. ,ot ce este scris intre tag(ul \<;N,;6] si \><;N,;6] va apare centrat.

In fisierul nostru desc*is in Notepad vom folosi tag(ul <;N,;6 pentru a po!itiona central elementele paginii. )stfel, vom introduce tag(ul 7CENTER8 imediat dupa tag(ul :O+R de la inceputul fisierului /\:O+R :9<O1O6@3^++55553 1INS@3^PPPP))3 J1INS@3^PPPP))3]2 si vom mai introduce si 79CENTER8 imediat inainte de tag(ul \>:O+R] de la sfarsitul fisierului. Mai facem o im$unatatire fisierului inde#.*tml desc*is in Notepad, prin introducerea unor lin4(uri. Identifica in cel de(al doilea ta$el din acest fisier te#tul 3Ja stam la dispo!itie si prin \:]e(mail\>:]3 si inlocuieste \:]e( mail\>:] cu \:]\)

06;5@3mailto infoZa$c.a$c.ro3]e(mail\>)]\>:]

+e asemenea identifica si te#tul 3apasati aici3 de la sfarsitul ta$elului si inlocuieste cuvantul 3aici3 cu \) 06;5@*ttp >>%%%.#=!.#=!

,)69;,@3_$lan43]aici\>)]

5isierul nostru desc*is in Notepad ar tre$ui sa arate acum cam asa

)cum toate elementele ta$elului /titlul si cele doua ta$ele2 sunt po!itionate pe centru si e#ista lin4(uri pentru e( mail si pagina FRQ. ;#emplul 1 \*tml] <head> <title> <omutarea intre doua pagini</title> </head> <body> <h3>Pagina 1 </h3> <a href="leg_ex2.html"> 1in4 catre pagina 8 </a> </body> </html> ;#emplul 8

\*tml] <head> <title> 1in4 catre site(ul firmei Netscape</title> </head> <body> <h3>1in4 catre site(ul firmei Netscape </h3> <a href="http://www.netscape.com"> Netscape <orporation </a> </body> </html>

F. Ul%i'#l# !#%&s&!i 7untem foarte aproape de a da o forma finala fisierului nostru inde#.*tml desc*is in Notepad si care a servit ca e#emplu pana acum. Mai intai vom introduce si tag(ul 7*R8. )cesta are un rol foarte simplu si anume ( de a trasa o linie ori!ontala pe toata latimea ferestrei. )cest tag functionea!a la fel ca si :6 /adica, nu se foloseste \>06]2. ,ag(ul 06 primeste si atri$utul WIDT* su$ forma &I+,0@# sau &I+,0@#W care specifica lungimea liniei in pi#eli sau ca procent din latimea totala a ferestrei. ;#emplu \06

&I+,0@MPP]

In fisierul inde#.*tml desc*is in Notepad introducem urmatoarele instructiuni intre ultimul tag 79TABLE8 si tag(ul 79CENTER8 de la sfarsitul fisierului \:6]\:6]\:6]\:6]\:6]\:6]\06] \5ON, ,oate Pagina reali!ata 5)<;@)6I)1 drepturile in

anul

7IQ;@1] re!ervate. 8PP1\>5ON,]

Mai introducem si un tag 7BR8 intre cele doua ta$ele pentru a le distanta /deci intre tag(ul 79TABLE8 al primului ta$el si tag(ul 7TABLE8 al celui de(al doilea ta$el2. In acest moment fisierul inde#.*tml este gata in aceasta varianta si ar tre$ui sa arate cam asa

Jom folsi aceasta oca!ie pentru a pre!enta si modalitatea de includere a unor comentarii intr(o pagina 0,M1. )cestea tre$uie incluse intre 7G-si --8 ca in e#emplul urmator \Y(( acest te#t nu va fi afisat in pagina ((]

)ici se inc*eie prima parte a g*idului. In continuare vom pre!enta cateva notiuni despre imagini, cadre /frames2 precum si despre graficCAP >III - D#s !# i'a1ini Pre!entarea imaginilor in pagini 0,M1 se face folosind tag(ul 7IMG SRC=n&'#8, unde nume este numele unui fisier 1i5 sau ) 1. ;#emplu \IM9 76<@sigla.gif], va afisa /presupunand ca avem deja fisierul sigla.gif2

,ag(ul IM9 poate primi si atri$utul BORDER cu formele :O6+;6@P /implicit2 sau :O6+;6@n ( pentru un c*enar in jurul po!ei de dimensiune n pi#eli. O po!a intr(un c*enar arata mai $ine \IM9 76<@sigla.gif :O6+;6@1], va afisa

7e poate folosi o imagine si drept lin4 catre o alta pagina \) 06;5@3mailto infoZa$c.a$c3]\IM9 76<@sigla.gif :O6+;6@P]\>)], va afisa

<u un clic4 pe imaginea de mai sus se va desc*ide o fereastra pentru compunerea unui mesaj.7e mai pot folosi imagini si drept 5&n2al #n%!& a1ini in%#!n#%. Pentru aceasta, vom introduce atri$utul BACHGROUND in cadrul tag(ului 7BOD:8 de la inceputul unui fisier \:O+R ;fectul unei asemenea comen!i va fi /presupunand ca avem deja fisierul $4g.gif2

:)<S96O"N+@$4g.gif]

a, design(ul si continutul unei pagini %e$. CONTINUT EITREN .

"n lucru foarte interesant in ca!ul paginilor %e$ este ca sursa acestora poate fi va!uta in mod li$er oricand. )stfel, daca navig*e!i pe internet si descoperi o pagina interesanta, poti face clic4 pe fereastra respectiva cu $utonul din dreapta al mouse(ului si selecta >i#E S"&!$#. )stfel, vei putea studia modul de reali!are a paginii respective si invata cate ceva. +esigur, proiectarea si programarea paginilor %e$ nu se re!uma la lim$ajul 0,M1 ( acesta este doar punctul de plecare. In rest? ;#ista multe te*nologii precum p*p, asp, flas*, java, cgi, etc pentru internet, te*nologii cu ajutorul carora se pot reali!a tot felul de programe si im$unatatiri pentru pagini %e$. Pro$a$il ai va!ut pe alte site(uri asemenea programe ( pentru evidenta numarului de vi!itatori pe site /countere2, modalitati de comunicare cu vi!itatorii /guest$oo4, forum2, etc ( si ti(au facut cu oc*iul. +in pacate g*idul de proiectare %e$ al verde.ro se re!uma la 0,M1, cel putin la acest moment. +ar e#ista alte modalitati de includere a unor asemenea programe pe site(ul tau folosirea unor servicii gratuite disponi$ile pe internet. 7pre e#emplu, e#ista site(uri care iti ofera in mod gratuit si simplu posi$ilitatea de a include un $"&n%#! pe site(ul tau, pentru a afla cati vi!itatori intra pe site, de unde vin, pe ce pagini merg, etc. Noi folosim counter(ul furni!at de sitemeter.com. )pasa ai$i pentru a iti crea si tu un counter sau pentru informatii suplimentare /se desc*ide intr(o fereastra separata2. <are este procedura? te vei inregistra cu site(ul tau pe sitemeter, vei completa o serie de formulare, iar apoi vei copia un portiune de cod in pagina ta, conform indicatiilor date. )cel cod va afisa un mic element grafic /deci, atentie unde il po!itione!i pentru a se incadra in pagina2 pe care, daca faci clic4, intri in pagina cu informatii despre vi!itatorii tai. Precum acest serviciu, e#ista multe servicii gratuite pentru un guest$oo4 /3agenda3 unde vi!itatorii iti pot scrie

impresii2, forum de discutii, etc. "n serviciu interesant este cel oferit de 3&'an$li$B.$"' care te lasa sa iei legatura in mod direct cu vi!itatorii tai, atunci cand esti on(line. <e tre$uie sa faci pentru a identifica alte asemenea servicii? 5ii atent la paginile pe care le vi!ite!i aceste servicii au cate un lin4 /care poate fi te#t sau o sigla2 catre pagina proprie, pagina de unde te poti inscrie si tu pentru un serviciu similar. ;#ista si site(uri care iti ofera in mod gratuit posi$ilitatea de a adauga continut pe site(ul tau informatii despre timpul pro$a$il, stiri, date financiare, astrologie, etc. )semenea servicii au aparut si in 6omana, tre$uie doar cautate cu atentie. Incearca, insa, sa nu a$u!e!i de aceste elemente furni!ate de alte site(uri in definitiv, incerci sa faci singur un site. . D#s !# $a2!# J5!a'#sK Poti imparti fereastra in mai multe !one sau cadre /numite frames2. )cest lucru este foarte util in mai multe situatii. 7pre e#emplu, poti imparti pagina pe verticala in doua !one una mai mica unde poti avea un meniu cu mai multe optiuni, si una mai mare unde se incarca informatiile

;#emplul de mai sus cuprinde mai multe fisiere *tml e#11.*tml si e#11$.*tml ( fisierele care indica modul de impartire a ferestrei in doua ecrane, fisierul e#11_id#.*tml ( care repre!inta frame(ul din stanga cu meniul si fisierele e#11_dat.*tml si e#11$_dat.*tml cu frame(ul din dreapta continand informatia efectiva. 5isierul e#11.*tml arata cam asa \0,M1] \56)M;7;, \56)M; \56)M; \>56)M;7;,] \>0,M1] <O17@318P,`3 56)M;:O6+;6@3NO3 :O6+;6@3P3 N)M;@3inde#3 N)M;@3main page3

56)M;7P)<IN9@3P3] 76<@e#11_id#.*tml] 76<@e#11_dat.*tml]

)cesta declara un set de doua frame(uri /56)M;7;,2 organi!ate pe verticala, primul frame de 18P de pi#eli latime si al doilea de restul /<O17@318P,`32, fara cadru /56)M;:O6+;6@3NO32 si fara spatiu intre ele /56)M;7P)<IN9@3P32. 5rame(ul din stanga se va numi inde# si va afisa fisierul #11_dat.*tml /cel cu meniul2 iar cel din dreapta se va numi main page si va afisa fisierul e#11_dat.*tml /cel cu informatiile despre ):< 7612. 5isierul e#11$.*tml este identic cu cel de sus cu e#ceptia faptului ca in frame(ul din dreapta afisea!a fisierul e#11$_dat.*tml cu informatii despre FRQ 761. 5isierul e#11_id#.*tml ce contine meniul va arata cam asa

\0,M1]\:O+R :9<O1O6@^GGGGGG 1INS@^555555 J1INS@^555555 ,;F,@^555555] \:6]\5ON, 5)<;@J;6+)N),)6I)1 7IQ;@8]\:] \) 06;5@e#11.*tml ,)69;,@3_top3]):< 761]\>)]\:6]\:6] \) 06;5@e#11$.*tml ,)69;,@3_top3]FRQ 761]\>)]\>:]\>5ON,] \>:O+R]\>0,M1] )cest fisier contine meniul din partea stanga cu doua lin4(uri ce afisea!a paginile de pre!entare ale ):< 761 /e#11.*tml2 sau FRQ 761 /e#11$.*tml2. "n e#emplu de impartire a ferestrei in doua cadre pe ori!ontala arata astfel

5isierul

care

organi!ea!a

cele

doua

cadre

se

codifica

astfel

\0,M1] \56)M;7;, \56)M; \56)M; \>56)M;7;,] \>0,M1]

6O&7@3LPW,`3

56)M;:O6+;6@3NO3 :O6+;6@313 N)M;@3inde#3 N)M;@3main page3

56)M;7P)<IN9@3P3] 76<@e#11_dat.*tml] 76<@e#11$_dat.*tml]

Notea!a utili!area atri$utului ROWS=LD0M?N

10- Proprietati de stil (CSS)


"nul dintre cele mai importante aspecte n %e$(design este, n momentul de fata, folosirea modelelor de stiluri. +efinirea proprietatilor elementelor care apar intr(un document 0,M1 cu ajutorul modelelor de stiluri ofera o mult mai mare fle#i$ilitate creatorilor de pagini &e$ n a sta$ili aspectul final pe care pagina respectiva o va avea n fereastra programului de navigare &e$. Modelele de stiluri nu repre!inta n mod practic o parte a lim$ajului 0,M1 ci se pre!inta ca lim$aj de sine statator. ;#ista diferite lim$aje de modele de stiluri, cel mai cunoscut i utili!at fiind Modelele de Stiluri n Cascada (Cascading Style Sheets - CSS) . Pentru a sta$ili lim$ajul implicit de modele de stiluri pentru un document se foloseste elementul M;,) n antetul documentului. +e e#emplu, pentru a desemna lim$ajul implicit ca fiind CSS se foloseste urmatoarea sinta#a <MET http-e!ui"#$Content-Style-Type$ content#$te%t&css$' Oricum, n ca! ca n antetul sau n *eader(ul 0,,P al documentului nu se specifica un lim$aj de modele de stiluri aplicat, lim$ajul implicit se considera a fi CSS. Pre!entarea proprietatilor de stil se poate face n G moduri la nivel de element, prin folosirea atri$utului st=le la nivel de document, prin folosirea elementului 7,R1; definit n antetul documentului prin creearea unui fisier de stiluri cu e#tensia 3css3 care poate fi aplicat mai multor documente 0,M1. 9ruparea unuia sau mai multor modele de stil intr(un fisier e#tern sau n antetul unui document 0,M1 formea!a o asa numita (oaie de stil 10)1 *olosirea atri+utului style )plicarea proprietatilor de stil la nivelul fiecarui element n parte se reali!ea!a cu ajutorul atri$utului st=le. Jaloarea acestui atri$ut este formata dintr(o multime de perec*i de forma proprietate valoare separate prin caracterul 3K3. E%emplu, <span style#$+ac-ground-color, !ua. (ont-si/e, large. cursor, hand.$' Te%t (oarte important<&span' ,re$uie stiut ca proprietatile de stil se mostenesc prin inclu!iune, adica o proprietate aplicata unui element 3parinte3 este vala$ila i pentru elementele pe care acesta le include, cu e#ceptia ca!urilor n care elementele continute nu definesc ele insele valori pentru aceasta proprietate. Pentru a specifica valori ale atri$utelor care repre!inta "61(uri ale unor fisiere se foloseste sinta#a url/cale spre fisier2, unde 3cale spre fisier3 repre!inta "61(ul relativ sau a$solut al fisierului referit. E%emplu, <+ody style # $+ac-ground-image, url())01magini0(ond2)gi().$'

10)2 1nglo+area (oilor de stil n antetul documentului <u ajutorul elementului 7,R1; amplasat n sectiunea de antet a documentului se pot defini modele de stiluri aplica$ile unuia sau mai multor elemente din cadrul acelui document. "n model de stil se poate aplica

unui singur element din document tuturor elementelor de acelasi tip ale documentului unei su$multimi de elemente ale documentului care pot fi de acelasi tip sau de tipuri diferite Pentru a aplica un model de stil unui singur element se foloseste atri$utul id de identificare a elementului n cadrul documentului. E%emplu, <3E 4' <ST56E ' 7id18(ont-si/e,19p% . te%t-align,center: <&ST56E' <&3E 4' <;<45' <h1 id # $id1$ 'P = >= *?6 2 <&h1' <&;<45' +eoarece valoarea atri$utului id este unica n interiorul unui document stilul se aplica cel mult unui singur element din cadrul documentului n al carui antet este definit modelul de stil. Pentru a defini un model de stil ce urmea!a a se aplica tuturor elementelor de acelasi tip se rescriu proprietatile care urmea!a a defini caracteristicile tipulului respectiv. +e e#emplu, daca dorim ca toate elementele de antet *1 sa fie scrise cu culoare rosie pe fond gal$en se foloseste sinta#a <ST56E' 318 +ac-ground,5ello@ .color,=ed: <&ST56E' Pentru a aplica un model de stil mai multor elemente fara a fi nevoie ca acele elemente sa fie de acelasi tip se definesc clase de stiluri aplica$ile apoi unui element cu ajutorul atri$utului class, atri$ut pe care il au toate elementele care compun corpul unui document 0,M1. O clasa de stil poate fi aplicata o$iectelor de acelasi tip sau poate fi aplicata unor o$iecte de tipuri diferite, lucrul acesta depin!and de modul de definire al clasei. +e e#emplu, pentru a defini un stil aplica$il anumitor elemente antet 01, dar nu n mod o$ligatoriu tuturor elementelor 01 se foloseste formularea <ST56E' 31)special8 +ac-ground,5ello@ .color,=ed: <&ST56E' <;<45' <h1 class#$special$ 'P = >= *?6 2 <&h1' <h1'P = >= *?6 A <&h1' <&;<45' )stfel, elementul *1 corespun!ator paragrafului 8 va avea proprietatile definite de clasa de stil 3special3, pe cand elementul *1 corespun!ator paragrafului G nu va fi afectat de declaratia de stil din antet. Pentru a defini o clasa de stil aplica$ila unor tipuri diferite de elemente se defineste clasa de stil fara a specifica un anume tip de element 0,M1 <ST56E' )special8 +ac-ground,5ello@ .color,=ed: <&ST56E' <;<45'

<31 class#$special$ 'P = >= *?6 2 <&31' <P' sa cum se speci(ica n <SP B class # $special$'paragra(ul 2 <&SP B' ))) <&P' <&;<45' )ceeasi clasa de stil este aplicata acum pentru a formata aspectul unui antet de tipul 01 i a unui $loc de te#t marcat cu elementul SP B. 10)A =e(erirea (oilor de stil e%terne Modalitatea care ofera creatorilor de documente 0,M1 cea mai mare fle#i$ilitate n crearea i apoi intretinerea unuia sau mai multor documente legate intre ele i eventual pre!entate n cadrul aceluiasi 3site3 este definirea unor modele de stiluri n fisiere de sine statatoare ( asa numitele *oi de Stil E%terne ( i referirea lor din cadrul oricarui document care necesita acest lucru. In acest fel, pentru a modifica aspectul unui document fara a modifica continutul acestia, e suficient sa se modifice fisierul foii de stil e#terne, modificarea afectand automat toate documentele care fac referire la foaia de stil respectiva. 6eferirea unei foi de stil se face cu ajutorul elementului 61BC din antetul documentului. )tri$utul *ref al elementului va repre!enta "61(ul foii de stil e#terne, iar atri$utul rel va lua valoarea 3st=les*eet3. Optional mai pot fi pre!ente i atri$utul t=pe pentru a desemna lim$ajul de stil folosit, sau title pentru a identifica foaia de stil E%emplu, <61BC rel#$stylesheet$ hre(#$StilMetal)css$ type # $te%t&css$ title #$Metalica$' ,re$uie stiut ca folosirea foilor de stil e#terne mareste timpul necesar incarcarii documentului n fereastra programului de navigare &e$, metoda cea mai putin pretentioasa din acest punct de vedere fiind definirea stilurilor la nivelul fiecarui element. 10)D Concurenta stilurilor n interiorul documentului In ca!ul n care un element cade n incidenta mai multor modele de stil definite n interiorul sau n e#teriorul documentului stilul final va fi format dintr(o suma a proprietatilor care apar n fiecare dintre modelele de stil respective. In ca!ul n care aceeasi proprietate ia valori diferite n modelele de stil care se aplica aceluiasi element valoarea finala va fi data dupa urmatoarele reguli valorile din modelele de stil definite prin elementul 7,R1; au prioritate fata de valorile pre!ente n modelele de stil e#terne i sunt, la randul lor, inlocuite de valorile aparute n stilurile definite la nivel de element. daca aceeasi proprietate apare n doua sau mai multe modele de stil inglo$ate n antetul documentului atunci modelul de stil definit prin identificator are prioritate fata de clasa de stil, care, la randul ei, are prioritate fata de stilul definit pe tipuri de elemente. E%emplu, <ST56E' )special8 +ac-ground,5ello@ : 318 +ac-ground,=ed: 7id18 +ac-ground,;lue: <&ST56E' <;<45' <31 class#$special$ id # $id1$ 'P = >= *?6 2

<&31' <&;<45'

In e#emplul de mai sus toate cele trei modele de stil sunt aplica$ile elementului 01 din document, dar valoarea finala a proprietatii 3$ac4ground3 va fi 3:lue3. 10)E =ecunoasterea proprietatilor de stil +eoarece firmele producatoare ale programelor de e#plorare &e$ i(au luat li$ertatea de a implementa dupa cum au cre!ut ele de cuviinta lim$ajele de modele de stil, adaugand fiecare dintre ele propriile proprietati de stil, este foarte dificil de pre!entat lista tuturor proprietatilor de stil pe care le puteti folosi n documentele pe care le veti creea. Pentru o documentatie completa asupra acestui su$iect vi!itati site(urile oficiale ale celor doua companii producatoare.In ca!ul n care vreti sa va asigurati ca documentul dumneavoastra va putea fi interpretat fara erori de catre variantele mai vec*i ale $ro%serelor sau de catre $ro%sere care nu recunosc deloc modelele de stil, intercalati definitiile stilurilor intre marcajele de comentariu <ST56E type#$te%t&css$' <F-31 8 color, +lue : P 8 color, green: --' <&ST56E' 10)G Proprietati de stil pentru (undal Pentru a specifica unele caracteristici care privesc fundalul unor elemente se folosesc proprietatile ; CC>=<?B4-C<6<= ( pentru a sta$ili culoarea fondului pasajului de te#t respectiv ; CC>=<?B4-1M >E ( pentru a sta$ili imaginea care va fi afisata n spatele te#tului ; CC>=<?B4-P<S1T1<B ( pentru a specifica po!itia imaginii de fundal cu ajutorul a doua valori, una specificand ase!area pe verticala, iar cea de(a doua ase!area pe ori!ontala ; CC>=<?B4-=EPE T ( determina modul n care imaginea din fundal va fi multiplicata n ca!ul n care nu acopera tot spatiul elementului. Optiunile posi$ile sunt =EPE T B<-=EPE T =EPE T-H =EPE T-5 ; CC>=<?B4- TT C3MEBT ( determina modul de dispunere a fundalului n momentul n care continutul elementului este derulat pe ori!ontala sau verticala. Optiunile posi$ile sunt SC=<66 ( imaginea din fundal se deplasea!a odata cu continutul elementului *1HE4 ( imaginea din fundal ramane fi#a atunci cand continutul elementului se deplasea!a 10)I Proprietati de stil ale te%telor Ji +locurilor de te%t Pentru a specifica proprietatile legate de pre!entarea te#telor n cadrul atri$utului st=le se folosesc urmatoarele proprietati de stil *<BT-* M165 ( pentru alegerea corpului de litera. *<BT-S5KE ( pentru alegerea dimensiunii fontului. Jalorile acestei proprietati pot fi e#primate n pi#eli, procentual, sau ca ajutorul catorva valori predefinite HH-SM 66 H-SM 66 SM 66 ME41?M 6 =>E

H-6 =>E HH-6 =>E

de

*<BT-ST56E pentru alegerea stilului de font cu variantele B<=M 6 1T 61C *<BT(%eig*tpentru specificarea grosimii fontului. Jalorile atri$uite pot fi B<=M 1 ;<64 41=ECT1<B pentru sta$ilirea directiei de scriere, avand ca valori posi$ile 6T= pentru scrierea de la stanga la dreapta =T6 pentru scrierea de la dreapta la stanga TEHT- 61>B pentru alinierea pe ori!ontala a te#tului TEHT(IN+;N, pentru indentarea te#tului fata de marginea stanga sau deapta /n functie de directia

scriere2 a elementului 3container3 care contine te#tul TEHT-T= BS*<=M pentru reali!area optiunilor litere mari(litere mici asupra te#tului. Jalorile posi$ile sunt C P1T 61KE pentru a scrie primul caracter al fiecarui cuvant cu litera mare 6<LE=C SE pentru a folosi n scriere doar litere mici ?PPE=C SE pentru a folosi n scriere doar litere mari B<BE pentru a folosi modalitatea implicita /normala2 de scriere TEHT-4EC<= T1<B pentru a specifica unele efecte simple aplicate te#tului. )stfel, puteti folosi ?B4E=61BE pentru a su$linia te#tul 61BE-T3=<?>3 pentru a taia te#tul <ME=61BE pentru a trasa o linie deasupra te#tului / neimplementat n varianta Netscape D.P2 B<BE pentru anularea acestor efecte C<6<= pentru a sta$ili culoarea te#tului 41SP6 5 pentru a alege modul de afisare a portiunii de te#t astfel B<BE daca se vrea ca te#tul sa nu fie afisat ;6<CC pentru a oferi te#tul su$ forma de 3$loc de te#t3. In felul acesta $ro%ser(ul va trece la linie noua inainte i dupa afisarea continutului $locului. 61ST-1TEM pentru a pre!enta continutul su$ forma de element al unei liste. 1B61BE pentru afisa te#tul fara a trece la linie noua, ase!area sa n interiorul elementului 3container3 fiind decisa doar de dimensiunea continutului sau /neimplementat n versiunea Netscape D.C2. 10)9 Proprietati de stil aplica+ile listelor In general, proprietatile de stil pentru formatarea te#tului raman vala$ile i pentru liste, cu conditia de $un simt ca elementele acestor liste sa fie de tip te#t. In plus e#ista cateva proprietati de stil specifice listelor i care se refera indeose$i la semnul de marcare al itemilor unei liste 61ST-ST56E-T5PE pentru a selecta tipul marcajului pentru item dintre cele presta$ilite 41SC C1=C6E SN? =E 4EC1M 6 6<LE=-=<M B ?PPE=-=<M B 6<LE=- 6P3 ?PPE=- 6P3 B<BE 61ST-ST56E-P<S1T1<B pentru a sta$ili modul de aliniere al marcajului de item n ca!ul n care te#tul cuprins n item ocupa doua sau mai multe randuri <?TS14E pentru ca marcajul sa ramana n afara $locului de te#t /valoare implicita2 1BS14E pentru ca marcajul sa fie cuprins n interiorul $locului de te#t 61ST-ST56E-1M >E pentru a sta$ili imaginea /iconita2 aplicata marcajului de item

)ceste proprietati sunt aplica$ile listelor ordonate i neordonate. +aca o lista are specificate atat atri$utul ,=pe c't i proprietatea de stil list(st=le(t=pe, marcajul de item va fi decis de proprietatea de stil. )tri$utele i proprietatile de stil pot fi aplicate intregii liste sau doar unor itemi ai listei, n functie de doleantele reali!atorului documentului 10)O Proprietati de stil pentru +ordurile o+iectelor +esi par numeroase, proprietatile de stil care vi!ea!a $ordurile o$iectelor se pot retine usor deoarece ele sta$ilesc doar trei atri$ute care se aplica fie tuturor $ordurilor, fie uneia dintre cele D $orduri posi$ile. Iata aceste proprietati ;<=4E=-C<6<= ( determina culoarea $ordurilor o$iectului. Numarul de valori i semnificatia lor sunt sunt analoage celor pre!entate la atri$utul 3margin3 ;<=4E=-ST56E ( determina stilul liniei de $ordura. )celasi stil se va aplica celor D $orduri ale o$iectului. Optiunile posi$ile sunt B<BE ( nu se afiea!a $ordura 4<TTE4 ( $ordura se afisea!a cu linie punctata pe platforme Mac*intos* i cu linie continua pe platforma &indo%s sau "ni# 4 S3E4 ( $ordura se afisea!a cu linie intrerupta pe Mac*intos* i cu linie continua pe platforma &indo%s sau "ni# S<614 ( $ordura se afisea!a cu linie continua 4<?;6E ( $ordura se afisea!a cu linie du$la Pentru a oferi un aspect tridimensional $ordurilor folositi valorile >=<<ME =14>E 1BSET <?TSET ;<=4E=-L14T3 sta$ileste grosimea liniei de $ordura. Numarul i semnificatia valorilor este analoaga celor pre!entate la atri$utul 3margin3. ;<=4E= ( sta$ileste caracteristicile $ordurii printr(un numar de G valori separate prin spatiu, valori specificand, n ordine, dimensiunea, stilul i culoarea $ordurii. E%emplu, <31 style#$+order,E solid ;lue$' )celeasi proprietati se pot specifica fiecarei $orduri n parte folosindu(va de ;<=4E=-T<P ;<=4E=-=1>3T ;<=4E=-;<TT<M ;<=4E=-6E*T

10)10 Proprietati de stil pentru po/itionare Po!itionarea elementelor n cadrul documentului este una dintre sarcinile cele mai delicate ale unui creator de pagini &e$ care doreste sa ofere un aspect atragator documentului creat. Proprietatile de stil permit multa fle#i$ilitate n aceasta privinta. Iata <ateva dintre acestea

P<S1T1<B ( determina modul de po!itionare al elementului. Optiunile posi$ile sunt ;S<6?TE ( elementul este po!itionat relativ la o$iectul container care il contine =E6 T1ME ( elementul este po!itionat relativ la po!itia pe care ar tre$ui n mod normal sa o ocupe n document

T<P ( determina po!itia elementului n functie de marginea de sus a elementului relativ la care se face po!itionarea ;<TT<M ( determina po!itia elementului n functie de marginea de jos a elementului relativ la care se face po!itionarea 6E*T ( determina po!itia elementului n functie de marginea din stanga a elementului relativ la care se face po!itionarea =1>3T ( determina po!itia elementului n functie de marginea din dreapta a elementului relativ la care se face po!itionarea 3E1>3T ( determina dimensiunea pe verticala a o$iectului L14T3 ( determina dimensiunea pe ori!ontala a o$iectului C61P ( determina afisarea doar a unei portiuni 3decupata3 din elementul respectiv. +reptung*iul decupat se e#prima su$ forma rect/sus,dreapta,jos,stanga2, unde fiecare dintre cele D valori poate fi inlocuita cu valoarea auto, care lasa marginea respectiva nedecupata. 5ormularea clip,auto afisa!a o$iectul nedecupat. )ceasta proprietate este aplica$ila doar o$iectelor care au atri$utul position a$solute. M1S1;161T5 ( determina afisarea sau neafisarea elementului n document. Jalorile posi$ile sunt 1B3E=1T ( o$iectul isi mosteneste proprietatea de la elementul 3parinte3 M1S1;6E ( o$iectul este vi!i$il 3144EB ( o$iectul nu este vi!i$il K-1B4EH ( determina modul de suprapunere a o$iectelor care au atri$utul position a$solute i care impart o aceeasi suprafata din document. O$iectele avand valoarea !(inde# mai mare vor fi ase!ate 3deasupra3 o$iectelor cu !(inde# mai mic. +oua o$iecte care se suprapun i au aceeasi valoarea pentru !(inde# vor fi ase!ate n ordinea n care apar n document. C6E = ( sta$ileste daca un $loc de te#t admite sau nu o$iecte n stanga sau n dreapta sa. Optiunile posi$ile sunt B<BE ( sunt permise o$iecte n stanga i n dreapta 6E*T ( te#tul se deplasea!a n jos po!itionandu(se su$ un eventaual o$iect situat n stanga sa =1>3T ( te#tul se deplasea!a n jos po!itionandu(se su$ un eventual o$iect situat n dreapta sa ;<T3 ( te#tul se deplasea!a n jos po!itionandu(se astfel incat sa nu e#iste o$iecte nici n stanga i nici n dreapta sa M =>1B ( determina dimensiunile pe care le va avea marginile unui o$iect. Pot fi specificate 1. singura valoare care va fi aplicata tuturor celor D margini 8. doua valori ( prima pentru marginile de sus i de jos, iar a doua pentru marginile din stanga i dreapta G. trei valori ( prima pentru marginea de sus, a doua pentru marginile din stanga i dreapta i a treia pentru marginea de jos D. patru valori ( n ordine pentru marginile de sus, dreapta, jos, stanga M =>1B- T<P M =>1B- =1>3T M =>1B- ;<TT<M

M =>1B- =1>3T P 441B> ( determina spatiul lasat intre marginile /eventual $ordura2 unui o$iect i continutul sau. Numarul i semnificatia valorilor specificate sunt identice cu cele pre!entate la proprietatea 3margin3 P P P P 441B>-T<P 441B>-=1>3T 441B>-;<TT<M 441B>-6E*T

EHEMP6?, <html' <head' <title'Proprietati de stil pentru po/itionarea elementelor<&title' <&head' <+ody style#$+ac-ground-image, url())&1magini&(ond)Ppg).$' <di" style # $position,a+solute$' <img src#$))&1magini&toamna)Ppg$ @idth#$100$ height#$100$ +order#$0$ alt#$$' <di" style#$position, a+solute. le(t, 10. top, 10. @idth,200.(ont-si/e, large. color,+lue.$' cest pasaP de te%t se suprapune imaginii <&di"' <di" style#$position, a+solute. le(t, A00p%. top,100. @idth#D00. height#100. +ac-ground-color, 7CCOO**.color,red. (ont-si/e, %-large. te%t-align,center$' Po/itionarea straturilor))) <&di"' <di" +order#$0$ cellspacing#$2$ cellpadding#$2$ style#$position, a+solute. le(t,2E0. top,1E0. @idth#D00. height#90. +ac-ground-color, +lue. color,red. (ontsi/e, %-large. $' cam asta ar (i)) <&di"' <p style#$position,a+solute. +ac-ground-color, 700009;. color, yello@. (ont-si/e, 2D.top,A00.le(t,0$' Toate cu"intele par la locul lor)))Bici mai <span style # $position,relati"e.top # 10.color,red$'susQ<&span' nici mai <span style # $position,relati"e.top # R10.color,red$'Pos<&span' <&di"' <di" style # $position,a+solute.top,D00$' <hr style # $@idth # E00.color,red$' <h2 style # $color,+lue.$'Suprapunerea Ji decuparea imaginilor,<&h2' <img src#$))&1magini&+aiat1)Ppg$ @idth#$100$ height#$100$ +order#$0$ style#$position, a+solute. top, 90./-inde%,2$ alt#$$' <img src#$))&1magini&+aiat2)Ppg$ @idth#$100$ height#$100$ +order#$0$ style#$position, a+solute. top, 1D0.le(t,G0./-inde%,1$ alt#$$' <img src#$))&1magini&(ata1)Ppg$ @idth#$100$ height#$100$ +order#$0$ style#$position, a+solute. top, 100.le(t,1E0./-inde%,0$ alt#$$' <img src#$))&1magini&+aiat1)Ppg$ @idth#$100$ height#$100$ +order#$0$ style#$position, a+solute. top, 90. le(t,A00. clip, rect(0QG0QG0Q0).$ alt#$$' <img src#$))&1magini&+aiat1)Ppg$ @idth#$100$ height#$100$ +order#$0$ style#$position, a+solute. top, 90.le(t,A00.clip,rect(G0Q100Q100QG0)$ alt#$$' <&di"' <di" style # $position,a+solute.top,I00$' <hr style # $@idth # E00.color,red$' <h2 style # $color,+lue$';orduri Ji chenare<&h2' <ta+le style#$position,a+solute.le(t,A00.top,E0$' <tr' <td style#$+ac-ground-color, Purple. color, 7EEE9 . +order-color, ;lue. +order@idth, Ap%. +order-style, solid.@idth,100.height,100.te%t-align,center$'Chenar simplu<&td' <&tr' <&ta+le'

<img src#$))&1magini&clo"n)Ppg$ @idth#$100$ height#$100$ +order#$0$ alt#$Clo@n$ style#$position,a+solute.le(t,E00.top,E0.+order-style, dotted dou+le. +ordercolor, ;lue 79 2;E2.+order-@idth,E$' <&di"' <&+ody' <&html'

11 G!a5i$a E#( +upa ce in capitolele precendente am invatat notiunile 0,M1 de $a!a, vom scrie cateva cuvinte si despre grafica %e$. ;#ista mai multe posi$ilitati in aceasta directie, cea mai simpla fiind utili!area unor elemente grafice /po!e, desene2 din colectii de grafica speciali!ate, colectii ce se pot gasi fie pe internet, fie impreuna cu programe precum <orel +ra%, P*oto +ra%, etc. +esigur, e#ista si o posi$ilitate mai simpla de atat ( copierea unor elemente grafice din alte pagini %e$. )cest lucru nu este recomandat insa, in primul rand datorita faptului ca elementele grafice respective vor fi rupte din conte#t. In plus, pentru majoritatea e#ista drepturi de autor, astfel incat nu pot fi utili!ate fara permisiune, in mod normal. <el mai $un lucru de facut in aceasta directie este utili!area unor elemente grafice ca sursa de pornire si prelucrarea acestora intr(un program speciali!at de tipul A2"(# P3"%"s3" . )cesta este un program e#celent pentru grafica %e$ ce permite diverse prelucrari ale po!elor si desenelor precum si crearea de la !ero a unor elemente de grafica pentru pagina ta. Jom pre!enta o serie de " #!a%i&ni 2# (aza ce se pot aplica unei po!e incarcate in P*otos*op. Mai intai, mergi in Image>Mode si selectea!a RGB C"l"!, daca acest mod nu este deja selectat. 7a incepem modifcarea dimensiunilor unei po!e prin marire>micsorare ( Image>Image 7i!e, modificarea dimensiunilor prin taiere>completare ( Image><anvas 7i!e, rotire imagine ( Image>6otate <anvas. P*otos*op pre!inta si o serie de &n#l%# pentru completari>retusari ale imaginii /pencil, eraser, $lur, paint $uc4et, etc2. +e asemenea, vei dori sa utili!e!i si diversele filtre disponi$ile in meniul Fil%#! ( unele dintre ele sunt foarte reusite /nu uita sa sete!i modul 69: pentru imagine inainte de folosirea filtrelor2. O operatiune destul de simpla in P*otos*op este crearea de %#4%# pentru $utoane, titluri, etc. +esc*ide un fisier nou /5ile>Ne%2 si selectea!a unealta ,e#t din tool$ar /cea cu un 3,32. 5a clic4 oriunde in imaginea ta ( se va desc*ide o fereastra noua unde vei putea scrie te#tul dorit si sta$ili parametrii acestuia /font, dimensiune, culoare, etc2. Pentru efecte aplicate te#telor desc*ide fereastra 1a=ers /&indo%>7*o% 1a=ers, daca aceasta nu e#ista deja pe ecran2, fa clic4 cu $utonul din dreapta pe 1a=er(ul /nivelul2 care contine te#tul scris de tine, selectea!a ;ffects si testea!a diversele efecte disponi$ile. 1a sfarsit, selectea!a din ,ool$ar unealta din stanga sus /in forma de patrat cu linii punctate2, incadrea!a te#tul scris de tine cu ajutorul acesteia si mergi la Image><rop pentru a dimensiunea in mod e#act fisierul

+upa ce ai terminat cu prelucrarile, salvea!a fisierul tau in formatul 1i5 /5ile>;#port>9if NO) ;#port2 sau ) 1 /5ile>7ave a <op=2. 5isierele gif au o calitate mai $una, dar dimensiuni mai mariK fisierele jpg sunt mai mici ca dimensiune, dar de o calitate mai sla$a /nu mereu, insa2. +e regula, pe internet se folosesc fisiere jpg, dar noi recomandam fisiere gif pentru elementele de dimensiuni reduse, pentru o calitate mai $una. +esigur, P*otos*op pre!inta mult mai multe facilitati si optiuni. <a sa nu mai vor$im de alte programe de prelucrare grafica ( sunt destule. "n alt aspect ce tre$uie preci!at in legatura cu grafica %e$ este %!ans a!#n%a. "n element grafic /precum te#tul 3verde.ro3 de mai sus2 are un fond de anumita culoare /in ca!ul de mai sus al$2. In situatia in care avem pe pagina internet un fundal de o alta culoare sau un fundal repre!entand o po!a, atunci te#tul nostru nu mai arata asa $ine. In acest ca! vom folosi un fond transparent

36

In P*otos*op, poti crea o imagine cu fond transparent selectand T!ans a!#n% in campul <ontents din fereastra Ne% 5ile /5ile>Ne%2. Poate ai va!ut pe alte pagini internet mici animatii si te(ai intre$at cum sunt reali!ate. )cestea sunt de fapt 5isi#!# 1i5 ani'a%# create cu aplicatii speciali!ate. +e regula, vei avea pregatite toate imaginile din care vrei sa cree!i animatia si le vei introduce intr(o asemenea aplicatie. In fisierul 0,M1 nu vei scrie nimic special pentru gif(uri animateK acestea vor fi decodificate de catre $ro%ser din tag(ul 7IMG SRC=n&'#.1i58.L pentru impartirea pe ori!ontala, in doua frame( uri egale.

+.LIMBA0UL P*P

Inceputurile PHP PHP (PHP: Hypertext Prepocessor), cunoscut n versiunile mai vechi i sub numele de PHP/FI (Personal Homepage/Form Interpreter), iniial a fost gndit a fi o simpl aplicaie CG pentru interpretarea formularelor definte prin !"#$ i procesate de un program scris ntr%un limba& 'erl, script shell, e(ecutat pe server) *n ca+ul interfeei CG era necesar permisiunea de a rula programe pe server, ceea ce ducea la lacune n securitate i n plus la disocierea de documentul !"#$ a programului care procesa datele) '!' ,n versiunea curent '!' -)./ repre+int un pachet puternic care ofer un limba& de programare accesibil din cadrul fiierelor !"#$, limba& asemntor cu 'erl sau C, plus suport pentru manipularea ba+elor de date ntr%un dialect 01$ ,d2ase, nformi(, #301$, m01$, 4racle, 'ostgre01$, 0olid, 03base, 452C etc)/ i acces la sisteme hipermedia precum !3per6ave) 5e asemeni, '!' suport incrcarea fiierelor de pe calculatorul client7 upload ,standard propus de 8) 9ebel i $) #asinter de la :ero(, descris n ;<C =>6?/ i ofer suport pentru cookies ,mecanism de stocare a datelor n navigatorul client pentru identificarea utili+atorilor, propus de 9etscape/) @ceast aplicaie este disponibil gratuit pe nternet, pentru medii Ani( i mai nou pentru medii Bindo6s ,inclusiv sursele/, integrndu%se n popularul sever @pache) storia PHP%ului ncepe la sfritul anului =CC-, cnd Rasmus Lerdorf de+volt prima versiune, ca proiect personal) PHP%ul este fcut public n debutul anului =CCD sub denumirea de Personal Home Page Tools, fiind considerat un anali+or simplist care interpreta cteva macrouri ce puteau fi incluse n cadrul documentelor !"#$, permind contori+area accesului la paginile Beb sau accesarea unei cari de oaspei ,guestbook/) @nali+orul a fost rescris la mi&locul aceluiai an i denumit '!'E< F)., unde < era o 3?

alta aplicaie scris de ;asmus $enford, un interpreter de formulare !"#$) @ fost adugat i suportul pentru ba+ele de date m01$ i astfel '!'E< a nceput s aib succes, fiind disponibil gratuit pe Beb) 0e estimea+ c la sfritul lui =CC6 cel puin =D mii de site%uri Beb utili+au '!'E< , iar n anul =CC? numrul acestora era de D. de mii) 'rogramatorii Zeev Suraski i Andi Gutmans rescriu anali+orul '!' i noua aplicaie formea+ nucleul versiunii '!' 3). care include o parte din vechile surse '!'E< F).) ;elativ recent, la nceputul anului F..., a fost facut public versiunea '!' -)., utili+nd puternicul motor de scriptare Zend i oferind suport nu numai pentru servrul @pache ci i pentru alte servere Beb) 5e asemeni, '!' -). ofer posibilitatea accesrii documentelor :#$ via 54#) 0e estimea+ c numrul site%urilor care folosesc n pre+ent '!' este de peste un milion) 5e&a, pe Beb, e(ista o multitudine de aplicaii i utilitare concepute n '!', care se regsesc grupate i n aa%numitul PEAR (PHP Extension and Add-on Repository)) e este PHP! PHP este un limba& de script care funcionea+ alturi de un server Beb) 8(emplul =)=)= ,e(emplu introductiv/7
<html> <head> <title> xemple</title> </head> <body> <!php echo ""al#t$ e# s#nt #n script %&%'"( !> </body> </html>

8ste de notat diferena cu alte limba&e script CG scrise n limba&e precum 'erl sau C7 n loc de a scrie un program cu o multitudine de linii de comanda afiate n final ntr%o pagin !"#$, vei scrie o pagin !"#$ cu codul inclus pentru a reali+a o aciune precis ,n ca+ul nostru se va afia un te(t/) Codul '!' este inclus ntre tag-urile speciale de nceput i de sfrit care permit utili+atorului s treac din Gmodul !"#$G n Gmodul '!'G) <a de alte limba&e script, precum Havascript, la '!' codul se e(ecut pe server) 5ac pe serverul Beb se afl un script similar, clientul nu va primi dect re+ultatul e(ecuiei scriptului, fr a avea nici o posibilitate de acces la codul care a produs re+ultatul) I putei configura serverul de Beb s prelucre+e ,anali+e+e/ toate fiierele !"#$ ca fiiere '!') @stfel nu e(ist nici un mi&loc de a distinge paginile care sunt produse dinamic de paginile statice)

e poate "ace PHP!


$imba&ul '!' posed aceleai funcii ca alte limba&e permind s se scrie scripturi CG , s colecte+e date i s genere+e dinamic pagini 6eb sau s trimit i s primeasc cooJies) #area calitate i cel mai mare avanta& al limba&ului '!' este suportul cu un numr mare de ba+e de date) @ reali+a o pagin 6eb dinamic cu o ba+a de date este e(trem de simplu) Armtoarele ba+e de date sunt suportate de ctre '!'7 @dabas 5 d2ase 8mpress <ile'ro 2# 52F nter2ase <ront2ase m01$ 'ostgre01$ 0esam 0olid Ielocis Ani( dbm 3>

5irect #0%01$ 03base 452C

!3per6ave #301$

nformi( ngres

4racle 4vrimos

$imba&ul '!' are deasemenea suport pentru diverse servicii server utili+nd protocoale precum I A!" S# !" ##$!" !%!& i '$$!)

#$#$ Instalarea pe sistemele %indo&s '(/')/*T


@cest gid de instalare v va a&uta s instalai i s configurai '!' pe serverele 6eb ce rulea+ pe sistemele Bindo6s C(E9") @cest gid afer suport pentru7

'ersonal Beb 0erver nternet nformation 0erver 3 sau @pache =)3)( 4mni !""'d F).b=

Principalele etape +n instalare


Armtoarele etape trebuie parcurse la orice instalare, nainte de instruciunile specifice serverului7

5e+arhivai fiierele din distribuie ntr%un director pe care l dorii, de e(emplu Gc7KphpGL Copiai fiierul Gphp)ini%distG m directorul GM6indo6sMG i redenumi?i%l la Gphp)iniG) 5irectorul GM6indo6sMG este de obicei7 % c7K6indo6s pentru Bindo6s CDEC> % c7K6innt sau c7K6innt-. pentru serverele 9" 8ditai fiierul Gphp)iniG7
o

#odificai setarea Ne(tensionOdirN pentru a indica directorul n care a fost instalat '!', sau directorul unde se afl fiierele GphpOP)dllG, de e(emplu Gc7KphpGL 5ac folosii 4mni !ttpd, srii peste pasul urmtor) 0etai NdocOrootN astfel nct s indice documentul root ,NdocumentOrootN/ al serverului 6eb, de e(emplu c7KapacheKhtdocs sau c7K6ebrootL @legei modulele care vrei s fie nccate atunci cnd porne '!'%ul) 'utei decomenta liniile Ne(tensionQphpOP)dllN pentru a ncrca aceste module) Anele module necesit ca unele librrii suplimentare s fie instalate pe sistemul dumneavoastr pentru a funciona corespun+tor) '!' <@1 conine mai multe informaii despre locul de unde putei obine librriile necesare) 5easemenea, putei ncrca dinamic module n scriptul dumneavoastr folosind dl(,p-p./#dll,)L 'e 'B0 i 0, putei seta bro6scap)ini s indice Nc7K6indo6sKs3stemKinetsrvKbro6scap)iniN ,n Bindo6s CDEC>/ i Nc7K6inntKs3stem3FKinetsrvKbro6scap)iniN ,pe serverele 9"/) 3C

<iierele 5$$ pentru e(tensiile '!' sunt prefi(ate cu NphpON) @ceasta previne confu+ia ntre e(tensiile '!' i librriile necesare)

%indo&s '(/')/*T 0i P%1/II1 2


#odul de configurare recomandat pentru aceste servere este utili+area fiierului 9< inclus n distribuie ,phpOiisOreg)inf/) 'utei edita acest fiier pentru a v asigura c e(tensiile i directorul de instalare al '!' corespund configuraiei dumneavoastr) 'utei urma etapele de mai &os pentru a face acest lucru) 34ser5a6ie7 aceste etape implic lucrul direct cu regitrii Bindo6s) 4 eroare provocat aici poate aduce sistemul ntr%o stare instabil) I recomandm s facei mai nti o copie a regitrilor) 5e+voltatorii de '!' nu vor fi responsabili dac vei distruge regitrii)

;ulai regeditL #ergei la !R8SO$4C@$O#@C! 98 E'arameters E0cript#apL 5in meniul 8dit selectai 9e6%T0tring IalueL ntroducei e(tensia pe care dorii s o folosii pentru scripturile php, de e(emplu )phpL 5ai dublu%clicJ pe aceast valoare i introducei calea spre php)e(e n cmpul GIalue dataG ,de e(emplu c7KphpKphp)e(e Ms Ms/) NMs MsN este foarte important, '!' nu va funciona corect far elL ;epetai aceti pai pentru fiecare e(tensie pe care dorii s o asociai cu scripturile '!'L *n continuare mergei la !R8SOC$@0080O;44"L 5in meniul 8dit selectai 9e6%TRe3L 5enumii cheia cu numele e(tensie pe care l%ai introdus n secinuea precedent, de e(emplu )phpL 0electai noua cheie n panelul din partea dreapt, dai dublu%clicJ pe G5efault valueG i introducei phpfileL ;epetai ultimul pas pentru fiecare e(tensie introdus n seciunea precedentL *n continuare creai o nou cheie n !R8SOC$@0080O;44" i numii%o phpfileL 0electai noua cheie ,phpfile/ n panelul din partea dreapt, dai dublu%clicJ pe G5efault valueG i introducei '!' 0criptL 5ai clicJ dreapta pe cheia phpfile i selectai 9e6%TRe3, pe care o vei numi 0hellL 5ai clicJ dreapta pe cheia 0hell, selectai 9e6%TRe3 i denumii%o openL 5ai clicJ dreapta pe cheia open, selectai 9e6%TRe3 i denumii%o commandL 0electai noua cheie ,command/ n panelul din partea dreapt, dai dublu%clicJ pe G5efault valueG i introducei calea spre php)e(e, de e(emplu c7KphpKphp)e(e %U M=L *nchidei regedit E03stem ECurrentControl0et E0ervices EB30vc

%indo&s *T 0i II1 7
'entru a instala '!' pe un server 9" care rulea+ 0 - urmai urmtoarele instruciuni7

*n nternet 0ervice #anager ,##C/, selectai site%ul Beb sau directorul unei aplicaiL 5eschidei foaia de proprieti a directorului i selectai !ome 5irector3, Iirtual 5irector3 sau 5irector3L -.

5ai clicJ pe butonul Configuration, i apoi pe @pp #appingsL 5ai clicJ pe @dd, i introducei n csua 8(ecutable c7Kpath%to%php%dirKphp)e(e Ms MsL *n csua 8(ecutable introducei e(tensia pe care dorii s o asociai cu scripturile '!') ,;epetai paii D i 6 pentru fiecare e(tensie pe care dorii s o asociai cu scripturile '!') 5e obicei se folosesc e(tensiile )php i )phtml)/L 0etati modul de securitate corespun+tor) @cest lucru este reali+at n nternet 0ervice #anager, iar dac serverul dumneavoastr 9" folosete sistemul de fiiere 9"<0 adugai drepturi de e(ecui pentru OA0;O directorului care conine php)e(e)

%indo&s 'x/*T 0i Apac-e 8#2#x


'entru a configura @pache astefel nct s lucre+e cu interpretorul '!' CG trebuie s editai fiierele srm)conf sau httpd)conf) 5ei pot e(ista unele variaii n configurarea '!' sub @pache, metoda urmtoare este destul de simpl pentru a putea fi folosit de nceptori) 'entru urmtoarele directive de configurare v recomandm s consultai documentaia serverului @pache)

0cript@lias EphpE Gc7Epath%to%php%dirEG @dd"3pe applicationE(%httpd%php )php @dd"3pe applicationE(%httpd%php )phtml @ction applicationE(%httpd%php GEphpEphp)e(eG

'entru a folosi the source code highlighting feature, creai un script '!' i adugaii urmtorul cod7 9! p-p s-o&.source (,original.p-p.script#p-p,): !:; ) *nlocuii originalOphpOscript)php cu numele fiierului a crui surs vrei s fie afit ,acesta este doar una din metodele de a face acest lucru/) *ot<7 n @pache pentru Bindo6s toate bacJ%slash%urile din numele unei ci ca Gc7Kdirector3Kfile)e(tG, tebuie transformate n slash%uri)

3mni HTTPd $#=48 pentru %indo&s


@cesta ar trebui s fie cel mai simplu mod de configurare7

'asul =7 nstalai serverul 4mni 'asul F7 5ai clicJ dreapta pe icoana 4mni!""'d din s3stem tra3 i selectai 'roperties 'asul 37 5ai clicJ pe Beb 0erver Global 0ettings 'asul -7 $a N8(ternalN, introducei7 virtual Q )php V actual Q c7Kpath%to%php%dirKphp)e(e 'asul D7 $a N#imeN, introducei7 virtual Q 666serverEstdcgi V actual Q )php 'asul 67 5ai 4J)

;epetai pai F%6 pentru fiecare e(tensie pe care vrei s o asociai cu '!')

>odulele PHP
phpOcalendar)dll phpOcr3pt)dll phpOdbase)dll phpOdbm)dll phpOfilepro)dll <uncii de convesie a calendarului <unci de cr3ptare <uncii 52ase 8mulare G52# via librria 2erJel3 52F @cces doar pentru citire a ba+elor de date filepro -=

phpOgd)dll phpOh3per6ave)dll phpOimap-rF)dll phpOldap)dll phpOmsUl=)dll phpOmsUlF)dll phpOmssUl)dll phpOnsmail)dll phpOoci?3)dll phpOsnmp)dll phpO+lib)dll

<uncii din librria G5 pentru lucrul cu gif%uri <uncii !3perBave <uncii #@' <uncii $5@' Client m01$ = Client m01$ F Client #001$ ,necesit librriile #001$ 52/ <uncii de mail pentru 9etscape <uncii 4racle <uncii 09#' Gget and 6alJG,doar pentru 9"/ <uncii W$ib

php3Om3sUl)dll ,construit n '!' -/ <uncii #301$

I#8 1tructura lim4a?ului


1intaxa "undamental<# Trecerea de la H>T@ la PHP
8(ist patru moduri pentru a trece de la !#"$ la '!') 8(emplul F)=)=7
). <! echo * "+ea mai simpla cale de introd#cere...,n"-( !> 2. <!php echo * ".aca /reti sa afisati doc#mente 012 sa# 0&312 faceti ca aici.,n"-( ! > 3. <script lang#age="php"> echo * "4n#mite 6ront%age-"-( editoare n# accepta tag5#ri nec#nosc#te *de exempl#

</script>

7. <8 echo * "%#teti #tili9a tag#ri in stil 4sp."-( 8>

@ doua metod este cea mai utili+at, pentru c permite o implementare uoara a '!'%ului cu generaia urmatoare :!"#$)

1eparatori de instruc6iuni
nstruciunile sunt separate, ca n C sau ca n 'erl, prin punct i virgul la sfritul unei instruciuni) 0emnele de sfrit, N!;N, implic sfritul instruciunii, deci implicit punct i vigul) 8(emplul F)=)F7
<!php echo "4cesta este #n test"( !> <!php echo "4cesta este #n alt test" !>

omentarii
Comentariile pot fi fcute n stilul celor din limba&ele C, CXX i shell%urile A9 : ,bas( de e(emplu/) 8(emplul F)=)37
echo "4cesta este #n test"( // 4cesta este #n comentari# pe o linie in stil +:: /; 4cesta este #n comentari# pe mai m#lte linii( inca o linie de comentari# ;/ echo "4cesta este #n echo "<ltim#l test"( = <n comentari# in stil <nix

alt

test"(

-F

0tilul de comentariu pe o linie ine pn la sfritul liniei sau al blocului curent al codului '!') 8(emplul F)=)-7
<h)>4cesta este #n <! = echo "simpl#"( !> exempl#.</h)> <p>2inia de mai s#s /a afisa: "4cesta este #n exempl#."</p>

I#$ Tipuri de date


*umere +ntregi
9umerele ntregi se pot specifica n modul urmtor ,e(emplul F)F)=/7
>a >a >a >a = = = = )237( 5)23( @)23( @x)2( = = = = ?#mar ?#mar ?#mar ?#mar intreg intreg intreg intreg in ba9a )@ negati/ in ba9a A$ octal *echi/alent c# A3 in ba9a )@in ba9a )B$ hexa9ecimal *echi/alent c# )A in ba9a )@-

*umere repreAentate +n 5irgul< mo4il<


9umerele repre+entate n virgul mobil ,double/ pot fi utili+ate n oricare din sinta(ele urmtoare ,e(emplul F)F)F/7
>a = ).237( >a = ).2e3(

5imensiunea numerelor n virgul mobil este independent de platform) 'reci+ia u+ual este de =cifre) 34ser5a6ii:

de obicei fraciile +ecimale simple, precum .)= sau .)?, sunt convertite intern cu o mic pierdere de preci+ieL aceasta poate s duc la re+ultate mai puin e(acte) 5e e(emplu7 floor, .,= X .,?P=./ ntoarce de obicei ? n loc de ateptatul >, re+ultatul repre+entrii interne fiind de genul ?,CCCCCCCCCCL este imposibil s se e(prime cu e(actitate fraciile +ecimale cu numr infinit de cifreL de e(emplu, =E3 n form +ecimal devine .,33333333)))L dac avei nevoie de o preci+ie mai mare n compararea valorilor n virgul mobil trebuie s utili+ai funciile matematice de preci+ie arbitrar)

Biruri de caractere
Yirurile de caractere pot fi delimitate de ghilimele sau apostrofuri, n ultimul ca+ inhibndu%se evaluarea variabilelor din interiorul irului respectiv ,e(act ca la bas(/) 5ac irul de caractere este delimitat de ghilimele atunci variabilele din interiorul irului vor fi evaluate i nlocuite prin valoarea lor) Ca i n C sau 'erl, caracterul backslas( ,C/ este utili+at pentru a prote&a un carcater special) 1ec5en6e escape Kn Kr Kt KK KZ Daloare $inie nou ,linefeed, $< sau .(.@ in @0C / *ntoarcere la linie ,carrige return, C; sau 4(45 in @0C / "ab ori+ontal ,!" sau .(.C in @0C / 2acJslash 0emnul dolarului

-3

KG K[.%?\ ]=,3^ K([.%C@%<a%f\ ]=,F^

Ghilimele 4rdinea caracterelor corespun+nd e(presiei normale este un caracter n ba+a > 4rdinea caracterelor corespun+nd e(presiei normale este un caracter in ba+a =6

4rice caracter se poate transforma, teoretic, n secve escape, dar se produce un avertisment la cel mai nalt nivel) @ doua metod ncadrea+ irurile ntre apostrofuriL n acest ca+ singurele secvene escape nelese sunt NCCN i NCN) Iariabilele nu vor fi e(pandate ntr%un ir ncadrat ntre apostrofuri) 4 alt metod de a delimita irurile este folosirea sinta(ei doc N999N) 5up acest delimitator trebuie specificat un identificator, apoi irul de caractere propriu%+is i, n ncheiere, acelai identificator care a precedat irul) 8(emplul F)F)37
>str = <<< C. // Ddentificator#l de incep#t xempl# de serie ingloband linii m#ltiple #tili9and sintaxa heredoc. C.( // Ddentificator#l de sfarsit /; xempl# mai complex c# mai m#lte /ariabile ;/ class Eoc F /ar >Eoc( /ar >bar( f#nction Eoc*F >this5>Eoc = GHocG( >this5>bar = array* GIar )G$ GIar 2G$ GIar 3G-( J J >Eoc = new Eoc*-( >name = G1y?ameG( echo <<< C3 1y name is ">name". D am printing some >Eoc5>Eoc. ?ow$ D am printing some F>Eoc5>barK)LJ. 3his sho#ld print a capital G4G: ,x7) C3(

Yirurile pot fi concatenate utili+nd operatorul N#N, operatorul NEN fiind impropriu pentru aceast operaie) 8(emplul F)F)-7
/; 4signarea #n#i sir ;/ >str = "4ceasta este o serie"( /; +oncatenarea sir#l#i c# #n text no# ;/ >str = >str . " +# mai m#lt text"( /; <n alt miEloc de ada#gare$ folosind o sec/enta escape newline ;/ >str .= " si o no#s linie la sfarsit.,n"( /; Mariabilele dintr5#n sir incl#s intre apostrof#ri se pot e/al#a ;/ >n#m = N( >str = G<p>?#mar: >n#m</p>G( /; Cbtine prim#l caracter al sir#l#i ;/ >str = G<n test.G( >first = >strK@L( /; Cbtine #ltim#l caracter al sir#l#i ;/ >str = G<n alt test.G( >last = >strK strlen* >str- 5 )L(

on5ersia 0irurilor
Cnd un ir este evaluat ca valoare numeric, valoarea i tipul re+ultat sunt decise dup cum urmea+7 --

irul va fi evaluat ca un double dac conine unul din caracterele N#N, NeN sau NEN) @ltfel va fi evaluat ca un ntregL valoarea este dat de nceputul irului) 5ac irul ncepe cu o dat numeric valid, aceasta va fi valoarea utili+at) @ltfel valoara va fi .) 4 dat numeric valid este format din semn ,opional/, una sau mai multe cifre ,opional un puct +ecimal/, ncheiate eventual cu un e(ponent) @cest e(ponent ,NeN sau NEN/ este urmat de una sau mai multe cifre) Cnd prima e(presie este un ir tipul varibilei va depinde de a doua e(presie)
= = = = = = = = ) : ")@.O"( ) : "5).3e3"( ) : "bob5).3e3"( ) : "bob3"( ) : ")@ "mall %igs"( ) : ")@ 2ittle %iggies"( ")@.@ pigs" : )( ")@.@ pigs" : ).@( // // // // // // // // >aaa >aaa >aaa >aaa >aaa >aaa >aaa >aaa este este este este este este este este do#ble *)).Odo#ble *5)2NNinteger *)integer *)integer *))integer *))do#ble *))do#ble *))-

8(emplul F)F)D7
>aaa >aaa >aaa >aaa >aaa >aaa >aaa >aaa

Ta4louri
*n '!' tablourile se comport i ca tablouri asociative ,(as( tables/ i ca tablouri inde(ate ,vectori/)

Ta4louri unidimensionale
'!' accept att tablouri scalare ct i asociative) 5e fapt nu e(ist nici o diferen ntre cele dou) *n '!' tabolurile se pot crea utili+nd funciile list() i array() sau se poate seta e(plicit fiecare element din tablou) 8(emplul F)F)67
= xempl#l 4: >aK@L = "abc"( >aK)L = "def"( >bK"aaa"L = )3(

0e poate de asemenea crea un tablou adugndu%i valori) 5e e(emplu, putem e(tinde tabloul )a ca n e(emplul de mai &os ,e(emplul F)F)6/7
= xempl#l I: >aKL = "hello"( // >aK2L == "hello" >aKL = "world"( // >aK3L == "world"

Iectorii pot fi sortai utili+nd funcii speciali+ate7 asort(), arsort(), Fsort(), rsort(), sort(), uasort(), usort(), i uFsort()) 'utei numra elementele tabloului utili+nd funcia count()) 'utei parcurge un tablou utili+nd funciile next(), pre5() i eac-())

Ta4louri multidimensionale
"ablourile multidimensionale sunt n realitate tablouri simple) 'entru fiecare dimensiune a tabloului trebuie adugat o alt dimensiune *dim+ la final)
>aK)L = >f( >aK"aaa"L = >f( >aK)LK@L = >f( >aK"aaa"LK2L = >f( >3K3LK"bar"L = >f( >aK"aaa"LK7LK"bar"LK@L = >f( // // // // // // 3ablo# #nidimensional 3ablo# #nidimensional 3ablo# bidimensional Dndicii asociati/i si n#merici se pot combina Dndicii n#merici si asociati/i se pot combina 3ablo# c# patr# dimensi#ni

*n '!' nu este posibil referirea tablourilor multidimensionale direct ntr%un ir) 8(emplul urmtor nu va furni+a re+ulatul ateptat7 -D

>aK3LKGbarGL = GIobG( echo "4cesta n# merge: >aK3LKbarL"(

8(emplul de mai sus va afia7 Acesta nu merge, arra-*bar+) 4peratorul de concatenare poate fi utili+at pentru a corecta acest lucru7
>aK3LKGbarGL = GIobG( echo "4cesta n# merge: " . >aK3LKbarL(

*n '!' -). problema aceasta poate fi re+olvat inclu+nd referina la tabloul din interiorul irului ntre acolade ca n e(emplul de mai &os7
>aK3LKGbarGL = GIobG( echo "4cesta n# merge: F>aK3LKbarLJ"(

'utei completa o matrice n multe moduri, dar important este s inelegei cum putei s utili+ai funcia array() pentru tablouri asociative) 8(emplul F)F)?7
= xempl#l 4: >aK"c#loare"L = "ros#"( >aK"aroma"L = "d#lce"( >aK"forma"L = "rot#nd"( >aK"n#me"L = "mar"( >aK3L = 7( = xempl#l I: >a = array* "c#loare" "aroma" "forma" "n#me" 3 -(

=> => => => =>

"ros#"$ "d#lce"$ "rot#nd"$ "mar"$ 7

'entru tablouri asociative multidimensionale putem imbrica funcia array() ca n e(emplul de mai &os7 ,e(emplul F)F)>/
>a = array* "mar" => array* "c#loare" => "ros#"$ "aroma" => "d#lce"$ "forma" => "rot#nd" -$ "portocala" => array* "c#loare" => "potocali#"$ "aroma" => "acr#5amar#i"$ "forma" => "rot#nd" -$ "banana" => array* "c#loare" => "galben"$ "aroma" => "plac#ta"$ "forma" => "bananoida" // Ma afisa dulce

-( echo >aK"mar"LK"aroma"L(

34iecte
'entru a crea o variabil de tipul obiect dorit, i eventual pentru a o iniiali+a, se folosete operatorul ne&7 8(emplul F)F)C7
class aaa F f#nction do_aaa*F

-6

echo ".oing aaa."(

J >bar = new aaa( >bar5>do_aaa*-(

on5ersia automat< a tipurilor


'!' nu accept definirea e(plicit a tipului n definirea variabilelor, tipul unei variabile fiind determinat de conte(tul n care acea variabil este utili+at) @cesta nseamn c dac atribuii variabilei var un ir de caractere, var va deveni ir) 5ac i atribuii o valoare ntreg, var va deveni un ntreg) An e(emplu de conversie automat a tipului apare la utili+area operatorului N EN) 5ac vre%un operand este double, atunci toi operan+ii sunt evaluai la double, i re+ultatul va fi un double) @ltfel, operan+ii vor fi interpretai ca ntregi i re+ultatul va fi tot un ntreg) ;einei c acest mod de evaluare nu modific tipul operan+ilor care intervin n e(presie, ci numai modul n care ei sunt evaluai) 8(emplul F)F)=.7
>bbb = "@"( >bbb::( >bbb := )( >bbb = >bbb : ).3( >bbb = O : ")@ 2ittle %iggies"( >bbb = O : ")@ "mall %igs"( >a = )( >aK@L = "f"( // // // // // // >bbb >bbb >bbb >bbb >bbb >bbb este este este este este este sir de caractere *4"+DD 7Asir#l de caractere ")" *4"+DD 7Nac#m de tip intreg *2ac#m de tip do#ble *3.3de tip intreg *)Ode tip intreg *)O-

34ser5a6ie7 conversia automat de la un tip simplu la tipul tablou este u+ual nedefinit)
// >a este #n intreg // >a de/ine #n /ector de forma "f"

5ei aparent variabila )a a fost transformat ntr%un tablou cu primul element f, e(emplul urmtor nu ofer un re+ultat la fel de clar7
>a = ")"( >aK@L = "f"( // >a este #n sir // +e se intampla c# offset5#l sir#l#i!

on5ersia explicit< a tipurilor


Conversia e(plicit a tipurilor ,cast/ se face n acelai mod ca n C7 numele tipului dorit este scris n parante+e naite de numele variabilei)
>a = )@( >bar = *do#ble- >a( // >a este #n intreg // >bar este #n do#ble

Conversiile permise sunt7


(int), (integer) % conversia la ntreg (real), (dou4le), ("loat) % conversie la double (string) % conversie la ir (array) % conversie la tablou (o4?ect) % conversie la obiect

4bservai c eticheta i spaiile sunt permise ntre parante+e, deci liniile urmtoare sunt echivalente7
>a = *int- >bar( >a = * int - >bar( >a = *int->bar(

8ste posibil ca re+ultatul conversiei e(plicite ntre dou tipuri s nu fie evident) 5e e(emplu convertind un scalar sau un ir de caractere la tipul arra3, respectiva variabil va deveni primul element al tabloului ca n e(emplul de mai &os7
>/ar = GciaoG( >arr = *array- >/ar( echo >arrK@L( // 4fisea9a ciao

-?

Cnd convertii un scalar sau o variabil de tip ir de caractere la un obiect, respectiva variabil va deveni un atribut al obiectului, atribut numit scalar) 8(emplul F)F)==7
>/ar = GciaoG( >obE = *obEect- >/ar( echo >obE5>scalar( // 4fisea9a ciao

I#2 Daria4ile
RepreAentarea 5ari4ilelor
Iariabilele n '!' sunt repre+entate de semnul dolar, N GN, n faa numelui variabilei) 9umele variabilelor sunt formate dup aceleai reguli ca alte etichete din '!') An nume de variabil valid trebuie s nceap printr%o liter sau liniu de subliniere, N.N, urmat de un ir de litere, cifre sau liniue de subliniere) '!' este un limba& case-sen.itiv ,e(emplul F)3)=/)
>/ar = "Hean"( >Mar = "%a#l"( echo ">/ar$ >Mar"( >7site = Gn# incaG( >_7site = Gn# incaG( >maPs = GEa#neG( // // // // 4fisea9a Jean, Paul Dncorect: incepe printr5o cifra +orect: incepe printr5o lini#ta de s#bliniere +orect: GPG este 4"+DD 23N

*n '!' 3, variabilele sunt asignate ntotdeauna prin valoare) @stfel, cnd atribuim unei variabile o e(presie, ntreaga valoare a e(presiei este copiat n variabila destinaie) @ceasta nseamn, de e(emplu, c atribuind unei variabile valoarea altei variabile, modificarea unei variabile nu va avea efect asupra celeilalte) '!' - afer i un alt mod pentru atribuirea de valori variabilelor7 prin referin/0) @ceasta nseamn c noua variabil nu face dect s refere variabila original ,cu alte cuvinte, Gdevine un alias pentruG sau Gpointe+ laG variabila original/) *n acest ca+, cele dou variabile sunt interdependente, modificarea uneia determinnd modificarea celeilalte) 5eoarece nu are loc copierea i actuali+area valorilor, asignarea prin referin este mai rapid) 5iferena devine notabil n ca+ul e(ecuiilor repetate sau la asignarea tablourilor mari, respectiv a abiectelor) 'entru a atribui prin referin, se introduce un ampersand, N HN, n faa variabilei care este atribuit ,variabila surs/) *n e(emplul urmtor, #umele meu este !ierre se va afia de dou ori ,e(emplul F)3)F/7
>aaa = G%ierreG( >bar = Q>aaa( >bar = "?#mele me# este >bar"( echo >aaa( echo >bar( // 4trib#i /aloarea Pierre l#i >aaa /; 4trib#ire prin referinta >aaa si >bar refera aceeasi locatie de memorie ;/ // 1odific >bar $ deci inmplicit si >aaa

34ser5a6ie7 numai variabilele pot fi asigante prin referin) 8(emplul F)3)37


>a = 2O( >bar = Q>a( >bar = Q* 27 ; R-( f#nction test*F ret#rn 2O( J >bar = Qtest*-( // 4trib#ire posibila // 4trib#ire eronata: referinta #nei expresii fara n#me

// Dncorect: f#nctia ret#rnea9a o /aloare$ n# o /ariabila

Daria4ile prede"inite
'!' furni+ea+ un mare numr de variabile predefinite pentru fiecare script pe care l rulea+) Cele mai multe variabile predefinite depind de serverul pe care se lucrea+, de versiunea i configurarea serverului sau de ali factori) Anele dintre aceste variabile nu vor fi disponibile cnd '!' rulea+ ntr%o linie de comand) ->

Iomeniul 5aria4ilelor
5omeniul variabilelor este conte(tul n care variabila este definit) 'entru marea parte a variabilelor, domeniul lor este unic) @cest domeniu se refer i la fiierele incluse ntr%un script) 8(emplu7
>a = )( incl#de "b.inc"(

@ici variabila )a va fi accesibil n fiierul inclus b1inc) mplicit, toate variabilele utili+ate ntr%o funcie sunt prin definiie locale) 8(emplul F)3)-7
>a = )( // Dnfl#enta globala f#nction test*F echo >a( // Dnfl#enta locala J test*-(

0criptul nu afiea+ nimic pe ecran deoarece instruciunea ec-o utili+ea+ variabila local )a care nu a fost asignat n acest domeniu) 8ste o diferen ntre modul de stabilire a domeniului variabilelor globale n C i '!'7 n absena unei referiri locale, variabilele globale din C sunt valabile n orice funcie a programului) @cest lucru nu este valabil i n '!') 8(emplul F)3)D7
>a = )( >b = 2( f#nction "#m*F global >a$ >b( >b = >a : >b( J "#m*-( echo >b(

@cest script va produce re+ultatul &) 5eclarnd variabilele )a i )b globale n interiorul funciei Sum23, orice referire la acestea n domeniul funciei se va face la declaraiile globale) 9umrul variabilelor globale care pot fi manipulate de ctre o funcie este nelimitat) @ doua modalitate de a accesa variabilele din domeniul global este prin utili+area variabilei tablou din '!', numit GJ@3KA@1) 8(emplul anterior poate fi rescris astfel7
>a = )( >b = 2( f#nction "#m*F >S2CI42"K"b"L = >S2CI42"K"a"L : >S2CI42"K"b"L( J "#m*-( echo >b(

Iariabila GJ@3KA@1 este un tablou asociativ care are drept indice numele variabilelor globale i coninutul respectivelor variabile drept elemente) An alt aspect important legat de domeniul variabilelor se refer la variabilele statice) 4 variabil static e(ist numai n domeniul unei funcii dar nu i pierde valoarea cnd e(ecuia programului prsete acest domeniu)
f#nction 3est*F >a = @( echo >a( >a::( J

-C

@ceast funcie este inutil de vreme ce la fiecare apel variabila )a este setat la valoarea . care va fi tiprit) 5ei n funcie e(ist instruciunea )a44 care incremente+ valoarea variabilei, la ncheierea e(ecuiei funciei aceast valoare se pierde, variabila )a avnd domeniu local) 'entru a pstra valoarea incrementat a variabilei )a ntre dou e(ecuii ale funciei, ea va fi declarat ca variabil static aa cum reiese din e(emplul urmtor7
f#nction 3est*F static >a = @( echo >a( >a::( J

*n acest ca+ la fiecare apel al funciei $est23 va fi tiprit valoarea lui )a, apoi se va incrementa) Iariabilele statice ofer de asemeni posibilitatea de a implementa i funciile recursive) 4 funcie este recursiv dac se autoapelea+) 'roiectarea funciilor recursive trebuie fcut cu atenie pentru a evita recursia infinit) "rebuie asigurat o modalitate adecvat de ncheiere a apelurilor recursive) Armtoarea funcie recursiv numr pn la =. folosind variabila static )count pentru a sesi+a ncheierea autoapelurilor ,e(emplul F)3)6/7
f#nction 3est*F static >co#nt = @( >co#nt::( echo >co#nt( if* >co#nt < )@F 3est*-( J >co#nt55( J

Daria4ile 5aria4ile
Aneori este convenabil s lucrm cu nume de variabile ce pot fi tratate n mod dinamic) 4 variabil variabil este un nume de variabil care poate fi iniiali+at i utili+at n mod dinamic) 4 variabil normal este setat printr%o instruciune de forma7
>a = "hello"(

4 variabil variabil primete valoarea unei alte variabile i o tratea+ ca i cum ar fi un nume de variabil) *n e(emplul urmtor valoarea (ello atribuit anterior poate fi tratat ca un nume de variabil utili+nd de dou ori semnul dolar7
>>a = "world"(

*n acest moment dou variabile au fost definite i memorate n tabela de simboluri '!'7 )a coninnd G(elloG i )(ello coninnd irul G5orldG) @stfel instruciunea7
echo ">a >*>a-"(

produce aceeai ieire ca i instruciunea7


echo ">a >hello"(

adic irul (ello 5orld) 'entru a utili+a variabilele variabile cu tablouri, trebuie re+olvat o problem de ambiguitate) @stfel, dac scriem ))a*6+, trebuie s preci+m dac dorim s utili+m )a*6+ ca variabil sau ))a i apoi s inde(m cu *6+ aceast variabil) 'entru a re+olva aceast ambiguitate vom folosi sinta(a )7)a*6+8 pentru primul ca+ i )7)a8*6+ pentru al doilea ca+)

I#7 onstante
'!' definete o serie de constante i ofer un mecanism pentru definirea altora n timpul e(ecuiei) Constantele seamn mult cu variabileleL sunt definite cu &utorul funciei de"ine() i valoarea lor nu poate fi modificat ulterior) Constantele predefinite ,disponibile ntotdeauna/ sunt 7 OO< $8OO D.

0e utili+ea+ cu un fiier care a fost inclus sau solicitat, cnd numele fiierului inclus este datL OO$ 98OO 9umrul liniei din scriptul curent care este anali+at) 0e utili+ea+ mpreun cu un fiier care a fost inclus sau solicitat, cnd po+iia n fiierul inclus este datL '!'OI8;0 49 An ir de caractere repre+entnd versiunea '!' utili+atL '!'O40 9umele sistemului de operare n care rulea+ '!'L ";A8 4 valoare adevratL <@$08 4 valoare falsL 8O8;;4; ndic o eroare, alta dect o eroare de anali+are, pentru care corectarea nu este posibilL 8OB@;9 9G ndic o situaie n care '!' tie c ceva este greit, dar continu oricumL 8O'@;08 0emnalea+ o sinta( invalid n fiierul scriptL corectarea nu este posibilL 8O94" C8 0%a ntmplat ceva care poate fi sau nu o eroareL e(ecuia continu) 0pre e(emplu am accesat o variabil care nu a fost iniiali+at sau am folosit un ir nencadrat ntre ghilimele ca inde( asociativ) 'utei defini constante suplimentare utili+nd funcia de"ine()) ;einei c aceste constante nu se comport ca macro%urile CL numai datele scalare valide pot fi repre+entate printr%o constant) 8(emplul F)-)= ,definirea constantelor/7
define* "+C?"34?3"$ "&ello world."-( echo +C?"34?3( // 4fisea9a Hello world.

8(emplul F)-)F ,utili+area constantelor predefinite ..FI@E.. i ..@I*E../7


f#nction repor_error* >file$ >line$ >messageF echo "4n error occ#red in >file on line >line: >message."( J report_error* __6D2 __$ __2D? __$ ""omething went wrong'"-(

#( Expresii
8(presiile sunt cele mai importante construcii ale '!'L n '!' aproape orice scriei este o e(presie) Cea mai simpl i corect modalitate de a defini o e(presie este orice are o valoare) 9ele mai simple e:presii sunt constantele i variabilele) 8(emplu7
>a = O(

*n aceast construcie D este o e(presie constant) 5e asemeni, funciile sunt e(presii deoarece returnea+ valoare) 8(emplu7
f#nction f*F ret#rn O( J

5eoarece f23 returnea+ valoarea D, valoarea e(presiei f23 este D) 2ineneles, valorile nu trebuie s fie neaprat ntregi ) '!' accept 3 tipuri de valori scalare7 valori ntregi, valori n virgul mobil i valori tip ir de caractere ,valorile scalare sunt acele valori indivi+ibile spre deosebire de valorile array, de e(emplu/) '!' accept de asemeni dou tipuri compuse7 array i o4?ect ,tablouri i obiecte/) Ialorile de acest tip pot fi atribuite variabilelor sau returnate de ctre funcie) D=

'!' este un limba& orientat pe e(presii n sensul c aproape orice este o e(presie) 4peratorii de pre i postincrementare funcionea+ analog cu cei din C) An tip u+ual de e(presii l repre+int e(presiile de comparare) @ceste e(presii sunt evaluate la . sau = repre+entnd FA@1E, respectiv TRLE) '!' accept operatorii de comparaie ;, ;M, MM, NM ,diferit/, 9, 9M) @ceste e(presii sunt utili+ate u+ual n construirea condiiilor) Ca i n C se pot folosi operatorii de atribuire compui) *n afar de faptul c utili+area acestor operatori compui duce la scurtarea codului, i e(ecuia este mai rapid) 5e asemeni, '!' accept operatorul ternar condiional N!N, cu aceeai semnificaie ca i n C) Armtoarele e(emple ilustrea+ utili+area operatorilor compui i a celor de pre i postincrementare ,e(emplul F)D)=/)
f#nction do#ble* >iF ret#rn >i ; 2( J >b = >a = O( /; 4trib#ie /aloarea O /ariabilelor >a si >b ;/ >c = >a::( /; %ostincrementare: atrib#ie /aloarea initiala a l#i >a *O/ariabilei >c ;/ >e = >d = ::>b( /; %reincrementare: atrib#ie /aloarea incrementata a l#i >b *B/ariabilelor >d si >e ;/ /; Dn acest p#nct >d si >e s#nt egale c# B ;/ >f = do#ble* >d::-( /; 4trib#ie * /aloarea l#i >d inainte de incrementare- ; 2$ B ; 2 = )2$ /ariabilei >f ;/ >g = do#ble* ::>e-( /; 4trib#ie * /aloarea l#i >e d#pa incrementare- ; 2$ R ; 2 = )7$ /ariabilei >g ;/ >h = >g := )@( /; >g este incrementat c# )@ si ia /aloarea 27. 4ceasta /aloare *27- este apoi atrib#ita /ariabilei >h$ care /a l#a /aloarea 27. ;/

$imba&ul '!' nu dispune de un tip logic predefinit) 8valuarea valorii de adevr a e(presiilor '!' se face la fel ca n C i 'erl7 orice valoare numeric nenul este TRLE, +ero este FA@1E) An ir vid este FA@1E, orice alt ir este TRLE) *n ca+ul tablourilor i obiectelor orice valoare care nu conine elemente este considerat FA@1E, altfel este considerat TRLE)

I#O 3peratori
3peratori aritmetici
Exemplu *umele opera6iei ReAultat Za X Zb Za % Zb Za P Zb Za E Zb Za M Zb @dunare 0cdere *nmulire *mprire #odul 0uma dintre Za i Zb 5iferena dintre Za i Zb 'rodusul dintre Za i Zb *mprirea lui Za la Zb ;estul mpririi lui Za la Zb

4peratorul de mprire ,N/N/ ntoarce o valoare ntreag ,re+ultatul mpririi ntregi/ dac cei doi operatori sunt ntregi ,sau dac irurile sunt convertite la ntregi/) 5ac unul din operatori este numr cu virgul mobil, sau re+ultatul unei operaii returnea+ o valoare care nu este ntreag, va fi returnat o valoare n virgul mobil)

3peratori de atri4uire
4peratorul de atribuire simpl este NMN) @re semnificaia7 valoarea e:presiei din dreapta se atribuie variabilei din stnga 2variabil0 simpl0 sau structurat03) 'utem spune c instruciunea de atribuire este format din trei elemente7 e(presia care urmea+ s fie atribuit, operatorul de atribuire NMN i variabila destinatar) DF

Cnd este e(ecutat instruciunea de atribuire, este evaluat e(presia i valoarea re+ultat este depus la destinaia specificat) 8(emplu7
>a = * >b = 7- : O( /; >a este egal c# N si >b c# 7 ;/

*n operaiile aritmetice i pe iruri de caractere se pot folosi i operatorii compui, aa cum reiese din e(emplul urmtor ,e(emplul F)6)=/7
>a = 3( >a := O( /; 4trib#ie A /ariabilei >a. +oresp#nde instr#cti#nii >a = >a : O( ;/ >a = "I#na"( >b .= " la toata l#mea'"( /; 4trib#ie /aloarea "I#na la toata l#mea'" /ariabilei >b *echi/alent c# >b = >b . " la toata l#mea'";/

5e remarcat c atribuirea se face prin copiere, adic e(presia din dreapta nu se modific n urma atribuirii) '!'- accept i atribuirea prin referin, utili+nd sinta(a )var ; <)ot(ervar=, dar acest lucru nu este posibil n '!'3) @tribuirea prin referin nseamn c cele dou variabile refer aceeai locaie de memorie i c modificarea uneia dintre ele o afectea+ i pe cealalt)

3peratori pe 4i6i
4peratorii pe bii v permit s manipulai numerele ntregi n repre+entare binar) Exemplu Za _ Zb Za V Zb Za ` Zb a Za *umele operatorului Y ,@95/ 0@A ,4;/ :4; 94" ReAultat 2iii po+iionai pe = n Za Y n Zb sunt po+iionai la = n re+ultat 2iii po+iionai pe = n Za 0@A Zb sunt po+iionai la = n re+ultat 2iii po+iionai pe = n Za 0@A n Zb sunt po+iionai la = n re+ultat 2iii care sunt po+iionai pe = n Za vor fi po+iionai pe . i vice versa 5eplasea+ biii din Za cu Zb po+iii spre stnga ,fiecare pas nseamn multiplicare cu F/ 5eplasea+ biii din Za cu Zb po+iii spre dreapta ,fiecare pas nseamn mprire cu F/

Za bb Zb 5eplasare la stnga Za TT Zb 5eplasare la dreapta

3peratori de compara6ie
4peratorii de comparaie permit compararea a dou valori) Exemplu *umele operatorului ReAultat Za QQ Zb 8gal @devrat dac Za este egal cu Zb @devrat dac Za este egal cu Zb i ei sunt de acelai tip ,numai n '!' -/ @devrat dac Za este diferit de Zb @devrat dac Za este mai mic strict dect Zb) @devrat dac Za este mai mare strict dect Zb @devrat dac Za este mai mic sau egal ca Zb @devrat dac Za este mai mare sau egal ca Zb

Za QQQ Zb dentic Za cQ Zb Za b Zb Za T Zb Za bQ Zb Za TQ Zb 5iferit #ai mic dect #ai mare dect #ai mic sau egal #ai mare sau egal

An alt operator condiional este operatorul ternar ,N!:N/, care funcionea+ ca n C)


* expr)- ! * expr2- : * expr3-(

D3

@ceast e(presie returnea+ e(presia e:pr> dac e:pr6 este adevarat i e(presia e:pr& dac e(presia e:pr6 este fals)

3peratori de control al erorilor


'!' are un operator de control al erorilor i anume NPN) Cnd acest operator precede o e(presie n '!', orice eroare care poate fi generat va fi ignorat) 5ac opiunea tracF.errors este activat, mesa&ele de eroare generate de e(presie vor fi salvate n variabila global Gp-p.errormsg) @ceast variabil va fi rescris la fiecare eroare, deci verificai%o la timp dac dorii s o utili+ai) 8(emplu7
/; roare "T2 intentionata *apostrof#ri s#plimentare- ;/ >res = mysUl_U#ery* "select name$ code from Gnamelist"- or die* "T#ery failed: error was G>php_errormsgG."-(

3peratori de execu6ie
'!' are un operator de e(ecuie NQQN ,backticks/) 8ste diferit de ghilimelele simple) '!' va ncerca s e(ecute coninutul dintre aceste ghilimele oblice ca o comand shell) ;e+ultatul va fi returnat ,nu va fi descrcat pur i simplu, ci va putea fi atribuit unei variabile/) 8(emplu7
>o#tp#t = Vls 5alV( echo "<pre> >o#tp#t </pre>"(

3peratori de incrementare/decrementare
'!' dispune de operatori de incrementareEdecrementare ca i limba&ul C) Exemplu *umele operatorului ReAultat XXZa ZaXX %%Za Za%% 8(emplul F)6)F7
echo >a = echo echo echo >a = echo echo echo >a = echo echo echo >a = echo echo "<h3>%ost5incrementare</h3>"( O( "Cbtin /aloarea O: " . >a:: . "<br>"( "Cbtin /aloarea B: " . >a . "<br>"( "<h3>%re5incrementare</h3>"( O( "Cbtin /aloarea B: " . ::>a . "<br>"( "Cbtin /aloarea B:" . >a . "<br>"( "<h3>%ost5decrementare</h3>"( O( "Cbtin /aloarea O: " . >a55 . "<br>"( "Cbtin /aloarea 7: " . >a . "<br>"( "<h3>%re5decrementare</h3>"( O( "Cbtin /aloarea 7: " . 55>a . "<br>"( "Cbtin /aloarea 7: " . >a . "<br>"(

're%incrementare 'ost%incrementare 're%decrementare 'ost%decrementare

ncrementea+ Za cu =, apoi l returnea+ ;eturnea+ Za, apoi incrementea+ Za cu = 5ecrementea+ Za cu =, apoi l returnea+ ;eturnea+ Za, apoi decrementea+ Za cu =

3peratori logici
4peratorii logici sunt7 Exemplu *umele operatorului ReAultat D-

Za and Zb Y ,@95/ Za or Zb c Za 0@A ,4;/ 949 ,94"/

@devrat dac Za Y Zb sunt adevrate @devrat dac Za 0@A Zb este adevrat @devrat dac Za este fals @devrat dac Za 0@A Zb este adevrat , dar nu amndou n acelai timp @devrat dac Za Y Zb sunt adevrate @devrat dac Za 0@A Zb este adevrat

Za (or Zb :4; ,:4;/ Za __ Zb 0 ,@95/ Za VV Zb 0@A ,4;/

#otivul pentru care e(ist dou tipuri de N?IN i NSA@N este c ele au prioriti diferite)

Preceden6a operatorilor
'recedena operatorilor specific ordinea n care se aplic operatorii) 5e e(emplu, n e(presia = X D P 3 re+ultatul este =6 i nu =>, cci nmulirea ,N/N/ are prioritate superioar n raport cu adunarea ,NEN/) "abelul urmtor conine operatorii disponibili n '!' n ordinea cresctoare a prioritilor) Asociati5itate 3peratori 0tnga 0tnga 0tnga 0tnga 5reapta 0tnga 0tnga 0tnga 0tnga 0tnga 0tnga 0tnga , or (or Y print Q, XQ, %Q, PQ, EQ, )Q, MQ, _Q, VQ, `Q, aQ, bbQ, TTQ d7 VV __ V ` _

9on%asociativ QQ, cQ, QQQ, cQQ 9on%asociativ b, bQ, T, TQ 0tnga 0tnga 0tnga 0tnga 0tnga bb, TT X% PE, M c, a, XX, %%, ,int/, ,double/, ,string/, ,arra3/, ,obiect/, e [

9on%asociativ ne6

3peratori pentru 0iruri de caractere


8(ist doi operatori pentru iruri de caractere) 'rimul este operatorul de concatenare ,N #N/, care are ca re+ultat concatenarea celor dou argumente) Cel de%al doilea operator este operatorul de atribuire ,N #MN/, care concatenea+ argumentul din partea dreapt la argumentul din stng) DD

>a = "&ello"( >b = >a . "World'"( >a = "&ello"( >a .= "World'"(

// >b contine sir#l Hello World! // >a contine sir#l Hello World!

#R 1tructuri de control
"oate scripturile '!' sunt o suit de instruciuni) 4 instruciune poate fi o atribuire, un apel de funcie, o instruciune condiional sau chiar o instruciune vid) 4 instruciune se termin de obicei prin punct i virgul, N:N) nstruciunile pot fi grupate n blocuri delimitate de acolade, N STN) An bloc este considerat ca o instruciune) 5iferitele tipuri de instruciuni sunt descrise n capitolul urmtor)

i"
nstruciunea i" este important n toate limba&ele, inclusiv n '!') 8a permite e(ecuia condiionat a unei pri de cod) 0inta(a instruciunii i" este aceeai ca i n C7
if* expresieF listX de instr#cYi#ni J

Cum am v+ut n paragraful care se refer la e(presii, e:presie este evaluat la o valoare de adevr) 5ac e(presia e:presie este ";A8, '!' va e(ecuta instruciunile din lista de instruc/iuni, iar dac ea este <@$08, instruciunile vor fi ignorate) 8(emplu7
if* >a > >becho ">a este mai mare decat >b"(

5ac dorim ca un grup de instruciuni s fie e(ecutate condiionat, este suficient s nchidem aceste instruciuni ntre acolade pentru a forma un bloc) 8(emplu7
if* >a > >bF echo ">a este mai mare decat >b"( >b = >a( J

nstruciunile i" pot fi imbricate pe oricte niveluri dorim obinndu%se o structur condiional e(trem de fle(ibil)

else
5ac dorim s e(ecutm dou instruciuni diferite n funcie de valoarea de adevr a unei e(presii vom folosi o instruciune i"-else ca n e(emplul urmtor7
if* >a > >bF print ">a este mai mare decat >b"( J else F print ">b este mai mare decat >a"( J

nstruciunile de dup else sunt e(ecutate doar dac e(presia condiional este evaluat la <@$08)

elsei"
@a cum sugerea+ numele, este o combinaie a instruciunilor i" i else) Ca i else, instruciunea elsei" e(tinde o instruciune i" pentru a e(ecuta alte instruciuni n ca+ul n care e(presia condiional din i" este <@$08) 0pre deosebire de else, instruciunea alternativ va fi e(ecutat doar dac e(presia condiional din elsei" este ";A8) D6

0pre e(emplu, fragmentul urmtor de cod va afia care este relaia dintre )a i )b)
if* >a > >bF print ">a este mai mare decat >b"( J elseif* >a == >bF print ">a este egal c# >b"( J else F print ">b este mai mare decat >b"( J

nstruciunile elsei" se pot imbrica pe mai multe niveluri, dup un i" iniial) 'rimul elsei" care va fi evaluat la ";A8 va fi e(ecutat) *n '!', instruciunea poate fi scris i n dou cuvinte7 else i") Comportamentul su va fi acelai)

1intaxa alternati5<
'!' propune o sinta(a alternativ pentru instruciunile de control i", &-ile, "or i s&itc-) *n fiecare ca+ principiul este de a nlocui acolada deschis cu dou puncte ,N :N/ i acolada nchis prin, respectiv endi":, end&-ile:, end"or:, sau ends&itc-:)
if* >a == O-: echo >a( endif(

@ceast sinta( funcionea+ de asemenea cu else i elsei") 8(emplul urmtor pre+int o structur cu un i", un elsei" i un else utili+at n aceast nou sinta()
if* >a == O-: print ">a este egal c# O"( print "..."( elseif* >a == B-: print ">a este egal c# B"( print "'''"( else: print ">a este diferit de O si B"( endif(

&-ile
2ucla &-ile este cea mai simpl implementare a unei bucle n '!') @ceast bucl se comport la fel ca n C) 0inta(a instruciunii &-ile este7
while* expresieF listX de instr#cYi#ni J

8(ecuia unei bucle &-ile este foarte simpl) '!' e(ecut instruciunile din lista de instruc/iuni att timp ct e(presia buclei &-ile, e:presie, este evaluat la ";A8) Ialoarea e(presiei este verificat la fiecare nceput al buclei i, dac valoarea se schimb pe durata e(ecuiei instruciunilor, e(ecuia nu se va sfri dect la urmtoarea iteraie ,de fiecare dat cnd '!' e(ecut instruciunile are loc o iteraie/) 5ac e(presia buclei &-ile este <@$08 naintea primei interaii, instruciunea nu va fi niciodat e(ecutat) #ai multe instruciuni pot fi e(ecutate ntr%o bucl &-ile grupndu%le ntre acolade pentru a forma un bloc sau utili+nd sinta(a alternativ dup modelul de mai &os7
while* expresie-: listX de instr#cYi#ni endwhile(

Armtoarele e(emple sunt identice ca efect i afiea+ toate numerele de la = la =.7


/; xempl#l ) >i = )( while* >i <= )@F ;/

D?

print >i::(

/; 4fisea9a /aloarea l#i >i inaintea incrementarii ;/ ;/

/; xempl#l 2 >i = )( while* >i <= )@-: print >i( >i::( endwhile(

do##&-ile
2uclele do##&-ile seamn mult cu buclele &-ile, dar e(presia condiional este testat la sfritul fiecarei iteraii i nu la nceput) 'rincipala diferen fa de bucla &-ile este c prima iteraie a buclei do##&-ile este ntotdeauna e(ecutat ,e(presia nu este testat dect la sfritul iteraiei/) 9u e(ist dect o sinta( posibil pentru buclele do##&-ile7
do F listX de instr#cYi#ni Jwhile* expresie-(

8(emplu7
>i = @( do F print >i( Jwhile* >i > @-(

2ucla de mai sus va fi e(ecutat doar o singur dat, pentru c la prima evaluare a e(presiei obinem <@$08 ,deoarece variabila )i nu este mai mare dect ./ i e(ecuia buclei se oprete) Atili+atorii familiari cu C sunt obinuii s utili+e+e n mod diferit buclele do##&-ile, care permite oprirea e(ecuiei buclei, prin introducerea instruciunii 4reaF ntr%o bucl do##&-ile) Codul urmtor demonstrea+ acest lucru7
do F if* >i < OF print ">i n# este s#ficient de mare"( breaZ( J >i ;= >factor( if* >i < >minim#m_limitF breaZ( J print ">i este b#n"( Jwhile* @-(

"or
2uclele "or sunt cele mai comple(e bucle n '!') 8le funcionea+ la fel ca buclele "or din limba&ul C) nstruciunea are urmtoarea sinta(7
for* expr)( expr2( expr3F listX de instr#cYi#ni J

'rima e(presie ,e:pr6/ este evaluat ,e:ecutat0/ o singur dat, necondiionat, la nceputul buclei) $a nceputul fiecrei iteraii, e(presia e:pr> este evaluat) 5ac evaluarea devine ";A8, bucla continu i instruciunile din lista de intruc/iuni sunt e(ecutate) 5ac evaluarea devine <@$08, e(ecuia buclei se oprete) $a sfritul fiecrei iteraii, e(presia e:pr& este evaluat ,e(ecutat/) D>

8(presiile pot fi eventual vide) 5ac e(presia e:pr> este vid, nseamn c bucla este infinit ,'!' consider implicit c e(presia e:pr> este ";A8, ca n C/) @cest lucru poate fi util, mai ales cnd dorim s terminm bucla cu instruciunea 4reaF) *n e(emplele urmtoare vor fi afiate numerele de la = la =.7
/; xempl#l ) ;/ for* >i = )( >i <= )@( >i::F print >i( J /; xempl#l 2 ;/ for* >i = )(( >i::F if* >i > )@F breaZ( J print >i( J /; xempl#l 3 >i = )( for* ((F if* >i > )@F breaZ( J print >i( >i::( J ;/

/; xempl#l 3 ;/ for* >i = )( >i <= )@( print >i$ >i::- (

8vident, primul e(emplu ,sau al patrulea/ este cel mai simplu dintre toate, dar utili+area unei e(presii vide ntr%o bucl "or poate fi util de multe ori) 5e asemeni, '!' folosete urmtoarea sinta( alternativ pentru buclele "or7
for* expr)( expr2( expr3-: listX de instr#cYi#ni endfor(

"oreac'!'- ,nu i '!'3/ dispune de comanda "oreac-, ca 'erl sau alte limba&e) nstruciunea ofer un mod simplu de a trece n revist un tablou) 8(ist dou sinta(e posibile, a doua este o mic, dar util, e(tensie a celei dinti 7
foreach* F listX J foreach* F listX J array_expresion as >/al#ede instr#cYi#ni array_expresion as >Zey => >/al#ede instr#cYi#ni

'rima form trece n revist tabloul arra-Ae:pression) $a fiecare iteraie, valoarea elementului curent este atribuit lui )value i pointerul intern al tabloului este avansat cu un element ,astfel, la urmtoarea iteraie avei acces la urmtorul element/) @ doua form face acelai lucru, dar cheia ,indicele/ elementului curent va fi atribuit variabilei )ke- la ficare iteraie)

DC

*ot<7 cnd "oreac- ncepe s fie e(ecutat, pointerul intern al fiierului este automat repo+iionat la primul element al tabloului) @cest lucru nseamn c nu vei avea nevoie s facei apel la reset() nainte de "oreac-) 5e asemeni, "oreac- lucrea+ cu o copie a tabloului astfel nct pointer%ul intern al tabloului nu este modificat ca n ca+ul utili+rii constructorului eac-) Armtoarele dou e(emple funcionea+ n acelai mod7
reset* >arr-( while* list* $ >/al#e- = each* >arr-F echo "Maloare: >/al#e<br>,n"( J foreach* >arr as >/al#eF echo "Maloare: >/al#e<br>,n"( J

8(emplele urmtoare funcionea+, de asemeni, identic7


reset* >arr-( while* list* >Zey$ >/al#e- = each* >arr-F echo "+heie: >Zey( Maloare: >/al#e<br>,n"( J foreach* >arr as >Zey => >/al#eF echo "+heie: >Zey( Maloare: >/al#e<br>,n"( J

Armea+ 3 e(emple de utili+are ,e(emplul F)?)=/7


/; xempl#l ): o sing#ra /aloare ;/ >a = array* )$ 2 3$ )R-( foreach* >a as >/F print "Maloarea c#renta este ,>a: >/.,n"( J /; xempl#l 2: /aloare *c# cheie asociata>a = array* )$ 2 3$ )R-( >i = @( /; ?#mai pentr# afisare ;/ foreach* >a as >/F print ",>aK>iL => >Z.,n"( J /; xempl#l 3: /aloarea si cheia >a = array* "#n#" => )$ "doi" => 2$ "trei" => 3$ "saptespre9ece" => )R -( foreach* >a as >Z => >/F print ",>aK>ZL => >/.,n"( J ;/ ;/

4reaF
nstruciunea 4reaF permite ieirea dintr%o instruciune i", "or, &-ile sau s&itc-) nstruciunea 4reaF accept un argument numeric opional care va indica numrul de instruciuni imbricate care trebuiesc ntrerupte) 8(emplul F)?)F7
>arr = array* G#n#G$ GdoiG$ GtreiG$ Gpatr#G$ GstopG$ GcinciG-( while* list* $ >/al- = each* >arr-F

6.

if* >/al == GstopGbreaZ( /; "e poate scrie si "breaZ )(" ;/ echo ">/al<br>,n"(

/; 6olosind #n arg#ment optional ;/ >i = @( while* ::>iF switch* >iF case O: echo "2a O<br>,n"( breaZ )( /; "e incheie doar instr#ctin#ea switch ;/ case )@: echo "2a )@ 5 iesire<br>,n"( breaZ 2( /; "e incheie instr#ctile switch si while ;/ defa#lt: breaZ( J J

continue
nstruciunea continue este utili+at ntr%o bucl pentru a sri peste instruciunile de dup continue i pn la sfritul bloculuiL e(ecuia iteraiei curente este ntrerup i se trece la e(ecuia iteraiei urmtoare) nstruciunea continue accept un argument numeric opional care va indica cte bucle imbricate vor fi ignorate) 8(emplul F)?)37
while* list* >Zey$ >/al- = each* >arr-F if* '* >Zey 8 2-- // /ita elementele impare contin#e( exec#ta_impar* >/al-( J >i = @( while* >i:: < OF echo " xterior<br>,n"( while* )F echo "1iEloc<br>,n"( while* )F echo "Dnterior<br>,n"( contin#e 3( J echo "4ici n# afisea9a niciodata.<br>,n"( J echo "?# faceti niciodata asta.<br>,n"( J

s&itcnstruciunea s&itc- este echivalent cu o serie de instruciuni i") Cu numeroase oca+ii, vei avea nevoie s comparai aceeai variabil ,sau e(presie/ cu mai multe valori diferite i s e(ecutai diferite pari din cod n funcie de valoarea obinut) @cesta este modul de e(ecuie al instruciunii s&itc-) Armtorul e(emplu ilustrea+ dou modaliti diferite de a scrie acelai lucru, una utili+ea+ o serie de i" i alta utili+ea+ instruciunea s&itc- ,e(emplul F)?)-/7
if* >i == @print ">i este egal c# @"( if* >i == )print ">i este egal c# )"( if* >i == 2-

6=

print ">i este egal c# 2"( switch* >iF case @: print ">i este egal c# @"( breaZ( case ): print ">i este egal c# )"( breaZ( case 2: print ">i este egal c# 2"( breaZ( J

8ste important s nelegem modul de e(ecuie al instruciunii s&itc- pentru a evita apariia erorilor) nstruciunea s&itc- se e(ecut secvenial, linie dup linie) $a nceput nu este e(ecutat nici un cod) 9umai cnd se gasete o valoare a selectorului identic cu o constant case, '!' e(ecut instruciunile corespun+toare respectivei constante case) '!' continu s e(ecute instruciunile pna la sfritul blocului de instruciuni s&itc- sau pn cnd ntlnete instruciunea 4reaF) 5ac nu utili+ai instruciunea 4reaF la sfritul unui bloc case, '!' va continua s e(ecute instruciunile din urmtorul bloc case ,e(emplul F)?)D/7
switch* >iF case @: print ">i este egal c# @"( case ): print ">i este egal c# )"( case 2: print ">i este egal c# 2"( J

*n acest e(emplu, dac )i este egal cu ., '!' va e(ecuta toate instruciunile print) 5ac )i este egal cu =, '!' va e(ecuta ultimele dou instruciuni print i numai dac )i este egal cu F vei obine re+ultatul scontat, adic se va afia )i este egal cu >) 5eci, imporatant este sa folosii corect instruciunea 4reaF) *n comanda s&itc-, condiia este evaluat o singur dat i re+ultatul este comparat cu fiecare constant case) *ntr%o instruciune elsei", condiia este reevaluat) 5ac condiia voastr este mai complicat dect o simpl comparaie sau apare ntr%o bucl, instruciunea s&itc- se poate dovedi mai rapid) $ista de instruciuni a unei constante case poate fi vidL n acest ca+ '!' va utili+a lista de instruciuni din case%ul urmtor)
switch* >iF case @: case ): case 2: print ">i este mai mic dec[t 3$ dar n# este negati/"( breaZ( case 3: print ">i este egal c# 3"( J

An ca+ special l constituie e(presia predefinit de"ault) @ceast e(presie indic orice e(presie diferit de constantele case anterioare ,e(emplul F)?)6/7
switch* >iF case @: print ">i este egal c# @"( breaZ( case ): print ">i este egal c# )"( breaZ( case 2: print ">i este egal c# 2"( breaZ(

6F

defa#lt: print ">i n# este egal c# @$ ) sa# 2"( J

34ser5a6ie7 e(presia predefinit de"ault poate fi folosit oriunde n instruciunea s&itc-) 8(presiile case pot fi orice e(presie scalar de tip ntreg, virgul mobil sau ir de caractere) "ablourile i obiectele pot fi folosite numai dac sunt derefereniate la un tip simplu) 0inta(a alternativ pentru aceast structur de control este urmtoarea7
switch* >i-: case @: print ">i breaZ( case ): print ">i breaZ( case 2: print ">i breaZ( defa#lt: print ">i endswitch( este egal c# @"( este egal c# )"( este egal c# 2"( n# este egal c# @$ ) sa# 2"(

include()
<uncia include() introduce i evaluea+ fiierul specificat n argument) 5ac @RL fopen 5rappers nu sunt disponibile n '!' ,aa cum sunt n configuraia implicit/, putei specifica fiierul care trebuie inclus utili+nd un @RL n locul unui pat(name local) 'entru a evita utili+area eronat a fiierului inclus, orice cod din fiierul destinaie care trebuie e(ecutat ca un cod '!' trebuie ncadrat de tag%uri de nceput i sfrit valide n '!') 5e asemeni, se poate folosi o instruciune include() ntr%o bucl pentru a include mai multe fiiere diferite, aa cum reiese din e(emplul urmtor7
>files = array* G#n#.incG$ Gdoi.incG$ Gtrei.incG-( for* >i = @( >i < co#nt* >files-( >i::F incl#de* >filesK >iL-( J

nstruciunea include() este reevaluat de fiecare dat cnd este ntlnit ntr%un cod '!') 5eoarece include() este o construcie special a limba&ului, trebuie s o includei ntr%un bloc de instruciuni dac ea apare ntr%un bloc condiional) 8(emplu7
/; <tili9area este S\ "D34 si n# /a f#nctiona in mod#l dorit ;/ if* >conditionincl#de* >file-( else incl#de* >other-( /; 4ceasta este +C\ +3 ;/ if* >conditionF incl#de* >file-( J else F incl#de* >other-( J

*n '!'-, ct i n '!'3, se poate e(ecuta o instruciune return n interiorul unui fiier inclus cu include(), e(ecuia determinnd ncheierea procesului n respectivul fiier i revenirea n scriptul care l%a solicitat) 5e asemeni, '!'- permite s returnai valori din fiierele incluse cu include()) 'utei folosi aceste valori ca i cum ar fi returnate de o funcie normal) 8(emplu7
/; 6isier#l test.inc ;/

63

/; "e pres#p#ne ca fisier#l test.inc exista in acelasi director c# fisier#l main.html ;/ echo "Dnainte de ret#rn<br>,n"( if* )F ret#rn 2R( J echo ".#pa ret#rn<br>,n"( /; ... in fisier#l main.html ;/ /; %res#p#nem ca fisier#l main.html contine aceasta: ;/ >ret/al = incl#de* Gtest.incG-( echo "6isier#l ret#rnea9a: G>ret/alG<br>,n"(

@tunci cnd main1(tml este apelat n '!'3, el va genera o eroare de anali+ la linia 3 deoarece n '!'3 nu putem evalua valori returnate de include()) *n '!'- re+ultatul va fi7
Inainte de return Fisierul returneaza: '27'

0 presupunem acum c main1(tml a fost modificat i conine codul urmtor7


incl#de* Gtest.incG-( echo "Dntoarcere in main.html<br>,n"(

*n '!'- se va afia7
Inainte de return Intoarcere in main.html

5in contr, '!'3 afiea+7


Inainte de return 27 Intoarcere in main.html Parse error: parse error in main.html on line

8roarea de anali+ de mai sus este re+ultatul faptului c instruciunea return este inclus mpreun cu test1inc n acelai bloc) 5ac instruciunea return este mutat n afara blocului, se afiea+7
Inainte de return 27 Intoarcere in main.html

GF?G arat c '!'3 nu suport returnarea valorilor din fiiere n acest mod) 8ste important de notat c atunci cnd un fiier este inclus cu include() codul pe care l conine motenete domeniul variabilelor corespun+ator liniei pe care apare instruciunea include() n cod) 4rice variabil disponibil pe respectiva linie va fi disponibil i n fiierul inclus)

include.once
nstruciunea include.once include i evaluea+ fiierul specificat n timpul e(ecuiei scriptului) Comportamentul este similar cu cel al instruciunii include(), deosebirea ma&or fiind aceea c dac codul din fiier a fost de&a inclus n script operaia nu va fi repetat) Iom folosi aceast instruciune cnd un fiier ar putea fi inclus i evaluat de mai multe ori n e(ecuia unui anumit script i dorim s ne asigurm c includerea sa se va efectua numai odat pentru a evita problemele care pot s apar la redefinirea funciilor, reiniiali+area variabilelor etc)

II#) Func6ii
Func6iile de"inite de utiliAator
4 funcie poate fi definit de utili+ator conform sinta(ei urmtoare7
f#nction n#me_f#nctie* >arg)$ >arg2$ ...$ >arg?F echo " xempl# de f#nctie.,n"( ret#rn >ret/al( J

*ntr%o funcie poate s apar orice cod '!' valid, chiar alte funcii i definiii de clase)

6-

*n '!'3, funciile trebuie s fie definite nainte de a fi refereniateL n '!'- nu e(ist o asemenea restricie) '!' nu susine funcii de suprancarcare, nu se poate anula definirea sau redefini o funcie declarat anterior) '!'3 nu accept numr variabil de argumente n antetul funciilor, dar accept argumente implicite)

Argumentul "unc6iilor
nformaiile pot fi transmise funciilor print%o list de argumente) *n aceast list variabilele iEsau constantele sunt delimitate prin virgul) '!' accept transmiterea argumentelor prin valoare ,implicit/, prin referin i argumente cu valori implicite) $istele cu numr variabil de argumente sunt acceptate doar n versiunea '!'-) An efect similar poate fi obinut n '!'3 transmind funciei un tablou de argumente) 8(emplu7
f#nction taZes_array* >inp#tF echo ">inp#tK@L : >inp#tK)L = "$ >inp#tK@L : >inp#tK)L( J

Transmiterea argumentelor prin re"erin6<


mplicit, argumentele funciilor sunt transmise prin valoare ,n sensul c schimbarea valorii argumentului n interiorul funciei nu se reflect i n afara funciei/) 5ac dorii s permitei unei funcii s modifice argumentele sale, acestea trebuie transmise prin referin) 5ac vrei ca un argument al unei funcii s fie transmis prin referin, trebuie s precedai cu un N HN numele argumentului n definiia funciei, ca n e(emplul de mai &os ,e(emplul F)>)=/7
f#nction add_some_extra* Q>stringF >string .= Gand something extra.G( J >str = G3his is a string$ G( add_some_extra* >str-( echo >str( // "e /a afisa !his is a strin", and somethin" e#tra.

5ac vrei s transmitei o variabil prin referin unei funcii care nu face acest lucru n mod implicit, trebuie s precedai cu un NHN numele argumentului n apelul funciei ,e(emplul F)>)F/7
f#nction my_f#nction* >stringF >string .= Gand something extra.G( J >str = G3his is a string$ G( my_f#nction* >str-( echo >str( // "e /a afisa !his is a strin", my_f#nction* Q>str-( echo >str( // "e /a afisa !his is a strin", and somethin" e#tra.

Dalorile argumentelor implicite


4 funcie poate defini valorile implicite ale argumentelor scalare n stilul CXX, ca n e(emplul de mai &os7
f#nction maZecoffee* >type = "capp#cino"F ret#rn "1aZing a c#p of >type.,n"( J echo maZecoffee *-( echo maZecoffee * "espresso"-(

;e+ultatul acestui cod este7


$a%in" a cup o& cappucino. $a%in" a cup o& espresso.

6D

Ialoarea implicit trebuie s fie o e(presie constant, nu o variabil sau un membru de clas) 4bservai c atunci cnd folosii argumente implicite, orice astfel de argument trebuie s fie n lista argumentelor n dreapta orcrui argument neimplicit, altfel nu vom obine re+ultatul ateptat) Considerai e(emplul urmtor7
f#nction maZeyog#rt* >type = "acidophil#s"$ >fla/o#rF ret#rn "1aZing a bowl of >type >fla/o#r.,n"( J echo maZeyog#rt* "raspberry"-( // ?# merge'''

;e+ultatul acestui cod este7


Warnin": $issin" ar"ument 2 in call to ma%e'o"urt() in *usr*local*etc*httpd*htdocs*php+test*&unctest.html on line ,$a%in" a .owl o& rasp.err'.

@cum comparai cu acesta7


f#nction maZeyog#rt* >fla/o#r$ >type = "acidophil#s"F ret#rn "1aZing a bowl of >type >fla/o#r.,n"( J echo maZeyog#rt* "raspberry"-( // 1erge''' /; 4fi]ea9X: $a%in" a .owl o& acidophilus rasp.err'. ;/

@iste cu num<r 5aria4il de argumente


'!'- accept liste cu numr variabil de argumente n funciile definite de utili+ator) @cest lucru se obine uor, utili+nd funciile "unct.num.args, "unct.get.arg i "unct.get.args)

Dalorile returnate de "unc6ii


Ialorile sunt returnate folosind opional instruciunea return) 'oate fi returnat orice tip de re+ultat, inclusiv tablouri i obiecte7
f#nction sU#are* >n#mF ret#rn >n#m ; >n#m( J echo sU#are* 7-( // "e afi]ea9X -/

9u putei returna valori multiple dintr%o funcie, dar re+ultate asemntoare pot fi obinute prin returnarea unui tablou7
f#nction small_n#mbers*F ret#rn array* @$ )$ 2-( J list* >9ero$ >one$ >two- = small_n#mbers*-(

'entru a returna o referin dintr%o funcie, trebuie folosit operatorul N HN att n declaraia funciei dar i cnd atribuii valoarea returnat unei variabile, ca n e(emplul de mai &os7
f#nction Qret#rns_reference*F ret#rn Q>someref( J >newref = Qret#rns_reference*-(

Func6ii 5aria4ile
'!' susine conceptul de funcii variabile) @ceasta nseamn c dac numele unei variabile este urmat de parante+e, '!' va caut o funcie cu acelai nume i va ncerca s o e(ecute) 8(emplul F)>)37
f#nction fct*F echo "Dn fct*-<br>,n"(

66

J f#nction bar* >arg = GGF echo "Dn bar*-: arg#ment was G>argG<br>,n"( J >f#nc = GfctG( >f#nc*-( >f#nc = GbarG( >f#nc* GtestG-(

I#' lase 0i o4iecte


4 clas este o colecie de variabile i de funcii care utili+ea+ aceste variabile) 4 clas se definete utili+nd urmtoarea sinta(7
class +art F /ar >items( // 3ablo# asociati/ de articole

// 4da#ga >n#m articole de tip#l >artnr f#nction add_item* >artnr$ >n#mF >this5>itemsK >artnrL := >n#m( J // limina >n#m articole de tip#l >artnr f#nction remo/e_item* >artnr$ >n#mF if* >this5>itemsK >artnrL > >n#mF >this5>itemsK >artnrL 5= >n#m( ret#rn tr#e( J else F ret#rn false( J J J

Construcia de mai sus definete o clas 9art format dintr%un tablou asociativ de articole i dou funcii pentru a aduga i a elimina articole din tablou) *ot<7 n '!'- sunt permii doar iniiali+atori constani pentru variabile 5ar) 'entru iniiali+atorii neconstani trebuie folosii constructori)
/; 4cest exempl# n# /a f#nctiona %&%7 class 3est+lass F /ar >todays_date = date* "^5m5d"-( /ar >name = >a_name( J /; 4sa treb#ie procedat class 3est+lass F /ar >todays_date( /ar >name( ;/ ;/

f#nction +art*F >this5>todays_date = date* "^5m5d-( >this5>name = >S2CI42"K Ga_nameGL( J

Clasele sunt tipuri) 'entru a crea o variabil de tipul dorit se folosete operatorul ne&) 6?

>cart = new +art( >cart5>add_item* ")@"$ )-(

@cest cod crea+ un obiect )cart din clasa 9art) <uncia addAitem23 a acestui obiect este apelat pentru a aduga un articol cu numrul =. n tabloul )cart-Bitems) Clasele pot fi e(tensii ale altor clase) @ceast noiune se numete motenire) Clasa e(tins sau derivat posed toate variabilele i funciile clasei de ba+ alturi de variabilele i funciile definite n e(tensie) @cest lucrul se reali+ea+ utili+nd cuvntul cheie extends) #otenirea multipl nu este acceptat)
class ?amed_+art extends +art F /ar >owner( f#nction set_owner* >an_ownerF >this5>owner = >an_owner( J J

Codul de mai sus definete o clas #amedA9art care are toate variabilele i funciile din 9art plus o variabil suplimentar )o5ner i o funcie suplimentar setAo5ner23) 'utei crea un obiect )ncart cu operatorul ne& i apoi putei seta proprietile obiectului) 8(emplu7
>ncart = new ?amed_+art( >ncart5>set_owner* "_ris"-( print >ncart5>owner( >ncart5>add_item* ")@"$ )-( // +rea9a #n no# obiect // "etea9a proprietatea owner // 1ostenire de la clasa de ba9a

*n funciile unei clase variabila Gt-is nseamn obiectul curent) 'entru a accesa o variabil sau funcie a obiectului curent, numit )proba, trebuie s utili+m construcia Gt-is-;pro4a) @tt n interiorul ct i n afara obiectului, nu este necesar semnul NGN , n faa unei GproprietiG/ cnd accesai o proprietate a acestuia) 8(emplu7
>ncart5>owner = "+hris"( // 6XrX > `n faYa proprietXYii >owner >ncart5>>owner( // ste in/alid deoarece >ncart5>>owner = >ncart5>"" >my_/ar = GownerG( >ncart5>>my_/ar = "+hris"( // ste corect deoarece >ncart5>>my_/ar = >ncart5>owner

Constructorii sunt funciile dintr%o clas care au acelai nume cu clasa) 8i sunt automat apelai cnd creai o nou instan a clasei)
class 4#to_+art extends +art F f#nction 4#to_+art*F >this5>add_item* ")@"$ )-( J J

@cest cod definete o clas AutoA9art care e(tinde clasa 9art plus un constructor care iniiali+ea+ obiectul cu un articol, avnd numrul =. de fiecare dat cnd un nou obiect de tipul AutoA9art este creat cu operatorul ne&) Constructorii pot avea argumente ,pot fi opionale/, caracteristic care i face foarte utili)
class +onstr#ctor_+art extends +art F f#nction +onstr#ctor_+art* >item = ")@"$ >n#m = )F >this5>add_item* >item$ >n#m-( J J

6>

>defa#lt_cart = new +onstr#ctor_+art( >different_cart = new +onstr#ctor_+art* "2@"$ )R-(

II#8= Re"erin6e
e sunt re"erin6ele!
*n '!' referinele repre+int posibilitatea de a referi coninutul unei variabile prin nume diferite) *n '!' numele unei variabile difer de coninutul variabilei, deci un anumit coninut poate fi identificat prin nume diferite)

e "ac re"erin6ele!
;eferinele '!' permit referirea aceluiai coninut prin dou variabile diferite) Cnd scriei7
>a = Q>b(

nseamn c )a i )b indic aceeai variabil) @l doilea lucru pe care l reali+ea+ referinele este s transmit variabile prin referin) @cest lucru se reali+ea+ folosind variabila local a funciei i variabila cu care se face apelul drept referine ctre acelai coninut) 8(emplu7
f#nction fct* Q>/arF >/ar::( J >a = O( fct* >a-(

@pelul de mai sus va duce la obinerea valorii 6 n variabila )a) @cest lucru se ntmpl deoarece n funcia fct23 variabila )var refer acelai coninut ca i variabila )a) @l treilea lucru pe care l pot face referinele este ntoarcerea unei valori prin referin)

e nu sunt re"erin6ele!
;eferinele nu sunt pointeri) @stfel, urmtoarea construcie nu va ntoarce re+ultatul ateptat7
f#nction fct* Q>/arF >/ar = Q>S2CI42"K "ba9"L( J fct* Qbar-(

*n momentul apelului )var va intra n corespondena cu )bar din apelator, dar va fi redirectat ctre )GL%CALS* Dba.D+)

Untoarcerea re"erin6elor
*ntoarcerea prin referin este util cnd dorii s utili+ai funcii pentru a gsi variabile care ar trebui legate cu acestea) Cnd returnai referine folosii sinta(a7
f#nction Qfind_/ar* >paramF //... code... ret#rn Q>fo#nd_/ar( J >fnc = Qfind_/ar* >bar-(

*n acest e(emplu proprietatea obiectului returnat de funcia findAvar23 trebuie setat, nu copia acesteia cum s%ar ntmpla dac nu am utili+a sinta(a prin referin) 6C

34ser5a6ie7 spre deosebire de transmiterea parametrilor, trebuie s utili+ai N HN n ambele locuri pentru a indica ce ntoarcei prin referina ,i nu prin valoare cum este u+ual/ i pentru a spune cui i se atribuie respectiva referin)

Resetarea re"erin6elor
Cnd resetai o referin rupei practic legatura dintre numele i coninutul variabilei) @ceasta nu nseamn ca acel coninut al variabilei va fi distrus) 8(emplu7
>a = )( >b = Q>a( #nset* >a-(

0ecvena de cod de mai sus nu va reseta )b ci numai variabila )a) #ulte construcii sintactice n '!' sunt implementate prin mecanismul referinelor, deci modul lor de funcionare se poate aplica acestor construcii) Anele construcii, cum ar fi transmiterea i ntoarcerea prin referin, au fost de&a menionate) @lte construcii care folosesc referinele sunt referinele globale) Cnd declarai variabila )var ca variabil global creai defapt o referin la o variabil global) 0emnificaia este aceeai cu 7
>/ar = Q>S2CI42"K "/ar"L(

@ceasta nseamn, spre e(emplu, c, resetarea variabilei )var nu va reseta i variabila global asociat)

Gt-is
*ntr%o metod obiectual Gt-is refer ntotdeauna obiectul apelator)

Func6ii pentru gestionarea "i0ierelor


4asename
@re sinta(a7
string basename* string path-

<uncia primete ca parametru un ir repre+entnd un nume de cale i returnea+ numele fiierului din calea respectiv) 8(emplu7
>path = "/home/httpd/html/index.php3"( >file = basename* >path-( // >file are /aloarea inde#.php+

c-grp
@re sinta(a7
int chgrp* string filename$ mixed gro#p-

0chimb grupul fiierului filename n group) 5oar superuserul poate schimba grupul unui fiier arbitrarL ceilali utili+atori pot schimba doar grupul unui fiier la care sunt membri) <uncia returnea+ ";A8 n ca+ de succes i <@$08 n ca+ contrar) *ot<7 funcia nu este disponibil pe platformele Bindo6s)

c-mod
@re sinta(a7
int chmod *string filename$ int mode-

0chimb drepturile de acces ale fiierului filename n mode)

?.

34ser5a6ie7 mode nu este conisderat implicit ca fiind o valoare octal, deci irurile de caractere ,de e(emplu g45/ nu vor avea efectul dorit) 'entru a fi siguri c vei obine re+ultatul dorit, trebuie s prefi(ai mode cu un +ero ,./7
chmod *"/somedir/somefile"$ ROO-( // 9ecimal( probabil incorect chmod *"/somedir/somefile"$ "#:rwx$go:rx"-( // string( incorect chmod *"/somedir/somefile"$ @ROO-( // octal( /al#are corectX pentr# mode

<uncia returnea+ ";A8 n ca+ de succes i <@$08 n ca+ contrar) *ot<7 funcia nu este disponibil pe platformele Bindo6s)

c-o&n
@re sinta(a7
int chown* string filename$ mixed #ser-

0chimb proprietarul fiierului filename cu user) 5oar superuserul poate schimba proprietarul unui fiier) <uncia returnea+ ";A8 n ca+ de succes i <@$08 n ca+ contrar) *ot<7 funcia nu este disponibil pe platformele Bindo6s)

copy
@re sinta(a7
int copy* string so#rce$ string dest-

<uncia copie un fiier surs ntr%un fiier destinaie) ;eturnea+ ";A8 dac copierea s%a reali+at cu succes i <@$08 n ca+ contrar) 8(emplu7
if* 'copy* >file$ >file.G.baZG-F print * "6ailed to copy >file...<br(>,n"-( J

dirname
@re sinta(a7
string dirname* string path-

<uncia returnea+ numele directorului din calea pat() 8(emplu7


>path = "/etc/passwd"( >file = dirname* >path-( // >file ia /aloarea *etc

disF"reespace
@re sinta(a7
float disZfreespace* string directory-

<uncia returnea+ numrul octeilor disponibil n directorul sau partiia de disc preci+at prin irul director-) 8(emplu7
>df = disZfreespace* "/"-( // >df conYine n#mXr#l octeYilor disponibili `n "/"

"close
@re sinta(a7
int fclose* int fp-

*nchide fiierul referit prin fp) *ntoarce ";A8 n ca+ de succes i <@$08 n ca+ contrar) Iariabila fp trebuie s indice un fiier valid, adic un fiier deschis cu "open() sau "socFopen()) ?=

"eo"
@re sinta(a7
int feof* int fp-

;eturnea+ ";A8 dac pointerul de fiier este po+iionat pe 84< sau n ca+ de eroare, altfel returnea+ <@$08) Iariabila fp trebuie s indice un fiier valid, adic un fiier deschis cu "open(), popen() sau "socFopen())

""lus@re sinta(a7
int ffl#sh* int fp-

<orea+ scrierea tuturor bufferelor de ieire n fiierul indicat de fp) ;eturnea+ ";A8 n ca+ de succes i <@$08 n ca+ contrar) Iariabila fp trebuie s indice un fiier valid, adic un fiier deschis cu "open() sau "socFopen())

"getc
@re sinta(a7
string fgetc* int fp-

;eturnea+ un caracter citit din fiierul fp) ;eturnea+ <@$08 n ca+ul n care caracterul citit este 84<) Iariabila fp trebuie s indice un fiier valid, adic un fiier deschis cu "open(), popen() sau "socFopen())

"gets
@re sinta(a7
string fgets* int fp$ int length-

;eturnea+ un ir de ma(im lengt(-6 octei citii din fiierul indicat de fp) Citirea se ncheie cnd au fost citii lengt(-6 octei, cnd se citete ne5 line ,este inclus n valoarea returnat/ sau E%F) 5ac apare o eroare la citire returnea+ <@$08) Iariabila fp trebuie s indice un fiier valid, adic un fiier deschis cu "open(), popen() sau "socFopen()) 8(emplu7
>fd = fopen* "/tmp/inp#tfile.txt"$ "r"-( while* 'feof* >fd-F >b#ffer = fgets* >fd$ 7@NB-( echo >b#ffer( J fclose* >fd-(

"ile
@re sinta(a7
array file* string filename K$ int #se_incl#de_pathL-

8ste identic cu funcia read"ile(), cu e(cepia faptului c, coninutul fiierului este returnat ntr%un tablou) <iecare element al tabloului corespunde unei linii din fiier ,inclusiv caracterul ne5 line ataat/) 0e poate folosi un parametru opional setat cu G=G dac dorii ca fiierul s fie cutat n calea specificat) 8(emplu7
/; "crie conYin#t#l #nei pagini web `ntr5#n tablo# ]i apoi `l tipXre]te ;/ >fcontents = file* Ghttp://www.php.netG-( while* list* >line_no$ >line- = each* >fcontents-F echo "<br>2inie >line_no<br> " . htmlspecialchars* >line- . "<br>,n"(

?F

J /; "crie conYin#t#l #nei pagini web `ntr5#n ]ir de caractere ;/ >fcontents = Eoin* GG$ file* Ghttp://www.php.netG--(

"ile.exists
@re sinta(a7
int file_exists* string filename-

*ntoarce ";A8 dac fiierul specificat prin filename e(ist i <@$08 n ca+ contrar)

"ilesiAes
@re sinta(a7
int filesi9e* string filename-

*ntoarce dimensiunea fiierului specificat prin filename dac acesta e(ist i <@$08 n ca+ de eroare)

"iletype
@re sinta(a7
string filetype* string filename-

*ntoarce tipul fiierului specificat prin filename dac acesta e(ist) Ialorile posibile sunt7 "i"o, c-ar, dir, 4locF, linF, "ile i unFno&n) *n ca+ de eroare ntoarce <@$08)

"open
@re sinta(a7
int fopen* string filename$ string mode K$ int #se_incl#de_pathL-

<uncia deschide un fiier sau un A;$) *n ca+ul deschiderii unui A;$ se stabilete o cone(iune ctre serverul Beb specificat) *n ca+ul unui fiier obinuit acesta este cutat n sistemul propriu de fiiere i deschis) 5ac deschiderea euea+ funcia returnea+ <@$08) @rgumentul mode poate avea una din urmtoarele valori7

VrV 5eschide un fiier numai pentru citire plasnd indicatorul de fiier la nceputul acestuiaL

VrEV 5eschide un fiier pentru citire i scriere plasnd indicatorul de fiier la nceputul acestuiaL

V&V 5eschide un fiier numai pentru scriere, plasea+ indicatorul de fiier la nceputul acestuia i trunchea+ fiierul la lungimea .) 5ac fiierul nu e(ist ateapt s fie creatL

V&EV 5eschide un fiier pentru citire i scriere, plasea+ indicatorul de fiier la nceputul acestuia i trunchea+ fiierul la lungimea .) 5ac fiierul nu e(ist ateapt s fie creatL

VaV 5eschide un fiier numai pentru scriere ,adugare/ i plasea+ pointer%ul de fiier la sfritul acestuia) 5ac fiierul nu e(ist ateapt s fie creatL

VaEV 5eschide un fiier pentru citire i scriere ,adugare/ i plasea+ pointer%ul de fiier la sfritul acestuia) 5ac fiierul nu e(ist ateapt s fie creat) ?3

@rgumentul mode poate conine N4N) @ceast opiune este util n sistemele care fac diferena ntre fiierele binare i fiierele te(t) 5ac nu este necesar, respectivul caracter va fi ignorat) 5ac dorii ca fiierul s fie cutat n calea specificata ,pat(/, folosii al treilea parametru setat cu G=G) 8(emplu7
>fp >fp >fp >fp = = = = fopen* fopen* fopen* fopen* "/home/rasm#s/file.txt"$ "r"-( "/home/rasm#s/file.gif"$ "wb"-( "http://www.php.net/"$ "r"-( "ftp://#ser:passwordaexample.com/"$ "w"-(

"passt-ru
@re sinta(a7
int fpassthr#* int fp-

<uncia citete fiierul fp pna la 84< i afiea+ re+ultatul la ieirea standard) *n ca+ul unei erori funcia returnea+ <@$08) Iariabila fp trebuie s indice un fiier valid, adic un fiier deschis cu "open(), popen() sau "socFopen()) 5up citire funcia nchide fiierul)

"puts
@re sinta(a7
int fp#ts* int fp$ string str K$ int lengthL-

<uncia scrie irul string n fiierul fp n ntregime ,dac argumentul lengt( lipsete/ sau numai lengt( octei din acesta) "puts() este un alias pentru "&rite() i este identic cu aceasta)

"read
@re sinta(a7
string fread* int fp$ int length-

<uncia citete cel mult lengt( octei din fiierul binar fp) Citirea se ncheie cnd s%au citit lengt( octei sau 84<) 8(emplu7
/; +ite]te conYin#t#l #n#i fi]ier `ntr5#n ]ir ;/ >filename = "/tmp/something.txt"( >fd = fopen* >filename$ "r"-( >contents = fread* >fd$ filesi9e* >filename--( fclose* >fd-(

"scan"
@re sinta(a7
mixed fscanf* int fp$ string format K$ string /ar)...L-

<uncia citete informaiile din fiierul indicat de fp i interpretea+ aceste informaii conform formatului specificat prin parametrul format) 5ac funcia primete doar doi parametri valorile anali+ate vor fi returnate ca un tablou, altfel funcia va returna numrul valorilor asignate) 'arametrii opionali trebuie transmii prin referin) 8(emplu7
>fp = fopen* "#sers.txt"$ "r"-( while* >#serinfo = fscanf* >fp$ "8s,t8s,t8s,n"-F list* >name$ >age$ >profession- = >#serinfo( //... prel#crea9X /alorile J fclose* >fp-(

"seeF
@re sinta(a7 ?-

int fseeZ* int fp$ int offset K$ int whenceL-

<uncia setea+ po+iia indicatorului de fiier n fiierul indicat de fp) 9oua po+iie, msurat n octei faa de nceputul fiierului se obine adugnd valoarea offset la po+iia specificat prin argumentul 5(ence) @ceste valori sunt definite astfel7

1EEW.1ET 0etea+ po+iia indicatorulului de fiier la offset b3tes fa de nceputul fiieruluiL

1EEW. LR 0etea+ po+iia indicatorului de fiier la offset b3tes fa de po+iia curent ,po+iia curent plus offset/L

1EEW.E*I 0etea+ po+iia indicatorului de fiier la offset b3tes fa de sfritul fiierului ,sfritul fiierului plus offset/)

5ac argumentul 5(ence nu este specificat se consider a fi 1EEW.1ET) *n ca+ de succes funcia returnea+ ., altfel returnea+ %=) "recerea peste 84< nu este considerat eroare)

"tell
@re sinta(a7
int ftell* int fp-

<uncia returnea+ po+iia curent a indicatorului de fiier asociat fiierului referit prin fp) *n ca+ de eroare ntoarce <@$08) Iariabila fp trebuie s indice un fiier valid, adic un fiier deschis cu "open() sau popen())

"truncate
@re sinta(a7
int ftr#ncate* int fp$ int si9e-

<uncia trunchea+a fiierul la lungimea specificat prin si.e) *n ca+ de succes returnea+ ";A8 i <@$08 n ca+ contrar)

"&rite
@re sinta(a7
int fwrite* int fp$ string string K$ int lengthL-

<uncia scrie coninutul argumentului string n fiierul indicat de fp) 5ac argumentul lengt( este preci+at scrierea se oprete dup lengt( octei sau dac irul string s%a terminat)

is.dir
@re sinta(a7
bool is_dir* string filename-

*ntoarce ";A8 dac filename e(ist i este un director)

is."ile
@re sinta(a7
bool is_file* string filename-

*ntoarce ";A8 dac filename e(ist i este un fiier obinuit)

is.executa4le
?D

@re sinta(a7
bool is_file* string filename-

*ntoarce ";A8 dac filename e(ist i este e(ecutabil)

is.linF
@re sinta(a7
bool is_linZ* string filename-

*ntoarce ";A8 dac filename e(ist i este un linJ simbolic)

is.reada4le
@re sinta(a7
bool is_readable* string filename-

*ntoarce ";A8 dac filename e(ist i poate fi citit)

is.&ritea4le
@re sinta(a7
bool is_writeable* string filename-

*ntoarce ";A8 dac filename e(ist i poate fi scris)

linF
@re sinta(a7
int linZ* string target$ string linZ-

Crea+ un linJ hard) *ot<7 aceast funcie nu este disponibil n sistemele Bindo6s)

mFdir
@re sinta(a7
int mZdir* string pathname$ int mode-

Crea+ directorul specificat de pat(name) *ntoarce ";A8 n ca+ de succes i <@$08 n ca+ contrar)

pclose
@re sinta(a7
int pclose *int fp-

*nchide fiierul indicat de fp) Iariabila fp trebuie s indice un fiier valid care a fost deschis cu popen() )

popen
@re sinta(a7
int popen* string command$ string mode-

5eschide un pipe ctre un proces e(ecutat conform comen+ii dat prin argumentul command) <uncia ntoarce identificatorul fiierului deschis, la fel ca "open(), doar c este unidirecional ,poate fi folsit doar pentru citire sau doa r pentru scriere/ i trebuie nchis cu pclose())

read"ile
@re sinta(a7
int readfile* string filename K$ int #se_incl#de_pathL-

?6

Citete coninutul fiierului filename i l tiprete la ieirea standard) *n ca+ de succes ntoarce numrul de octei citii din fiier i <@$08 n ca+ de eec) 5ac dorii ca fiierul s fie cutat n calea specificat prin pat( al doilea parametru va fi setat cu G=G)

rename
@re sinta(a7
int rename* string oldname$ string newname-

;edenumete un fiier schimbndu%i numele din oldname n ne5name) ;eturnea+ ";A8 n ca+ de succes i <@$08 n ca+ de eec)

rmdir
@re sinta(a7
int rmdir* string dirname-

Yterge directorul dirname numai dac acesta este gol, iar n ca+ de eroare ntoarce .)

unlinF
@re sinta(a7
int #nlinZ* string filename-

Yterge fiierul filename i returnea+ . sau <@$08 n ca+ de eroare) *ot<7 funcia nu este disponibil n sistemele Bindo6s)

c6ii pentru ta4louri


@ceste funcii v permit s gestionai tablourile n diferite moduri) "ablourile sunt eseniale pentru memorarea, gestionarea i operarea cu mulimi de variabile) '!' permite folosirea tablourilor uni i multidimensionale)

array
@re sinta(a7
array array* Kmixed... L-

Crea+ i ntoarce un tablou de parametri) *ot<7 array() este un constructor de limba& utili+at pentru a repre+enta tablouri i nu o funcie obinuit) 0inta(a inde: ;B valori, separat prin virgul, definete inde(ul i valorile) nde(ul poate fi de tip ir sau numeric) Cnd indicele este omis, un inde( ntreg este automat produs ncepnd de la .) 5ac inde(ul este un ntreg, inde(ul urmtor produs va fi inde(ul ntreg mai mare cu =) 9otai c atunci cnd se definesc doi indeci identici cu valori diferite, ultima valoare o suprascrie pe prima) Armtorul e(emplu demonstrea+ cum se crea+ un tablou bidimensional, cum se specific cheia pentru un tablou asociativ i cum sar i continu indicii numerici din tablou7
>fr#its = array* "apple"-$ -( "fr#its" => array* "a" => "orange"$ "b" => "bannana"$ "c" =>

"n#mbers" => array* )$ 2$ 3$ 7$ O$ B-$ "holes" => array* "first"$ O => "second"$ "third"-

0uprascrierea indicilor7
>array = array* )$ )$ )$ )$ )$ A => )$ 7 => )$ )N$ 3 => )3-( print_r* >array-(

Coninutul este7
array* K@L => )$ K)L => )$ K2L => )$ K3L => )3$ K7L => )$ KAL => )$ KNL => )N-

??

9otai c indicele 3 este definit de dou ori i ine valoarea sa final, =3) nde(ul - este definit dup inde(ul > i inde(ul urmtor devine C ,pentru a estima =C/, de vreme ce indicele cel mai mare era >) Armtorul e(emplu crea+ un tablou cu o ba+ pe =)
>primele_3_l#ni = array* ) => Gian#arieG$ Gfebr#arieG$ GmartieG-( print_r* >primele_3_l#ni-(

"abloul )primeleA&Aluni va conine7


array* K)L => Gian#arieG$ K2L => Gfebr#arieG$ K3L => GmartieG-

array.count.5alues
@re sinta(a7
array array_co#nt_/al#es* array inp#t-

<uncia returnea+ un tablou folosind valorile din tabloul de intrare, input, drept chei i frecvena lor drept valori) 8(emplu7
>array = array* )$ "sal#t"$ )$ "moneda"$ "sal#t"-( array_co#nt_/al#es* array-( // \estit#e array* ) => 2$ "sal#t" => 2$ "moneda" => )-

array.di""
@re sinta(a7
array array_diff* array array)$ array array2 K$ array ...L-

<uncia returnea+ un tablou care conine toate valorile tabloului arra-6 care nu sunt pre+ente n nici unul din celelalte argumenteL cheile sunt pstrate) 8(emplu7
>array) = array* "a" => "green"$ "red"$ "bl#e"-( >array2 = array* "b" => "green"$ "yellow"$ "red"-( >res#lt = array_diff* >array)$ >array2-( // >res#lt /a repre9enta array* "bl#e"-

array.intersect
@re sinta(a7
array array_intersect* array array)$ array array2 K$ array ...L-

<uncia returnea+ un tablou coninnd toate valorile lui arra-6 care sunt pre+ente n toate celelalte argumenteL cheile sunt pstrate) 8(emplu7
>array) = array* "a" = > "/ert"$ "ro#ge"$ "ble#"-( >array2 = array * "b" = > "/ert"$ "Ea#ne"$ "ro#ge"-( >res#lt = array_intersect* >array)$ >array2-( // >res#lt /a repre9enta array* "a" => "/ert"$ "ro#ge"-(

array.Feys
@re sinta(a7
array array_Zeys* array inp#t K$ mixed search_/al#eL-

<uncia returnea+ cheile ,numerice sau iruri de caractere/ ale tabloului input) 5ac argumentul searc(Avalue este specificat, atunci doar cheile corespun+toare acestei valori sunt restituite) @ltfel se restituie toate cheile) 8(emplu7
>array = array* @ => )@@$ "color" => "red"-( array_Zeys * >array-( // \estit#e array* @$ "color"-

?>

>array = array* "bl#e"$ "red"$ "green"$ "bl#e"$ "bl#e"-( array_Zeys * >array$ "bl#e"-( // \estit#e array* @$ 3$ 7-

array.merge
@re sinta(a7
array array_merge* array array)$ array array2 K$ array ...L-

<uncia concatenea+ elementele a dou sau mai multe tablouri astfel nct elementele unui tablou se adaug la sfritul tabloului precedent) ;eturnea+ tabloul obinut) 5ac tablourile de intrare au aceleai chei tip ir de caractere, atunci ultima valoare a respectivei chei va fi scris peste cea precedent) 5ac, tablourile au chei numerice identice, ultima valoare nu va suprascrie valoarea original, dar va fi adaugat) 8(emplu7
>array) = array * "color" => "red"$ 2$ 7-( >array2 = array * "a"$ "b"$ "color" => "green"$ "shape" => "trape9oid"$ 7-( array_merge* >array)$ >array2-(

"abloul obinut este7


array* "color" => "green"$ 2$ 7$ "a"$ "b"$ "shape" => "trape9oid"$ 7-

array.multisort
@re sinta(a7
bool array_m#ltisort* array ar) K$ mixed arg K$ mixed ... K$ array ...LLL-

<uncia poate fi utili+at pentru a sorta mai multe tablouri odat sau un singur tablou multidimensional n funcie de una sau mai multe dimensiuni ,criterii de sortare/) 0ortarea nu afectea+ cheile asociative) "ablourile de intrare sunt tratate drept coloanele unui tabel care se sortea+a pe linii) 'rimul tablou repre+int criteriul primar de sortare) Ialorile din respectivul tablou ,situate pe linii/ se compar ntre ele i dac sunt egale se sortea+ conform celui de al doilea tablou etc) 0tructura argumentelor acestei funcii este puin neobinuit, dar fle(ibil) 'rimul argument trebuie s fie obligatoriu un tablou) *n continuare, fiecare argument este fie un tablou fie un criteriu de sortare) Criterii de sortare dup ordine7

13RT.A1 4rdonare n ordine cresctoareL

13RT.IE1 4rdonare n ordine descresctoare)

Criterii de sortare dup tip7

13RT.REJL@AR Comparar valorile normalL

13RT.*L>ERI Comparar valorile numericL

13RT.1TRI*J Comparar valorile ca iruri de caractere)

9u se pot specifica dou criterii de acelai tip dup un argument) <uncia ntoarce ";A8 dac sortarea a reuit i <@$08 n ca+ contrar) ?C

8(emplu ,sortarea a mai multor tablouri/7


>ar) = array* ")@"$ )@@$ )@@$ "a"-( >ar2 = array* )$ 3$ "2"$ )-( array_m#ltisort* >ar)$ >ar2-(

*n acest e(emplu, dup sortare, primul tablou conine =., GaG, =..,=..) @l doilea conine =, =, F, G3G) ntrarea n al doilea tablou corespunde intrrilor identice n primul tablou care au fost deasemenea ordonate) 8(emplu ,sortarea tablourilor multidimensionale/7
>ar = array* array* ")@"$ )@@$ )@@$ "a"-$ array* )$ 3$ "2"$ )--( array_m#ltisort* >arK@L$ "C\3_4"+$ "C\3_"3\D?S$ >arK)L$ "C\3_?<1 \D+$ "C\3_. "+-(

*n acest e(emplu, dup sortare, primul tablou va conine =., =.., =.., GaG ,a fost sortat ca iruri de caractere n ordine cresctoare/, iar al doilea va conine =, 3, GFG, = ,sortat ca numere n ordine descresctoare/)

array.pad
@re sinta(a7
array array_pad* array inp#t$ int pad_si9e$ mixed pad_/al#e-

<uncia returnea+ o copie a tabloului input avnd dimensiunea specificat prin padAsi.e i umplut cu valoarea padAvalue) 5aca argumentul padAsi.e este po+itiv tabloul este umplut la dreapta, iar dac este negativ este umplut la stnga) 5ac valoarea absolut a argumentului padAsi.e este mai mic sau egal cu lungimea tabloului input umplerea nu are loc) 8(emplu7
>inp#t = array* )2$ )@$ N-( >res#lt = array_pad* >inp#t$ O$ @-( @>res#lt = array_pad* >inp#t$ 5R$ 5)-( )2$ )@$ N>res#lt = array_pad* >inp#t$ 2$ "noop"-( // 3ablo#l >res#lt conYine *)2$ )@$ N$ @$ // 3ablo#l >res#lt conYine *5)$ 5)$ 5)$ 5)$ // <mplerea n# are loc

array.pop
@re sinta(a7
mixed array_pop* array array-

<uncia e(trage i returnea+ ultimul element din tabloul arra- i micorea+ dimensiunea tabloului cu o unitate) 8(emplu7
>my_list = array* "orange"$ "apple"$ "raspberry"-( >fr#it = array_pop* >my_list-( /; bn acest moment >my_list are doar 2 elemente: "orange" ]i "apple"( >fr#it are "raspberry" ;/

array.pus@re sinta(a7
int array_p#sh* array array$ mixed /ar K$ mixed ...L-

<uncia tratea+ tabloul ca pe o coad i introduce valorile primite ca argumente la sfritul tabloului) $ungimea tabloului crete cu numrul de variabile introduse) @re acelai efect ca i instruciunea7
>arrayKL = >/ar(

repetat pentru fiecare )var) 8(emplu7


>U#e#e = array* )$ 2-( array_p#sh* >U#e#e$ ":"$ 3-( // 3ablo#l >U#e#e /a conYine: )$ 2$ ":" ]i 3

>.

<uncia returnea+ noul numr de elemente din tablou)

array.re5erse
@re sinta(a7
array array_re/ers* array array K$ bool preser/e_ZeysL-

<uncia returnea+ un nou tablou care conine elementele tabloului arra- n ordine invers) 8(emplu7
>inp#t = array* "php"$ 7.@$ array* "green"$ "red"--( >res#lt = array_re/erse* >inp#t-( // 3ablo#l >res#lt /a conYine * array* "green"$ "red"-$ 7.@$ "php"-

*ot<7 funcia nu modifi cheile tabloului dac argumentul preserveAke- este ";A8)

array.s-i"t
@re sinta(a7
mixed array_shift* array array-

<uncia e(trage i returnea+ primul element din tabloul arra-, mut elementele cu o po+iie spre stnga i reduce dimensiunea tabloului cu =) 8(emplu7
>args = array* "5/"$ "5f"-( >opt = array_shift* >args-( /; 3ablo#l >argc /a conYine element#l "5f"( /ariabila >opt /a fi "5/" ;/

array.slice
@re sinta(a7
array array_splice* array inp#t$ int offset K$ int length K$ array replacementLL-

<uncia e(trage o poriune dintr%un tablouL returnea+ secvena elementelor din argumentul input specificat prin parametrii offset i lengt() 5ac offset este po+itiv, secvena va ncepe la acea po+iie din tablou) 5ac offsset este negativ, secvena va ncepe la aceea po+iie fa de sfritul tabloului) 5ac lengt( este preci+at i este po+itiv, atunci secvena va avea lengt( elemente) 5ac lengt( este preci+at i este negativ, atunci secvena se va opri la lengt( elemente fa de sfritul tabloului) 5ac lengt( lipsete secvena va conine toate elementele ncepnd de la po+iia offset pn la sfritul tabloului) 8(emplu7
>inp#t = array* "a"$ "b"$ "c"$ >o#tp#t = array_slice* >inp#t$ >o#tp#t = array_slice* >inp#t$ >o#tp#t = array_slice* >inp#t$ >o#tp#t = array_slice* >inp#t$ "d"$ "e"-( 2-( // 2$ 5)-( // 52$ )-( // @$ 3-( // \et#rnea9X \et#rnea9X \et#rnea9X \et#rnea9X "c"$ "d" ]i "e" "c" ]i "d" "d" "a"$ "b" ]i "c"

array.sum
@re sinta(a7
mixed array_s#m* array arr-

<uncia calculea+ i returnea+ suma elementelor din tabloul arr ca un numr ntreg sau float)

array.uniXue
@re sinta(a7
array array_#niU#e* array array-

>=

<uncia elimin valorile duplicate din tablouL returnea+ un tablou nou care nu conine valori duplicateL cheile nu se modific) 8(emplu7
>inp#t = array* "a" => "green"$ "red"$ "b" => "green"$ "bl#e"$ "red"-( >res#lt = array_#niU#e* >inp#t-( // 3ablo#l >res#lt conYine * "a" => "green"$ "red"$ "bl#e"-

array.uns-i"t
@re sinta(a7
int array_#nshift* array array$ mixed /ar K$ mixed ...L-

<uncia inserea+ valorile specificate n list la nceputul tabloului arra- n aceeai ordine) Ialorile iniiale sunt deplasate spre dreapta i dimensiunea tabloului crete cu numrul valorilor introduseL returnea+ noua dimensiune a tabloului) 8(emplu7
>stacZ = array* "p)"$ "p3"-( array_#nshift* >stacZ$ "p7"$ "pO"$ "pB"-( // 3ablo#l >stacZ /a conYine: "p7"$ "pO"$ "pB"$ "p)" ]i "p3"

array.5alues
@re sinta(a7
array array_/al#es* array inp#t-

<uncia returnea+ toate valorile din tabloul input) 8(emplu7


>tshirt = array* "si9e" => "02"$ "color" => "gold"-( array_/al#es* >tshirt-( // \et#rnea9X array* "02"$ "gold"-

arsort
@re sinta(a7
/oid arsort* array array K$ int sort_flagsL-

<uncia sortea+ descresctor tabloul arra- astfel nct legturile dintre indicii asociativi i valorile indicate de ctre acetia s se menin) Iei folosi aceast funcie pentru a sorta tablouri asociative n care ordinea actual a elementelor este important) 8(emplu7
>fr#its = array* "d"=>"lemon"$ "a"=>"orange"$ "b"=>"banana"$ "c"=>"apple"-( arsort* >fr#its-( reset* >fr#its-( while* list* >Zey$ >/al- = each* >fr#its-F echo ">Zey = >/al,n"( J

0e va obine7
fr#itsKaL fr#itsKdL fr#itsKbL fr#itsKcL = = = = orange lemon banana apple

<ructele au fost sortate n ordine alfabetic descresctoare pstrnd legtura dintre indec?f3D=Lii asociativi i elemente)

asort
@re sinta(a7
/oid asort* array array K$ int sort_flagsL--

>F

<uncia sortea+ cresctor tabloul arra- astfel nct legturile dintre indicii asociativi i valorile indicate de ctre acetia s se menin) Iei folosi aceast funcie pentru a sorta tablouri asociative n care ordinea actual a elementelor este important) 8(emplu7
>fr#its = array* "d"=>"lemon"$ "a"=>"orange"$ "b"=>"banana"$ "c"=>"apple"-( arsort* >fr#its-( reset* >fr#its-( while* list* >Zey$ >/al- = each* >fr#its-F echo ">Zey = >/al,n"( J

<ructele au fost aran&ate n ordine alfabetic pstrnd legtura dintre indec?f3D=Lii asociativi i elemente) 8(emplul de mai sus va furni+a re+ultatul7
fr#itsKcL fr#itsKbL fr#itsKdL fr#itsKaL = = = = apple banana lemon orange

count
@re sinta(a7
int co#nt* mixed /ar-

<uncia returnea+ numrul de elemente din argumentul var, care este de obicei un tablou) *ntoarce = dac variabila nu este un tablou i . dac variabila nu a fost iniiali+at) 8(emplu7
>a K@L = )( >a K)L = 3( >a K2L = O( >res#lt = co#nt* >a-(

// >res#lt == 3

eac@re sinta(a7
array each* array array-

<uncia returnea+ cheia curent i valoarea corespun+toare din tabloul arra- i avansea+ pointerul tabloului) @ceast pereche de valori este returnat ntr%un tablou cu - elemente, cu cheile G, 6, ke- i value) 8lementele . i ke- conin numele elementului din tablou, iar 6 i value conin valoarea) 5ac s%a a&uns la sfritul tabloului funcia eac-() returnea+ <@$08) 8(emplu7
>my_list = array* "bob"$ "fred"$ "E#ssi"$ "Eo#ni"$ "egon"$ "marliese"-( >bar = each* >my_list-(

Iariabila )bar va conine conine urmtoarele perechi ke-Evalue7


@ => @ ) => GbobG Zey => @ /al#e => GbobG >my_list = array* "\obert" => "Iob"$ ""eppo" => ""epi"-( >bar = each* >my_list-(

Iariabila )bar va conine conine urmtoarele perechi ke-Evalue7


@ ) Zey /al#e => => => => G\obertG GIobG G\obertG GIobG

<uncia eac-() este utili+at n con&uctur cu funcia list() pentru a traversa un tablou, de e(emplu GHTTP.P31T.DAR17 >3

echo "Malorile trasmise /ia %C"3:<br>"( reset* >&33%_%C"3_M4\"-( while* list* >Zey$ >/al- = each* >&33%_%C"3_M4\"-F echo ">Zey => >/al<br>"( J

end
@re sinta(a7
end* array array-

<uncia po+iionea+ poinerul intern al tabloului pe ultimul element)

in.array
@re sinta(a7
bool in_array* mixed needle$ array haystacZ-

<uncia caut valoarea needl n tabloul (a-stack i ntoarce ";A8 dac o gsete i <@$08 n ca+ contrar) 8(emplu7
>os = array* "1ac"$ "?3"$ "2in#x"$ "C"/2"-( if* in_array* "2in#x"$ >os-print "Sot 2in#x"(

Fey
@re sinta(a7
mixed Zey* array array-

<uncia ntoarce indicele elementului corespun+tor po+iiei curente n tablou)

list
@re sinta(a7
/oid list*...-

9u este o funcie reala ci un constructor de limba&) 8ste utili+at pentru a asigna o list de variabile printr% o singur operaie) 8(emplu7
Ql(table> <tr> <th>?#mele angaEat#l#i</th> <th>"alari#</th> </tr> <!php >res#lt = mysUl* >conn$ "" 2 +3 id$ name$ salary 6\C1 employees"-( while* list* >id$ >name$ >salary- = mysUl_fetch_now* >res#lt-F print* " <tr>,n" . " <td><a href=,"info.php!id=>id,">>name</a></td>,n" . " <td>>salari#</td>,n" . " </tr>,n"-( J !> </table>

natsort
@re sinta(a7
/oid natsort* array array-

@ceast funcie implementea+ un algoritm de sortare care ordonea+ alfanumeric irurile, aa cum ar proceda un operator uman) @ceast ordonare se numete ordonare natural) 5iferena dintre acest >-

algoritm i modul u+ual n care un calculator sortea+ irurile % utili+nd de e(emplu sort() % reiese din e(emplul urmator7
>array) = >array2 = array* "img)2.png"$ "img)@.png"$ "img2.png"$ "img).png"-( sort* >array)-( echo ""tandard sorting,n"( print_r* >array)-( natsort* >array2-( echo ",n?at#ral order sorting,n"( print_r* >array2-(

Codul anterior generea+ urm?3FDCLtoarea ieire7


"tandard sorting 4rray * K@L => img).png K)L => img)@.png K2L => img)2.png K3L => img2.png ?at#ral 4rray * K3L K2L K)L K@L order sorting => => => => img).png img2.png img)@.png img)2.png

natcasesort
@re sinta(a7
/oid natcasesort* array array-

@ceast funcie implementea+ un algoritm case%insen+itiv de sortare care ordonea+ alfanumeric irurile, aa cum ar proceda un operator uman)

next
@re sinta(a7
mixed next* array array-

<uncia avansea+ pointer%ul intern la urmtorul element din tablou care este returnat drept re+ultat) 5ac tabloul nu mai are elemente se returnea+ <@$08)

pre5
@re sinta(a7
mixed pre/* array array-

<uncia devansea+ pointer%ul intern cu o po+iie i returnea+ elementul respectiv) 5ac tabloul nu mai are elemente se returnea+ <@$08)

range
@re sinta(a7
array range* int low$ int high-

<uncia crea+ i returnea+ un tablou de ntregi cu valori cuprinse ntre lo5 i (ig(, inclusiv)

reset
@re sinta(a7
mixed reset* array array-

>D

<uncia po+iionea+a pointerul intern al unui tablou pe primul element al acestuia i returnea+ primul element din tablou)

rsort
@re sinta(a7
/oid rsort* array array K$ int sort_flagsL-

<uncia sortea+ un tablou n ordine descresctoare) 8(emplu7


>fr#its = array* "lemon"$ "orange"$ "banana"$ "apple"-( rsort* >fr#its-( reset* >fr#its-( while* list*>Zey$ >/al- = each* >fr#its-F echo ">Zey 5> >/al,n"( J

Codul de mai sus afiea+7


fr#itsK@L fr#itsK)L fr#itsK2L fr#itsK3L = = = = orange lemon banana apple

siAeo"
@re sinta(a7
int si9eof* array array-

<uncia returnea+ numrul de elemente dintr%un tablou)

sort
@re sinta(a7
/oid sort* array array K$ int sort_flagsL-L-

<uncia sortea+ elementele unuii tablou n ordine cresctoare) 8(emplu7


>fr#its = array* "lemon"$ "orange"$ "banana"$ "apple"-( sort* >fr#its-( reset* >fr#its-( while* list*>Zey$ >/al- = each* >fr#its-F echo ">Zey 5> >/al,n"( J

Codul de mai sus afiea+7


fr#itsK3L fr#itsK2L fr#itsK)L fr#itsK@L = = = = apple banana lemon orange

'arametrul sortAflags poate fi utili+at pentru a modifica modul de sortare, fiind disponibile urmtoarele valori7

13RT.REJL@AR Comparar valorile normalL

13RT.*L>ERI Comparar valorile numericL

13RT.1TRI*J >6

Comparar valorile ca iruri de caractere)

III. F&n$%ii $& #4 !#sii !#1&la%# JP#!l-C"' a%i(l#K


0inta(a pentru pattern%ul folosit n aceste funcii este asemntoare cu cea din functiile 'erl) 4rice e(presie trebuie delimitat de F aceleai caractere, de e(emplu slash ,E/) Ca delimtatori pot fi folosii orice caracter n afara de cele alfanumerice si bacJslash ,K/) 5ac caracterul delimitator este folosit n e(presie el trebuie securi+at ,precedat de bacJslash/) 5up caracterul delimitator de sfrit pot aprea modiifcatorii care fac potrivirea) Ie+i #odificatori pattern Exemplu 8# Exemple de pattern 5alide

EbKEK6XTE V,Kd]3^/%KdXV0m E`,di/php[3-\E EhrefQN,)P/N % lipsete delimitatorul de sfrit EK6XKsPK6XEH % modificator necunoscut NHN =%Kd3%Kd3%Kd-V % lipsete delimitatorul de nceput

Exemplu $# Exemple de pattern in5alide

*ot<: 8(presiile regulate 'erl%compatibile e(ist in '!' - i n '!' 3).)C i versiunile ulterioare) uprins

pregOmatch % Caut dup o e(presie regulat pregOmatchOall % Caut toate potrivirile dup o e(presie regulat pregOreplace % Caut dup o e(presie regulat i nlocuiete pregOsplit % 5esparte un string dup o e(presie regulat pregOUuote % 0ecuri+ea+ caracterele speciale din e(presii regulate pregOgrep % ;eturnea+ un tablou cu potrivirile unei e(presii regulate #odificatori pattern % 5escrie modificatorii pentru pattern in e(presii regulate 0inta(a pattern % 5escrie sinta(a e(presiilor regulate 'erl%Compatibile

preg.matc,'!'3 TQ 3).)C, '!'- / 5escriere int preg_match 2string pattern" string subHect *" arra- matc(es+3 Caut n subHect potriviri pentru e(presia regulat din pattern) 5ac apare si tabloul matc(es, atunci re+ultatul cutrii este stocat n acest tablou) Zmatches[.\ va conine subirul care se potrivete ntregului pattern, Zmatches[=\ va avea subsirul care se potrivete primului subpattern dintre parante+e, i)a)m)d) *ntoarce true dac s%a gsit un subir din subHect ce se potrivete pattern dat, sau false n ca+ contrar) 8(emplu =) Caut subirul GphpG
// caracter#l "i" de d#pX pattern indicX o cX#tare case5insensiti/e if *preg_match *"/php/i"$ "%&% is the web scripting lang#age of choice."-- F

>?

print "4 match was fo#nd."( J else F print "4 match was not fo#nd."( J

8(emplu F) Caut cuvntul G6ebG


// sir#l ,b din pattern indicX marginea #n#i c#/[nt$ deci `ntreg#l c#/[nt#l // "web" este cX#tat$ ]i n# pXrYi din el de exempl# "webbing" sa# "cobweb" if *preg_match *"/,bweb,b/i"$ "%&% is the web scripting lang#age of choice."-- F print "4 match was fo#nd."( J else F print "4 match was not fo#nd."( J if *preg_match *"/,bweb,b/i"$ "%&% is the website scripting lang#age of choice."-- F print "4 match was fo#nd."( J else F print "4 match was not fo#nd."( J

8(emplu 3) @fl domeniul dintr%o adres A;$


preg_match*"/c*.;-*Kc,.L:,.Kc,.L:-*,/.;-!/<"$ "http://www.php.net/index.html"$ >matches-( // afi]ea9X s#bsir#l ce s5a potri/it cel#i de5al 25lea s#bpattern dintre parante9e echo "domain name is: ".>matchesK2L.",n"(

@cest e(emplu v%a afia7


domain name is: php.net

preg.matc-.all
,'!'3 TQ 3).)C, '!'- / 5escriere int preg_match_all 2string pattern" string subHect" arra- matc(es *" int order+3 Caut n subHect toate potrivirile pentru e(presia regulat din pattern i le pune n matc(es n ordinea specificat de utili+ator) 5up ce prima potrivire a fost gsit, urmatoarele cutri ncep de la sfritul ultimei potriviri) order poate fi7

';8GO'@""8;9O4;58; Ia re+ulta astfel, Zmatches[.\ este un tablou cu potrivirile pentru ntregul pattern, Zmatches[=\ este un tablou cu subiruri potrivite primului subpatern dinte parante+e, s)a)m)d)
preg_match_all *"d<Kc>L:>*.;-L:>d<"$ "<b>example: </b><di/ align=left>this is a test</di/>"$ >o#t$ %\ S_%433 \?_C\. \-( print >o#tK@LK@L."$ ".>o#tK@LK)L.",n"( print >o#tK)LK@L."$ ".>o#tK)LK)L.",n"

0e va afia7
<b>example: </b>$ <di/ align=left>this is a test</di/> example: $ this is a test

5eci, Zout[.\ conine un tablou de string care s%au potrivit ntregului pattern, i Zout[=\ conine un tablou cu siruri de caractere aflate ntre taguri)

';8GO08"O4;58; Ia re+ulta astfel, Zmatches[.\ este un tablou cu primul set de potriviri, Zmatches[=\ este un tablou cu al doilea set de potriviri, s)a)m)d)
preg_match_all *"d<Kc>L:>*.;-</Kc>L:>d<"$ "<b>example: </b><di/ align=left>this is a test</di/>"$

>>

>o#t$ %\ S_" 3_C\. \-( print >o#tK@LK@L."$ ".>o#tK@LK)L.",n"( print >o#tK)LK@L."$ ".>o#tK)LK)L.",n"

0e va afia7
<b>example: </b>$ example: <di/ align=left>this is a test</di/>$ this is a test

*n acest ca+, Zmatches[.\ este primul set de potriviri, i Zmatches[.\[.\ are irul potrivit ntregului pattern, Zmatches[.\[=\ are irul potrivit primului subpattern )a)m)d) 0imilar, n Zmatches[=\ sunt al doilea set de potriviri, etc) 5aca order nu este specificat, implicit este ';8GO'@""8;9O4;58;) ;eturnea+ numrul potrivirilor pentru ntregul pattern, sau false dac nu s%a gsit nici o potrivire) 8(emplu =) @flarea tuturor nr de telefon dintr%un te(t)
preg_match_all *"/,*! *,dF3J-! ,-! *!*)- K,5,sL - ,dF3J5,dF7J/x"$ "+all OOO5)2)2 or )5A@@5OOO5)2)2"$ >phones-(

8(emplu F) @flarea tagurilor !"#$)


// sir#l ,,2 este #n exempl# de pre5referire. bnseamnX cX // treb#ie sX se potri/eascX c# al 25lea set de parante9e din // expresia reg#latX$ adicX *K,wL:- `n acest ca9. >html = "<b>bold text</b><a href=howdy.html>clicZ me</a> preg_match_all *"/*<*K,wL:-Kc>L;>-*.;-*<,/,,2>-/"$ >html$ >matches-( for *>i=@( >i< co#nt*>matchesK@L-( >i::- F echo "matched: ".>matchesK@LK>iL.",n"( echo "part ): ".>matchesK)LK>iL.",n"( echo "part 2: ".>matchesK3LK>iL.",n"( echo "part 3: ".>matchesK7LK>iL.",n,n"( J

@cest e(emplu v%a afia7


matched: <b>bold text</b> part ): <b> part 2: bold text part 3: </b> matched: <a href=howdy.html>clicZ me</a> part ): <a href=howdy.html> part 2: clicZ me part 3: </a>

preg.replace
,'!'3 TQ 3).)C, '!'- / 5escriere mi:ed preg_replace 2mi:ed pattern" mi:ed replacement" mi:ed subHect *" int limit+3 Caut n subHect potrivirile cu pattern i le nlociete cu replacement) 5ac apare si limit, atunci doar limit potriviri vor fi nlocuiteL dac nu apare sau este %=, atunci toate potrivirile sunt nlocuite) Replacement poate conine referine de forma KKn) <iecare astfel de referin va fi nlocuit cu te(tul capturat de al n%lea subpattern dintre parante+e) n poate lua valori ntre . i CC, i KK. se refer la te(tul potrivit ntregului pattern) 'arante+ele deschise sunt numrate de la stnga la dreapta,pornind de la =/ pentru a obtine numrul de subpattern%uri care capturea+ te(tul) 5ac nu se gsete nici o potrivire n subHect, atunci va fi returnat neschimbat) <iecare parametru din preg.replace() poate fi un tablou) >C

5ac subHect este un tablou, atunci cutarea i nlocuirea se fac pe fiecare element din tablou, iar re+ultatul este tot un tablou) 5ac pattern i replacement sunt tablouri, atunci preg.replace() ia o valoare din fiecare tablou i le folosete pentru a face cutarea i nlocuirea n subHect) 5ac replacement are mai putine valori dect pattern, atunci sirul vid este folosit pentru restul valorilor de nlocuire) 5ac pattern este un tablou i replacement este un string, atunci acest string este folosit pentru fiecare pattern) nvers nu ar avea sens) #odificatorul Ee face ca preg.replace() s trate+e paramentrul replacement ca un cod '!' dup ce s%a efectuat nlocuirea) ndicaie7 avei gri& ca replacement s fie un cod '!' valid, altfel '!' va da eroare la linia care contine preg.replace()) 8(emplu =) *nlocuire valori
>patterns = array *"/*)Nd2@,dF2J-5*,dF)$2J-5*,dF)$2J-/"$ "/c,s;F*,w:-J,s;=/"-( >replace = array *",,3/,,7/,,)"$ ">,,) ="-( print preg_replace *>patterns$ >replace$ "Fstart.ateJ = )NNN5O52R"-(

@cest e(emplu v%a afia7


>start.ate = O/2R/)NNN

8(emplu F) <olosirea modificatorului Ee


preg_replace *"/*<,/!-*,w:-*Kc>L;>-/e"$ "G,,)G.strto#pper*G,,2G-.G,,3G"$ >html_body-(

Codul de mai sus va scrie toate tagurile !"#$ cu litere mari) 8(emplu 3) Converteste !"#$ n te(t
// // // // >doc#ment /a contine #n doc#ment &312 4cest cod /a sterge toate tag#rile &312$ secti#ni Ea/ascript si spatii albe. Ma con/erti de asemenea #nele entitati &312 `n caracter#l care5l repre9inta.

>search = array *"GL;!>.;!Gsi"$ // "trip o#t Ea/ascript "G<K,/,'L;!Kc<>L;!>Gsi"$ // "trip o#t html tags "G*K,r,nL-K,sL:G"$ // "trip o#t white space "GQ*U#oted=37-(Gi"$ // \eplace html entities "GQ*ampd=3A-(Gi"$ "GQ*ltd=B@-(Gi"$ "GQ*gtd=B2-(Gi"$ "GQ*nbspd=)B@-(Gi"$ "GQ*iexcld=)B)-(Gi"$ "GQ*centd=)B2-(Gi"$ "GQ*po#ndd=)B3-(Gi"$ "GQ*copyd=)BN-(Gi"$ "GQ=*,d:-(Ge"-( // e/al#ate as php >replace = array *""$ ""$ ",,)"$ ",""$ "Q"$ "<"$ ">"$ " "$ chr*)B)-$ chr*)B2-$ chr*)B3-$ chr*)BN-$ "chr*,,)-"-( >text = preg_replace *>search$ >replace$ >doc#ment-(

preg.split
,'!'3 TQ 3).)C, '!'- / C.

5escriere arra- preg_split 2string pattern" string subHect *" int limit *" int flags++3 *ot<: 'arametrul flags a fost adugat n '!' - 2eta 3) *ntoarce ca valoare un tablou ce conine subiruri din subHect ce se potrivesc cu pattern) 5ac apare limit, atunci doar limit subiruri sunt returnate 5ac flags este ';8GO0'$ "O94O8#'"S atunci doar partile nevide vor fi prelucrate de preg.split()) 8(emplu =) @flarea prilor componente ale unui ir)
// `mparte fra9a `n c#/inte despXrYite de /irg#lX sa# spaYii albe$ // adicX " "$ ,r$ ,t$ ,n ]i ,f >Zeywords = preg_split *"/K,s$L:/"$ "hypertext lang#age$ programming"-(

preg.Xuote
,'!'3 TQ 3).)C, '!'- / 5escriere string preg_quote 2string str *" string delimiter+3 preg.Xuote pune n faa fiecrui caracter care face parte din sinta(a e(presiilor regulate un bacJslash) @ceasta este util cnd irul conine caractere speciale 5ac este specificat si parametrul opional delimiter, i acestuia i se va pune un bacJslash n fa) 8ste util pentru a securi+a i acest delimitator) Cel mai folosit delimitator este E Caracterele speciale din e(presiile regulate sunt7
. ,, : ; ! K c L > * - F J = ' < > d :

8(emplu =)
>Zeywords = ">7@ for a g3/7@@"( >Zeywords = preg_U#ote *>Zeywords$ "/"-( echo >Zeywords( // ret#rns ,>7@ for a g3,/7@@

8(emplu F) 0crie cu caractere italice un cuvnt dintr%un te(t


// Dn acest exempl#$ preg_U#ote*>word- este folosit // pentr# ca asterisc#rile *;- sa n# fie interpretate // de expresia reg#lata. >textbody = "3his booZ is ;/ery; diffic#lt to find."( >word = ";/ery;"( >textbody = preg_replace *"/".preg_U#ote*>word-."/"$ "<i>".>word."</i>"$ >textbody-(

preg.grep
,'!'3 TQ 3).)C, '!'- / 5escriere arra- preg_grep 2string pattern" arra- input3 preg.grep() returnea+ un tablou care are elemente din tabloul input care s%au potrivit cu pattern 8(emplu =) 8(emplu pregOgrep,/
// ret#rnea9a toate elementele din tablo# // care contin n#mere c# /irg#la >fl_array = preg_grep *"/c*,d:-!,.,d:>/"$ >array-(

C=

>. F&n$%ii $& #4 !#sii !#1&la%# JPOSII E4%#n2#2K


8(presiile regulate sunt folosite pentru prelucrarea irurilor de caractere) <unciile pentru e(presii regulate sunt7

ereg,/ eregOreplace,/ eregi,/ eregiOreplace,/ split,/ spliti,/

"oate funciile au ca prim argument o e(presie regulat) '!' folosete e(presiile regulate n formatul P31IY extended definit de '40 : =...3)F) 'entru o descriere complet a acestui format ve+i paginile de manual din directorul regex al '!') Comanda7 man /usr/local/src/regex/regex#R 8(emplu =) 8(emple de e(presii regulate
ereg *"abc"$ >string-( /; \et#rnea9a tr#e dacX "abc" este gXsit ori#nde `n >string. ;/ ereg *"cabc"$ >string-( /; \et#rnea9a tr#e dacX "abc" este gXsit la `ncep#t#l ]ir#l#i >string. ;/ ereg *"abc>"$ >string-( /; \et#rnea9a tr#e dacX "abc" este gXsit la sf[r]it#l ]ir#l#i >string. ;/ eregi *"*o9illa.K23Ld1"D .3-"$ >&33%_<" \_4S ?3-( /; \et#rnea9a tr#e dacX browser5#l client#l#i este ?etscape 2$ 3 sa# 1"D 3. ;/ ereg *"*KK:aln#m:LL:- *KK:aln#m:LL:- *KK:aln#m:LL:-"$ >string$>regs-( /; %#ne 3 c#/inte separate de spaYii `n >regsK)L$ >regsK2L ]i >regsK3L. ;/ >string = ereg_replace *"c"$ "<I\>"$ >string-( /; %#ne tag#l <I\> la `ncep#t#l ]ir#l#i >string. ;/ >string = ereg_replace *">"$ "<I\>"$ >string-( /; %#ne tag#l <I\> la `ncep#t#l sf[r]it#l ]ir#l#i >string. ;/ >string = ereg_replace *",n"$ ""$ >string-( /; eterge toate caracterele de linie no#X din >string. ;/

uprins

ereg % Caut o potrivire pentru o e(presie regulat eregOreplace % *nlocuiete o e(presie regulat eregi % Caut o potrivire pentru o e(presie regulat ,case insensitive/ eregiOreplace % *nlocuiete o e(presie regulat ,case insensitive/ split % *mparte un ir de caractere ntr%un tablou dup o e(presie regulat spliti % *mparte un ir de caractere ntr%un tablou dup o e(presie regulat ,case insensitive/ sUlOregcase % ;eturnea+ o e(presie regulat pentru o potrivire case insensitive CF

ereg
,'!'3, '!'- / 5escriere int ereg 2string pattern" string string *" arra- regs+3 Caut n string potriviri pentru e(presia regulat din pattern) 5ac sunt gsite potriviri pentru subirurile dintre parante+e din pattern, i tabloul regs apare ca argument n funcie, atunci potrivirile vor fi puse n acest tablou) Zregs[=\ va conine subirul potrivit pentru prima parante+, Zregs[F\ pentru a F%a, s)a)m)d) Zregs[.\ va conine o copie a irului string) 5ac ereg() gsete potriviri n orice ca+, Zregs va fi completat cu e(act =. elemente, chiar dac s%au potrivit mai multe sau mai puine de =. subiruri) 5ac nu s%a gsit nici o potrivire Zregs rmne eschimbat) Cutarea este case sensitive) ;eturnea+ true dac a fost gsit o potrivire n ir, sau false n ca+ contrar) Armtorul cod ia la intrare o dat calendaristic n format 04 ,aaaa%ll%++/ i o afiea+ n format ++)ll)aaaa 8(emplu =) 8(emplu ereg,/
if *ereg *"*K@5NLF7J-5*K@5NLF)$2J-5*K@5NLF)$2J-"$ >date$ >regs-- F echo ">regsK3L.>regsK2L.>regsK)L"( J else F echo "6ormat in/alid: >date"( J

ereg.replace
,'!'3 , '!'- / 5escriere string ereg_replace 2string pattern" string replacement" string string3 <uncia caut n string potriviri pentru pattern, apoi le nlocuiete cu replacement) 0tring%ul modificat este returnat) ,5ac nu se gsete nici o potrivire este returnat string%ul iniial)/ 5ac pattern conine subiruri ntre parente+e, replacement poate conine subiruri de forma IInum0r, care vor fi nlocuite cu te(tul care se potrivete cu al num0r%elea subir dintre parante+eL KK. va fi ntregul ir) 'ot fi folosite pn la C subiruri) 'arante+ele pot fi imbricate) 5ac nu este gsit nici o potrivire, string este returnat neschimbat) 5e e(emplu, urmtorul cod afiea+ G"his is a testG de 3 ori 8(emplu =) 8(emplu eregOreplace,/
>string = "3his is a test"( echo ereg_replace *" is"$ " was"$ >string-( echo ereg_replace *"* -is"$ ",,)was"$ >string-( echo ereg_replace *"** -is-"$ ",,2was"$ >string-(

@tenie la urmtorul lucru7 dac folosii un numr pentru te(tul de nlocuit, nu vei obine re+ultatul dorit) @ceasta deoarece ereg.replace() va interpreta numrul ca fiind codul unui caracter) 5e e(emplu7 8(emplu F) 8(emplu eregOreplace,/
<!php /; +od#l n# /a da re9#ltat#l a]teptat. ;/ >n#m = 7( >string = "3his string has fo#r words."(

C3

>string = ereg_replace*Gfo#rG$ >n#m$ >string-( echo >string( /; De]ire: G3his string has words.G ;/ /; bnsX acesta da. ;/ >n#m = G7G( >string = "3his string has fo#r words."( >string = ereg_replace*Gfo#rG$ >n#m$ >string-( echo >string( /; De]ire: G3his string has 7 words.G ;/ !>

eregi
,'!'3 , '!'- / 5escriere int eregi 2string pattern" string string *" arra- regs+3 <uncia se comport identic cu ereg,/ nefcnd distincie ntre literele mari i mici la cutarea unei potriviri ,nu este case sensitive/)

eregi.replace
,'!'3 , '!'- / 5escriere string eregi_replace 2string pattern" string replacement" string string3 <uncia se comport identic cu eregOreplace,/ nefcnd distincie ntre literele mari i mici la cutarea unei potriviri ,nu este case sensitive/)

split
,'!'3 , '!'- / 5escriere arra- split 2string pattern" string string *" int limit+3 ;eturnea+ un tablou de string%uri, avnd ca elemente subiruri ale string re+ultate din mprirea string conform pattern) 5ac apare i limit, tabloul va conine ma(imum limit elemente, ultimul element coninnd restul rmas din string) 5ac apare o eroare, split() va ntoarce false) 'entru a prelua primele D cmpuri dintr%o linie din EetcEpass6d7 8(ample =) 8(emplu 0plit,/
>passwd_list = split *":"$ >passwd_line$ O-(

'entru a valida o dat calendarisitic, care poate fi delimitat de slash,E/, punct,)/ sau linie de desprire,%/ 8(ample F) 8(emplu 0plit,/
>date = "@7/3@/)NR3"( //.elimitatori pot fi / . 5 list *>month$ >day$ >year- = split *GK/.5LG$ >date-( echo "1onth: >month( .ay: >day( ^ear: >year<br>,n"(

@tenie, pattern este case%sensitive) 5ac nu avei nevoie e(plicit de e(presii regulate, folosii #nlinZed e(plode,/) 8ste mai rapid) 5e asemenea pattern este o e(presie regulat) 5ac dorii s mprii string dup caractere speciale, va trebui s le securi+ai mai nti) 5ac funcia split() ,sau orice alt funcie rege(/ se comport ciudat, citii manualul rege:1J, aflat n subdirectorul rege:K unde e instalat '!') Comanda man KusrKlocalKsrcKrege:Krege:1J

spliti
,'!'- TQ -).)=/ C-

5escriere arra- spliti 2string pattern" string string *" int limit+3 <uncia se comport identic cu split,/ nefcnd distincie ntre literele mari i mici la cutarea unei potriviri ,nu este case sensitive/)

CD