Igal pool, kus iganes Sa ei viibiks!
Twitter | Github | phpBB.com - Eesti | phpBBeesti.eu Foorum | Facebook | DISCORD Chat

demo32 (3.2 on arenduses) - demo31 (3.1 on praegune live versioon)

phpBB - 1 tarkvara - üle 100 laienduse - eesti keeles - t a s u t a
phpBB - lokaliseeritud aastast 2008*!
*Erinevate haldajate käe all. Vaata lehekülge meist.

Be Here, Be Now, Be INSIDE phpBB!

Welcome to phpBB Estonian Translation Team


Are you a fan of phpBB? Do you have enthusiasm for translation work? If you do, we would love to invite you to help us with phpBB volunteer translation. If you want to join our volunteer translation team, please contact us by FB/TW DM or at et.translations@phpbbeesti.net

PHP Algajatele - #2.

Arutelud veebidisaini teemadel, mis kasutavad HTML / XHTML ja CSSi, ning üldistel graafika teemadel, nagu näiteks Photoshop ja teised.

Moderaator: Tugi

doozy
Postitusi: 409
Liitunud: 13 Mai 2014, 08:00
Asukoht: Tallinn
Sugu: Määratlemata

PHP Algajatele - #2.

PostitusPostitas doozy » 09 Mai 2015, 19:55

TÄHELEPANU! Postituse esialgne autor oli phpBB.ee liige Traf, kes tegi selle 19 Mai 2008, 19:46!

Eelmisel korral sai ülesandeks antud väljastada kõikide teiste pereliikmete vanused, võttes aluseks venna. Vastuseid laekus 5 ja hetkel vaatame jeerumi lahendust.

Kood: Vali kõik

<?php

$vend = 3;
$ode=$vend+6;
$isa=$ode+37;
$ema=$isa-2;
$koer=$vend+2;

echo "Vend: $vend <br/>Õde: $ode <br/>Isa: $isa<br/>Ema: $ema<br/>Koer: $koer";

?>


Pereliikmete vanuste arvutamine oli kõigil samamoodi tehtud, erines nende väljastamise viis.
jeerum kasutas ära tõsiasja, et kui kasutada üksikute ülakomade asemel quote-märke ", siis võib nende vahele panna ka muutujaid, need tõlgendatakse automaatselt ümber.
Näide:

Kood: Vali kõik

$nimi = 'Tom';

echo $nimi; //väljastab: Tom
echo '$nimi'; //väljastab: $nimi
echo "$nimi"; //väljastab: Tom       


Milleks on selline asi kasulik? Laiskuse küsimus. :P

Kood: Vali kõik

echo "Nimi: $nimi <br/>"


on lihtsam kirjutada ja lugeda, kui

Kood: Vali kõik

echo 'Nimi: ' . $nimi . ' <br/>';


Samuti on " - märgid vajalikud, tahtes teha reavahetust. Jah, reavahetus HTML'is käis <br/> abil, kuid mida me peame meeles pidama - PHP väljastab lihtteksti. Võttes lahti lähtekoodi, näeme, et HTML on ikkagi ühel real, mis sest, et brauseri renderdajast läbi käies <br/>'id reavahetusteks tõlgendatakse.

Spetsiaalsed märgid

PHP's on teatud hulk spetsiaalseid märke, mille abil saab väljastatavat teksti formaatida. Need spetsiaalsed märgid tuleb alati hoida ", mitte ' märkide vahel, sest üksikud ülakomad väljastavad nende vahel oleva teksti täpselt nii, nagu antud, ilma mittemingisuguse tõlgendamiseta. Vaatame mõndasid märke:
\n - reavahetus (newline)
\r - rea algusesse naasmine (carriage return)
\t - tab
\$ - dollarimärk $
\" - doublequote-märk "

Kood: Vali kõik

print "<html>\n\t<head>\n\t\t<title>Tere, \"Külaline!\"</title>\n\t</head>\n</html>";


Antud näide võib olla alguses natuke raske mõista, ent illustreerib väga hästi spetsiaalsete märkide tööpõhimõtet. Vaadates tekkinud veebilehe lähtekoodi ehk HTML'i, näeme, et see on kenasti vormindatud. Võrreldes tulemust ja selle saamiseks kasutatud koodi, näeme, et \n teeb reavahetuse, \t annab tab'ga võrdse tulemuse ja \" väljastab " - märgi ilma koodijuppi lõpetamata. Tuletame meelde, et väljastatav sisu algab ja lõpeb " märkidega - tahtes väljastada "-märki ennast, tuleb selle ette lisada tagurpidi kaldkriips. Samamoodi tuleb kaldkriips panna $-märgi ette, millega muidu algaks muutujanimi, ning ka tagurpidi kaldkriipsu enda ette, tahame me seda ennast ise väljastada. Kuna tagurpidi kaldkriips alustab spetsiaalset märki, tuleb tema enda väljastamiseks teda ennast kasutada. Paremaks mõistmiseks üks näide:

Kood: Vali kõik

print "Tagurpidi kaldkriips \\ alustab spetsiaalset märki.";


\\ - väljastab tagurpidi kaldkriipsu \

Mida meeles pidada

Kogu ülalolev jutt käis "-märkide vahel kasutatava sisu kohta. Üksikute ülakomade ' puhul see ei kehti ja nende vahel olevat sisu isegi ei üritata teisendada. Ainukesed märgid, mis üksikute ülakomade vahel tähendust omavad, on \' ja \\.
\' - väljastab ülakoma.
\\ - väljastab tagurpidi kaldkriipsu.

Kood: Vali kõik

print '\''; //väljastab ülakoma '
print '\\\''; //väljastab \'       


Mida veel meeles pidada, on see, et kuna ülakomaga alustatud sisu lõpetab ainult ülakoma, ja quote-märgiga alustatud sisu lõpetab ainult seesama märk, siis võib märke üksteise sees murevabalt kasutada.

Kood: Vali kõik

print "Kasutame 'ülakomasid'"; //väljastab Kasutame 'ülakomasid'
print 'Kasutame "ülakomasid"'; //väljastab Kasutame "ülakomasid"       


Muus mõttes toimib " märk samamoodi nagu üksik ülakoma '. Neid saab samamoodi siduda. Näiteid:

Kood: Vali kõik

echo "Tom" . " on 5-aastane," . ' aga homme saab' . " ta " . 'aasta vanem' . "aks";
echo 'Tere!, ' . "\n" . 'Mis mureks?';

$nimi = 'Tom';
$vanus = 5;

print $nimi . ' on juba ' . $vanus . '-aastane'; //väljastab Tom on juba 5-aastane
print "$nimi on juba $vanus" . '-aastane';//väljastab sama
print "$nimi on juba $vanus-aastane";//viga. muutujat $vanus-aastane ei ole olemas.       


Nagu näeme, tuleb aga samas "-märkide vahele lisatud muutujatega ettevaatlik olla.

Segadust kui palju. Mis aga positiivne, on see, et eelnev, pluss eelmisel korral õpitu, on peaaegu kõik, mida teada vaja sisu väljastamisel PHP's. Edaspidi tulevad mõned asjad veel juurde, nagu näiteks järjendite elemendid, aga põhiosa on läbi võetud. Edaspidi eeldan selle materjali tundmist ja kui küsimusi tekib, saab siia alati tagasi pöörduda.

Funktsioonid

Edasi läheme lõbusama osa juurde - selleks on funktsioonid. Programmeerimiskeelte üheks suuremaks eesmärgiks on tüütute tegevuste automatiseerimine. Oletame, et meil on viis nime - Mati, Helen, Toomas, Peeter ja Maido; ja meie ülesandeks on neid kõiki tervitada ja head päeva soovida. Hakata iga nime jaoks välja kirjutama

Kood: Vali kõik

print "Tere Mati,<br/>
Head päeva sulle!";


on seda järjest tüütum, mida rohkem meil neid nimesid tuleb.

Selle asemel loome oma esimese funktsiooni tervita:

Kood: Vali kõik

function tervita($nimi) {
print "Tere $nimi,<br/>
head päeva sulle!<br/>";
}
//ja kasutame funktsiooni korduvalt:
tervita('Mati');
tervita('Helen');
tervita('Toomas');
tervita('Peeter');
tervita('Maido');


Üks funktsioon algab deklaratsiooniga function, sellele järgneb funktsiooni nimi, mille me valime ise. Sellele järgnevad sulud, mille sisse me asetame kõik need muutujad, mida me tahame funktsiooni sees kasutada. Järgnevad loogelised sulud tähendavad funktsiooni täitmisele kuuluvat osa, mille vahele jäävat koodi täidetakse iga kord, kui funktsioon välja kutsutakse. Hakkame neid osasid ükshaaval lahti selgitama.

function osa jääb iga funktsiooni puhul samaks. Ükskõik, millise funktsiooni me teeme, alustame seda väljendiga function.

nime valime ise. PHP'l on juba olemas terve hulk enda funktsioone mille nimedega ei tohiks vastuollu minna. Samas aga ei ole mõtet karta, ei meie pandud nimi juba võetud on - kuniks säilitame nimes teatud unikaalsuse, võib kindel olla, et see on vaba. Pealegi annab PHP märku, üritame me juba olemasolevat funktsiooni uuesti defineerida. Siit tähtis meelde jätta: ühe ja sama nimega funktsiooni saab kirja panna ainult korra. Selle funktsiooni hilisemal kasutamisel piiranguid ei ole. Ülemisel näitel panime me esimeses pooles funktsiooni kirja ja teises pooles kasutasime seda korduvalt.

sulud ja nende sees olevad muutujad. Kui funktsioon ei vaja väljaspoolt infot, ei ole vaja sulgudesse midagi panna. Näiteks võime defineerida funktsiooni

Kood: Vali kõik

function tere() {
print 'Tere!';
}


Mis teretab meid iga kord, kui me selle funktsiooni välja kutsume. Samas aga on tihti funktsioonid keerulisemad, kui näites, ja vajavad algandmeid. Kuna funktsiooni sees ei saa kasutada funktsiooniväliselt defineeritud muutujaid, tuleb need funktsioonile edasi anda. Näide:

Kood: Vali kõik

$nimi = 'Tom';
$vanus = 5;
function kirjelda() { //kirjeldame funktsiooni
print $nimi . ', ' . $vanus . '-aastane';
}
kirjelda(); //kutsume funktsiooni välja       


See ei tööta, kuna funktsiooni sees ei saa väliseid muutujaid kasutada. Et see töötaks, tuleb funktsioonile anda edasi algandmed, millega tööle hakata, kusjuures funktsioonisiseselt ja -väliselt võib kasutada erinevate nimedega muutujaid - tegemist on kui kahe eraldatud maailmaga, mis teineteises toimuvast eriti ei hooli. Näide:

Kood: Vali kõik

$nimi = 'Tom';
$vanus = 5;
function kirjelda($poisi_nimi, $iga) { //kirjeldame funktsiooni
print $poisi_nimi . ', ' . $iga . '-aastane';
}
kirjelda($nimi, $vanus); //kutsume funktsiooni välja       


Funktsiooni kirjeldamisel ja välja kutsumisel tuleb sulgude vahel muutujad eraldada komadega. Välja kutsumisel tuleb kasutada täpselt sama palju muutujaid, kui kirjeldamisel, ning järjekord on oluline.
kirjelda('Tom', 5); ei ole sama, mis kirjelda(5, 'Tom');
Esimesel juhul väljastatakse Tom, 5-aastane teisel aga 5, Tom-aastane

Loogelised sulud alustavad ja lõpetavad funktsiooni täitmisele minevat sisu ja neid saab välja kutsuda vastavalt
Ctrl-Alt-7 ja Ctrl-Alt-0

return

Funktsioonid ei pea tingimata midagi väljastama. Funktsioonid saavad ka tagastada. Selle jaoks on võtmesõna return. Võtame näiteks olukorra, kus Tom'i vanus on kümnendik õe vanuse ja aastas olevate nädalate arvu korrutisest, liita aastas olevate päevade arv jagatuna isa vanusega. Teeme funktsiooni, mis tagastab poisi vanuse vastavalt ette antud õe ja isa vanustele.

Kood: Vali kõik

function arvutaVanus($oe_vanus, $isa_vanus) {
    $nadalaid = 52;
    $paevi = 365;

    $a = ($oe_vanus * $nadalaid) / 10;
    $b = $paevi / $isa_vanus;

    return $a + $b;
}


Väljakutsumisel toimub tagastamine nii, et funktsioon ise välja kutsudes muutub tagastatavaks väärtuseks. Näide:

Kood: Vali kõik

$vanus = arvutaVanus(3, 42);
print $vanus;


või

Kood: Vali kõik

print arvutaVanus(4, 38);


Paneme tähele, et PHP'le (hetkel veel) täpitähed muutujate nimedes eriti meeltmööda ei ole, seega kasutama peaks standardset ASCII tähestikku.

Ülesanne

Teha funktsioon, mis arvutab etteantud päeva, kuu, ja aasta järgi möödunud päevade arvu alates 1. jaanuarist 2000 ja tagastab selle. Lihtsuse mõttes oletame, et igas kuus on 30 päeva ja etteantud kuupäev on kindlasti hilisem kui 1. jaanuar 2000. Teha ka funktsiooni kasutamise näide, kus kutsutakse funktsioon mingisuguste andmetega välja ja kasutatakse seda, et väljastada kenasti vormindatud lause kujul:
Täna, 3.5.2001 on möödunud 413 päeva.

üks võimalus, kuidas alustada, et kuidagi koha pealt minema saada.
on ka teisi võimalusi, kuidas läheneda.

Kood: Vali kõik

function moodunud($paev, $kuu, $aasta) {
//siia sisu
return //siin tagastame päevade arvu
}
//Välja kutsume selle kujul
moodunud(3, 5, 2001);

doozy
Postitusi: 409
Liitunud: 13 Mai 2014, 08:00
Asukoht: Tallinn
Sugu: Määratlemata

Re: PHP Algajatele - #2.

PostitusPostitas doozy » 09 Mai 2015, 19:56

Teema suletud, kuna postitus on vana phpBB.ee foorumist üle toodud! Postituse algne autor on Traf! Kõik õigused antud postitusele kuuluvad talle!


Mine “Veebidisain ja graafika.”

Kes on foorumil

Kasutajad foorumit lugemas: Registreeritud kasutajaid pole ja 1 külaline

phpBB Eesti : Lahtiütlus