- 1 - Wamp edition Del 1 Grunderna i PHP Introduktion PHP Grunder Ove Lundgren 2010-1 -
- 2 - W A M P Windows Apache MySQL PHP Detta material har utvecklats med WampServer 2.0c [2008] som inkluderar Apache 2.2.8 MySQL 5.0.51 PHP 5.2.6 http://www.wampserver.com - 2 -
- 3 - Introduktion Webbserver och klient I en dataordlista beskrivs orden server respektive klient så här: Server: Dator och/eller program som sköter t.ex. en informationstjänst, e-mail, nätverk, skrivardelning, lagring av filer som många användare vill ha tillgång till, eller utför andra tjänster åt klienter. Klient: Den dator eller program som utnyttjar en viss tjänst hos en annan dator (server). (Källa: www.itv.se) Klient Programvara: Webbläsare (web browser) Webbserver Programvara: Webbserver När du surfar på Internet är din dator en klient. Du startar en webbläsare, vanligen Microsoft Internet Explorer (förkortas MSIE eller IE) eller Mozilla Firefox. I webbläsarens adressfönster skriver du adressen (url) till en webbserver. Det kan vara en IP-adress (en sifferföljd som är unik för den aktuella datorn) eller motsvarande domännamn (t.ex www.kck.amal.se) Man kan begära en speciell sida (t.ex. www.kck.amal.se/ensida.html). Om man inte anger någon sida adresseras vanligen en startsida som brukar ha namnet index.html Den aktuella sidan hämtas och visas på din dator. Webbserverdatorn kan fysiskt vara placerad var som helst i världen. På den datorn finns programvara som ombesörjer distribution av webbsidor. Denna programvara kallas också för webbserver. Samma ord används alltså dels för serverprogrammet, dels för den dator på vilket det arbetar. Två vanliga webbservrar (program): - Microsoft Internet Information Server (IIS), körs vanligen under operativsystemet Windows 2000. - Apache, används normalt i Unix/Linux-miljöer (men fungerar även under Windows) Var sker tolkning och exekvering? Det är webbläsaren som lokalt sköter om bearbetningen av en webbsida. Här tolkas html-koden, eventuella scripts (t.ex. JavaScript) exekveras liksom java-applets, Flash-moduler mm. (Ibland krävs att webbläsaren är försedd med speciella plugins.) Men: Ofta behövs program som exekveras på själva webbservern. (Det finns flera olika tekniker för att åstadkomma detta: CGI, JSP, ASP, PHP m.fl. Vi återkommer till vad dessa förkortningar står för...) Syftet med dessa server side programs är oftast att få tillgång till, och hantera, data ur en databas. Resultatet av sådana program presenteras som html-kod vilken återsändes till klienten och visas med hjälp av dess webbläsare. - 3 -
- 4 - Lokal webbserver När du har skrivit en sida med html-kod i en editor och sparat filen i någon mapp, så kan du (som bekant) testa hur sidan ser ut helt enkelt genom att öppna filen i webbläsaren. Detta fungerar även om sidan är försedd med t.ex. applets, Flash och scripts som är avsedda att köras lokalt. När du skriver scripts eller program som är avsedda att exekveras på en webbserver måste dina filer sparas på en sådan. Du får alltså (med ett FTP-program) kopiera dina filer till en lämplig server och provköra dem där. Servern ifråga måste klara av den teknik som används (CGI, JSP, ASP, PHP ) För testkörning är det enkelt att förse sin egen dator med en lokal webbserver. Datorn blir då både webbserver och klient, och man kan enkelt testköra sina server side progams. Din dator: Webbserver och klient webbläsare webbserver Man kan t.ex. använda - Microsoft IIS om du har operativsystemet WindowsXP-prof / 2000 - Apache under operativsystem Unix / Linux / Windows XP / 2000 / 98 / Me Tekniker för att exekvera program/scripts på webbservern CGI (=Common Gateway Interface) CGI är en överenskommelse, en standard för hur en webbserver ska kunna kommunicera med program som producerar webbsidor (det vill säga, genererar html-kod). Dessa program är oftast skrivna i programspråket Perl, men kan även skrivas i andra språk som följer CGI-standarden, t.ex. C++. CGI är en klassisk, idag ganska gammal, standard för serverbaserade program. ASP (=Active Server Pages) En webbsida ges extensionen.asp i stället för.html. Sidan är försedd med scripts som är inkluderade i koden. ASP-scripten är vanligen skrivna i Jscript (= Microsofts version av JavaScript) eller i VBscript ( = VisualBasic-script) Dessa scripts kommer då att exekveras på servern, förutsatt att det är en Microsoft-server, IIS eller PWS. (Även Apache kan numera förses med en speciell ASP-modul.) JSP (=Java Server Pages) Detta är Suns motsvarighet till Microsofts ASP. Fungerar på ungefär samma sätt. Filändelsen hos webbsidorna ska vara.jsp. JSP-scripten består av ren javakod och bäddas in i html-kod. Webbservern måste ha stöd för att kunna exekvera JSP-script (t.ex Jakarta Tomcat till Apache). PHP(=Personal Home Pages, numera Hypertext Preprocessor) Även PHP har stora likheter med ASP. PHP-script inkluderas i html-kod. Scripten skrivs i språket PHP. Webbsidorna ges extensionen.php. Servern måste vara försedd med PHP-tolk. Medan ASP associeras med Microsoft, hör PHP hemma i Linux/Unix-världen, men det är inga problem att köra PHP-script på IIS eller PWS. PHP är mycket väl lämpat att använda gentemot databaser. Antalet PHP-användare har ökat kraftigt under senare år. - 4 -
- 5 - Databaser Vi nämnde ovan att programexekvering på serversidan oftast syftar till att få tillgång till databaser. Då måste det också finnas ett DBMS ( = database management system = databashanteringssystem = databasserver ). Så här kan det se ut: Klient Webbserver Webbläsare (web browser) Webbserver Databasserver Databas Vanliga DBMS: Access, Microsoft SQL Server, Oracle, Sybase, MySQL Vår konfiguration Apache PHP MySQL är en kombination som är de facto-standard i Unix-världen. Programvarorna kan gratis hämtas från webben. Kombinationen fungerar utmärkt även under Windows. I denna kurs kommer vi att använda kombinationen PHP/MySQL med Apache som server. ( I ett exempel används Access som databashanterare. ) Webbserver och klient Webbläsare MSIE eller NN Webbserver Apache + PHP Databasserver: MySQL Databas Man kan ladda ner Apache, PHP och MySQL var och en för sig, och installera dem. Det finns också färdiga paket med dessa programvaror, vilket är mycket bekvämt. Exempel på paket: - PHPtriad - EasySQL - Wamp ( = Windows + Apache + MySql + Php) Utvecklingen av detta material skedde från början med PHPtriad i Windows XP- miljö. I denna upplaga har vi använt Wamp, närmare bestämt WampServer 2.0c [2008] inkluderande Apache 2.2.8, MySQL 5.0.51b och PHP 5.2.6. Materialet kan användas oberoende av installation, men vissa företeelser exemplifieras i Wamp-miljö. - 5 -
- 6 - Localhost Den lokala webbservern har namnet localhost. Efter att Apache, PHP och MySQL installerats kan mappstrukturen se ut ungefär såhär: C: apache bin htdocs mysql php De mappar och filer som finns i mappen htdocs blir mappar och filer i din localhost-server. Wamp Efter en installation med Wamp ser mappstrukturen ut så här: C: wamp bin apache mysql php www (fler mappar finns...) De mappar och filer som finns i mappen www blir mappar och filer i din localhost-server. Man startar Apache-servern. Längst ned på skärmen, i aktivitetsfältet, visas då en liten ikon en halvmåne Klickar man på den så visas wampmenyn Här kan man kontrollera / slå på / stänga av Apache, MySql, phpmyadmin mm. - 6 -
- 7 - Övning Vi testar servern: Se till att Apache är aktiv. Skriv en enkel html-fil (test.html) och spara den i mappen www (alternativt htdocs ) Starta webbläsaren. Skriv in adressen localhost/test.html Din testsida ska nu visas Övning Vi testar om vår server klarar PHP. Vi lägger dessutom till ett JavaScript som webbläsaren ska tolka. Skriv av koden nedan. (PHP-koden förklaras i nästa avsnitt). <head> <title>test2</title > </ head > <body> Detta är html-text <br> echo "Denna text skapas när ett PHP-script körs på servern"; <script language="javascript"> alert("detta meddelande skapas av Javascript som körs hos klienten"); </script> </ body > </ html > Spara filen som test2.php I webbläsaren, skriv in adressen localhost/test2.php Din testsida ska nu visas - 7 -
- 8 - PHP Grunder Skapa mappen C:\ \www\minphp ( Alternativt C:\ \htdocs\minphp ) Utskrift på skärm Övning: Starta en editor och skriv in denna kod: <head> <title>ovn1</title> </head> <body bgcolor="yellow" > <h4>utskrifter</h4> echo "PHP fungerar! "; echo "Grattis! " ; </html> PHP-kod skrivs mellan taggarna och. Exemplet visar hur man får utskrift. Observera semikolon efter varje PHP-sats. Spara filen som ovn1.php i mappen minphp Starta webbläsaren. Skriv in adressen localhost/minphp/ovn1.php Sidan visas I strängen efter echo kan man skriva html-kod. Ändra första echo-satsen till: echo "PHP fungerar! <BR> "; Uppdatera webbsidan i webbläsaren. Radbyte sker. PHP-scriptet exekveras på servern. Resultatet blir html-kod! I webbläsaren: Visa källa ( View Page Source ) Du ser inget av scriptet endast den html-kod som scriptet genererat! I fortsättningen: Begär ofta Visa källa! Det hjälper dig att förstå vad PHP uträttar - 8 -
- 9 - Man kan lägga in flera scripts. Ändra nu så att bodyn i filen ser ut så här: <body bgcolor="yellow" > <h4>utskrifter</h4> echo "<h1>en rubrik</h1>"; echo "PHP fungerar! <br> "; echo "Grattis! " ; // detta är en kommentar <br> Text i html <br> print "Lite mer PHP-text <HR>" ; # Detta är en kommentar Spara och provkör. Html-kod förkommer här som vanligt, det vill säga utanför script-taggarna, men kan alltså även skrivas inom citattecknen efter echo. Notera också: - Flera PHP-satser kan skrivas på samma rad (givetvis med semikolon efter varje sats) - Som kommentartecken används dubbel-slash, // eller /*... */ som i C++ och Java. Man kan även använd nummertecknet, #, som i Visual Basic. - Ordet echo kan ersättas av ordet print - Om ett script består av en enstaka sats behövs inte semikolonet efter satsen (men det enklaste är att alltid skriva ut det ) Dessutom: Taggen kan på vissa servrar förkortas till <? (men det brukar unvikas) Lägg till följande rad i ovanstående kod: phpinfo(); Provkör! Nu visas information om den aktuella PHP-installationen: Versionsnummer och aktuell konfiguration. ( PHP kan ges olika egenskaper genom att ge ett antal direktiv vissa värden ) Vilken (eller vilka) PHP-version(er) finns på de servrar du har tillgång till? Variabler I nästa övning ska vi se hur man inför och använder variabler. Alla variabelnamn inleds med ett dollartecken, $. Det är tillåtet att använda bokstäver (a-z), siffror (0-9) samt understrykningstecken ( _ ) (dock får en siffra inte följa direkt efter dollartecknet) Variablerna behöver inte deklareras. De införs i samband med den första tilldelningen. Hur sträng-, heltals- och flyttalsvariabler tilldelas värden framgår av exemplet. Som tilldelningstecken används likhetstecken ( = ) (uttalas tilldelas, inte lika med! ) Man måste skilja på gemener och versaler i variabelnamn. Exempel: $NAMN, $namn och $Namn är tre olika variabler. Vanligen använder man små bokstäver (gemener) i variabelnamn. - 9 -
- 10 - Övning: Skriv koden nedan. Spara som ovn2.php. Spara i mappen minphp. Provkör. <head><title>ovn2</title></head> <body bgcolor="silver" > <h4>variabler</h4> $fornamn="kalle"; // en strängvariabel $alder = 19; // heltalsvariabel $lon = 103.50; // flyttalsvariabel echo $fornamn; echo " <br> "; echo $alder; echo " <br> "; echo $lon; </html> Konkatenering (sammanfogning) av flera strängar till en sträng (eller av tal och sträng till en sträng) sker med tecknet punkt. Testa! Ändra echo-satserna så här: echo "Förnamnet är ".$fornamn." <br> "; echo "Åldern är ".$alder." <br> "; echo "Lönen är ".$lon; Från andra programmeringsspråk är vi vana vid att det som vi skrivit inom strängparenteserna (citattecknen) skrivs ut på exakt samma sätt på skärmen. I PHP gäller att om en variabel omges av citattecken vid utskrift så skrivs fortfarande variabelns innehåll ut! Testa: echo "Förnamnet är $fornamn <br> "; echo "Åldern är $alder <br> "; echo "Lönen är $lon"; Men, om jag nu vill skriva ut variabelns namn, hur gör jag då? Problemet löses normalt genom att sätta ett bakvänt snedstreck framför variabelnamnet, så här: echo "Variabeln \$fornamn har värdet $fornamn <br>"; echo "Variabeln \$alder har värdet $alder <br>"; echo "Variabeln \$lon har värdet $lon <br>"; Provkör! Med Visa källa kan du se den html-kod som skapats. Ibland vill man att echo ska skriva ut (skapa html-kod med) citationstecken. Man vill kanske, t. ex., att följande html-kod ska skapas: <img src = "bild.jpg"> PHP-satsen som producerar denna textsträng ser ut så här: echo "<img src = \"bild.jpg\">"; Man sätter alltså ett bakvänt snedstreck framför citationstecknet för att det ska skrivas ut. Provkör! Med Visa källa kan du se den html-kod som skapats. - 10 -
- 11 - Aritmetik Beräkningar utförs med de aritmetiska operatorerna: Tecknen +,, *, / samt % (modulus). fungerar som i C++. Övning: Kör detta exempel, ovn3.php <head><title>ovn3</title></head> <body bgcolor="silver" > <h4>aritmetik</h4> $x = 14; $y = 3; echo $x + $y ; echo "<br>"; echo $x - $y ; echo "<br>"; echo $x * $y ; echo "<br>"; echo $x / $y ; echo "<br>"; echo $x % $y ; echo "<br>"; // ger resten vid heltalsdivision </html> +-*/% samt. Vad händer om vi använder tecknet punkt (. ) som operator mellan två tal? Testa! Lägg till satsen echo $x.$y ; De två talen blir strängar, här 14 och 3 vilka konkateneras till en sträng, 143. Variabeltyper Variabeltypen heltal heter på PHP-språket int eller integer, flyttal heter double eller float eller real, sträng heter string. Det är möjligt att, precis som i C++ och Java, göra cast, det vill säga omvandla från en typ till en annan. Exempel: $varde = (string) $talet; // omvandling från tal till sträng $i = (int) $summa; // ger avhuggning till heltal Anmärkning 1: I viss litteratur uppges att Å Ä Ö fungerar i PHP:s variabelnamn. Ett gott råd: Undvik alltid, i alla sammanhang, svenska tecken i namn på variabler, filer och mappar! (Även om ett system uppges fungera med dessa tecken så vet man aldrig när man råkar ut för det där specialfallet då det inte fungerar ) /Förf. Anmärkning 2: Du har redan lagt märke till att PHP ofta ger dig möjlighet att välja mellan olika skrivsätt. Exempel: print eller echo, int eller integer Du kommer att se många exempel på detta. Tanken är att en programmerare ska känna igen sig oavsett tidigare programmeringsmiljö C++, Java, VB ) Använd det skrivsätt som känns mest naturlig för dig men var konsekvent! - 11 -
- 12 - Konstanter Man definierar konstanter med hjälp av en funktion som heter define() I exemplet nedan skapas konstanten MOMS. Övning: Testa ovn4.php <head><title>ovn4</title></head> <body bgcolor="white" > <h4>konstaner</h4> define("moms", 0.25); $pris = 211.00; $prismedmoms = $pris + $pris*moms; echo "Pris inklusive moms är $prismedmoms "; </html> Det är en konvention inom programmering att konstantnamn skrivs med versaler, medan variabelnamn skrivs med gemener (åtminstone gement första tecken). Observera att konstanter inte inleds med dollartecken. If-satsen Denna ser ut precis som i C++/Java: if ( villkor ) else Vi känner igen oss: Om if- eller else-grenen innehåller en enda sats behövs inga klamrar. else-grenen kan förstås utelämnas. Vidare kan if-satser nästlas som i andra språk. Man kan även använda VB-liknande syntax utan måsvingar : if ( villkor ) else endif; - 12 -
- 13 - Jämförelseoperatorer I villkorssatser (boolska uttryck) ingår ofta jämförelseoperatorer. Dessa känner du igen: > större än < mindre än >= större än eller lika med <= mindre än eller lika med == lika med!= ej lika med Dessutom finns de här två: === lika med och av samma datatyp!== ej lika med eller ej av samma typ Övning: Testa denna. Spara som ovn5.php <head><title>ovn5</title></head> <body bgcolor="white" > <h4>if-satsen mm</h4> </html> $a=3; // ett heltal $b=3.00; // ett flyttal if($a==$b) echo \$a = = \$b är SANT<br> ; else echo \$a = = \$b är FALSKT<br> ; if($a===$b) echo \$a = = = \$b är SANT<br> ; else echo \$a = = = \$b är FALSKT<br> ; Programmet svarar att $a==$b är SANT men att $a===$b är FALSKT. Ändra så att $b blir en sträng: $b= 3 ; // en sträng Programmet svarar på samma sätt! (!) - 13 -
- 14 - Logiska (boolska) operatorer Antag att A och B är boolska uttryck (något som är sant eller falskt) Då gäller: A && B är sant om både A och B är sanna. I stället för && kan ordet and användas. A B är sant om minst en av A eller B är sanna. I stället för kan ordet or användas. A xor B är sant om antingen A eller B är sant. xor utläses exklusivt eller.!a är sant om A falskt och vice versa. Val med många alternativ I PHP finns, precis som C++ och Java, möjlighet att använda en switch-sats: switch ( variabel ) case värde1:... break; case varde2:... break;... default:... Om variabelns värde är lika med värde1 så utförs satserna efter case värde1: Om inget värde matchar utförs satserna efter default: osv. - 14 -
- 15 - Arrayer Arrayer = vektorer = endimensionella indexerade variabler. Dessa kan skapas i samband med tilldelning, så här $fnamn[0] = Janne ; $fnamn[1] = Lasse ; $fnamn[2] = Karin ; $fnamn[3] = Johanna ; Om man inte skriver ut indexen sätts de automatiskt. Det första elementet har index 0 (noll). $varde[] = 791; $varde[] = 832; $varde[] = 234; $varde[] = 599; $varde[] = 335; Ett annat sätt: $fnamn = array( Janne, Lasse, Karin, Johanna ); $varde = array( 791,832,234,599,335); I ovanstående exempel har arrayerna sekventiella heltalsindex: 0, 1, 2, Man kan även skapa vektorer där man refererar till respektive element med strängar (strängindexerade arrayer). Exempel: $manad["jan"] = "januari"; $manad["feb"] = "februari"; $manad["mar"] = "mars"; $manad["apr"] = "april"; Ett annat sätt att göra samma sak: $manad = array( ); jan => januari, feb => februari, mar => mars, apr => april - 15 -
- 16 - Iterationer for-, while- och do while-loopar fungerar som i C++/Java: for($i=0;$i<10;$i++) while(villkor) do while(villkor); Om iterationen består av en enda sats behövs inte måsvingarna. En loop kan avbrytas med ordet break I PHP finns också något som kallas foreach-loopar. Dessa används för att enkelt loopa igenom en hel vektor. I övningen nedan används for-och while-loopar för att visa innehållet i vektorer. I övningarna på nästa sida används foreach Övning: Skriv in och testa ovn6.php <head><title>ovn6</title></head> <body bgcolor="yellow" > <h4>loopar och arrayer</h4> $fnamn[0] = "Janne"; $fnamn[1] = "Lasse"; $fnamn[2] = "Karin"; $fnamn[3] = "Johanna"; $varde = array( 791,832,234,599,335); echo "Arrayen fnamn innehåller 4 element: <br>"; for($i=0;$i<4;$i++) echo "$fnamn[$i] <br>"; </html> echo "<br>arrayen varde innehåller 5 element: <br>"; $i=0; while($i<5) echo "$varde[$i] <br>"; $i++; - 16 -
- 17 - Övning: Testa detta script, ovn7.php <head><title>ovn7</title></head> <body bgcolor="yellow" > <h4>foreach-exempel</h4> $fnamn[0] = "Janne"; $fnamn[1] = "Lasse"; $fnamn[2] = "Karin"; $fnamn[3] = "Johanna"; </html> foreach($fnamn as $s) echo "$s <br>"; $s är en temporär variabel som undan för undan får vektorelementens värden. Ändra foreach-satsen till: foreach($fnamn as $j => $s) print "Element nr $j har värdet $s <br>"; Med denna konstruktion hamnar indexet, elementnumret, i den temporära variabeln $j och elementets värde i temporära variabeln $s Övning Samma kod som ovan, men nu med en strängindexerad array. Spara som ovn7b.php <head><title>ovn7</title></head> <body bgcolor="yellow" > <h4>foreach-exempel</h4> $manad["jan"] = "januari"; $manad["feb"] = "februari"; $manad["mar"] = "mars"; $manad["apr"] = "april"; foreach($manad as $j => $s) echo "Element nr $j har värdet $s <br>"; </html> - 17 -
- 18 - Matematiska funktioner PHP har ett stort antal fördefinierade (inbyggda) funktioner. Här är några exempel på matematiska funktioner: I nedanstående tabell markerar f flyttal, i och j heltal, samt x och y tal av heltals- eller flyttalstyp. Funktion sqrt(f) pow(x,y) max(x, y, ) min(x, y, ) ceil(f) floor(f) round(f, i) abs(x) exp(f) log(f) sin(f) cos(f) tan(f) atan(f) Returnerar kvadratroten ur f x y det största argumentet det minsta argumentet f avrundat uppåt till närmaste heltal (dock representerat som flyttal) f avrundat nedåt till närmaste heltal (dock representerat som flyttal) f avrundat till i decimaler absolutbeloppet av x e f ln f (naturliga logaritmen) sinusvärdet för vinkel f (där f är uttryckt i radianer) cosinus värdet för vinkel f (där f är uttryckt i radianer) tangensvärdet för vinkel f (där f är uttryckt i radianer) arctangens (i radianer) av f rand(i, j) slumptal i intervallet [i, j] pi närmevärde till π Testa gärna ovanstående funktioner! PHP-dokumentation På sajten www.php.net finns mycket information om PHP. Testa sökfunktionen högst upp på sidan. Fyll i (t.ex) search for round() in the function list och klicka på pilen En beskrivning på funktionen trim() visas - 18 -
- 19 - Strängfunktioner Vi tar en titt på några användbara strängfunktioner, alltså fördefinierade funktioner som hanterar strängar. I exemplen nedan betecknas en sträng allmänt med str. str kan vara en strängvariabel (som t.ex. $fornamn ) eller en strängkonstant (som t.ex. Kalle ) Ta bort blanktecken: Funktionen trim(str) tar bort eventuella blanktecken i början och i slutet av strängen str. Exempel: $s = Kalle ; $s = trim($s); // $s får värdet Kalle Antal tecken i en sträng: Funktionen strlen(str ) returnerar längden hos strängen str Exempel: $a = strlen( Petter ); //$a får värdet 6 (antal tecken i strängen Petter ) En delsträng: substring(str, a, b) returnerar en sträng som är den delsträng av str som börjar i position a, och som är b tecken lång. Strängens första tecken är tecken nummer noll (0) Exempel: $s= Tjeckoslovakien ; $t = substr($s,5,4); // $t kommer att få värdet oslo Byt ut en del av en sträng: str_replace(str1, str2, str3) letar efter strängen str1 i strängen str3 och ersätter den, om den hittas, med strängen str2. Exempel: $s = str_replace( Hjo, Åmål, I love Hjo );//$s får värdet I love Åmål Exempel: $pris = 12,75 ; $pris = str_replace(,., $pris );//$pris får värdet 12.75 I det senare exemplet byts alltså eventuella kommatecken ut mot punkt Jämför strängar: strcmp(str1, str2) returnerar värdet: -1 om str1 är mindre än str2 (det vill säga om str1 kommer före str2 i bokstavsordning) 0 om str1 och str2 är exakt lika 1 om str1 är större än str2 Exempel: $s = Berra ; if( strcmp($s, Berra )==0 ) echo Lika! ; else echo Olika! ; Testa gärna ovanstående funktioner! - 19 -
- 20 - Egendefinierade funktioner Liksom andra språk har alltså PHP en rad fördefinierade funktioner. Liksom i andra språk är det i PHP möjligt att definiera sina egna funktioner. När samma kod ska användas flera gånger är det praktiskt att utnyttja sådana egendefinierade funktioner. Övning Antag att du vill pryda din hemsida med en rad bestående av 20 stycken stjärnor. Du skriver då en for-loop där en sats som ritar en asterisk upprepas 20 gånger. Antag vidare att du inte nöjer dig med en sådan rad, utan att du vill rita den flera gånger. Då är det praktiskt att skriva en funktion som ritar asteriskerna. Sedan kan den funktionen anropas hur många gånger som helst. Skriv in, spara som ovn8.php och provkör: function ritarad() for($i=0; $i<20; $i++) echo "*"; // Här ritas 20 asterisker echo "<br>"; // Radbyte <head><title>ovn8</title></head> <body bgcolor="white" > <h4>exempel på funktionsanvändning</h1> ritarad(); ritarad(); Hej och välkommen! <br> ritarad(); ritarad(); </html> Antag nu att du inte alltid vill rita just tjugo stjärnor. Det skulle vara praktiskt att kunna ange antalet asterisker i samband med funktionsanropet. Detta löser vi genom att förse funktionen med en parameter och sedan anropa den med ett argument, det vill säga ge parametern ett värde. Ändra så här: function ritarad($n) for($i=0; $i < $n; $i++) echo "*"; echo "<br>"; Ändra anropen till (exempelvis): ritarad(12); Kanske vill du rita andra tecken än asterisker? Vi kan göra så att tecknet kan väljas vid anropet. En funktion kan ha flera parametrar. Ändra i funktionsbeskrivningen: function ritarad($n, $tkn) for($i = 0; $i <$n; $i++) echo $tkn; echo "<br>"; Ändra anropen till (exempelvis): ritarad(15, x ); Detta anrop ger en rad med 15 stycken x-tecken. - 20 -
- 21 - Övning Ofta lämnar funktioner ett värde. I denna övning anropas funktionen triang_area() med två argument, nämligen bas och höjd i en triangel. Funktionen beräknar triangelarean och returnerar värdet. Skriv in, spara som ovn9.php och provkör: function triang_area($b, $h) return $b*$h/2; <head><title>ovn9</title></head> <body bgcolor="beige" > <h4>en funktions som beräknar areor</h4> </html> $bas = 15.25; $hojd = 12.3; echo En triangel med basen $bas cm och höjden $hojd cm <br> ; echo har arean.triang_area($bas, $hojd). kvadratcentimeter ; Om ordet return ingår i funktionsbeskrivningen lämnar funktionen ett värde. Värdet är det uttryck som står efter return. En funktion som lämnar ett värde kan inte anropas fristående (som t.ex. ritarad() i föregående övning). Anrop kan ske i samband med en utskrift (som ovan) eller vid variabeltilldelning, till exempel $area = triang_area($bas, $hojd); I Java och flera andra språk används oftast ordet metod istället för funktion. En funktion som inte lämnar ett värde kallas i C++ och Java (med flera) för en void funktion (eller metod). I t.ex. Pascal användes ordet procedur för funktioner som inte lämnar värde. I Visual Basic kallas de ofta procedurer eller subrutiner. Lokala och globala variabler En variabel som är deklarerad inne i en funktion är en lokal variabel. En sådan variabel är giltig endast inne i funktionen., och inte i andra funktioner och inte i huvudprogrammet (det program som anropar funktionen). En variabel som är deklarerad i huvudprogrammet kallas en global variabel. En sådan är giltig och kan användas, förutom i huvudprogrammet, även i alla funktioner. Så här brukar lokala och globala variabler fungera de flesta programmeringsspråk. I PHP måste man dock lägga till en extra sats inne i funktionen för att denna ska kunna hantera en global variabel. Nästa övning visar - 21 -
- 22 - Övning: Global variabel Skriv in koden nedan, och spara som globaltest.php function skriv() echo "Namnet är $x"; <head><title>globaltest</title></head> <body bgcolor="white" > $x = "Konrad"; skriv(); </html> Provkör! Vi förväntar oss att värdet på variabel $x ska skrivas ut, men så sker inte. Funktionen kan inte direkt hantera den globala varaibeln $x. Gör nu ett tillägg så att funktionen ser ut så här: function skriv() global $x; echo "Namnet är $x"; Provkör! Nu accepterar funktionen variabeln $x och skriver ut dess innehåll! En annan möjlighet hade varit att använda en parameter, så här: function skriv($namn) echo "Du heter $namn"; <head><title>globaltest</title></head> <body bgcolor="white" > $x = "Konrad"; skriv($x); </html> - 22 -
- 23 - Funktioner för html-huvud och -fot I nedanstående övningar lär du dig att skriva egna funktioner som genererar html-kod för header och footer (huvud och fot, början och slut) hos en html-sida. Övning Skriv först en php-fil med ett enkelt script, t.ex <head> <title> </title> </head> <body> echo "<h4> PHP-test </h4> "; echo "PHP fungerar! <br> "; echo "Grattis! " ; </html> Spara filen som som funktest.php Kolla att den fungerar. Visa källa. Lägg till php-funktioner som genererar kod för den inledande resp. avslutande koden på html-sidan. Skriv om filen så här: // ----------------------funktionsdeklarationer function htmlhuvud() echo ""; echo "<head>"; echo "<title>"; echo "</title>"; echo "</head>"; echo "<body>"; function htmlfot() echo ""; echo "</html> "; //------------------------------- htmlhuvud(); echo "<h4> PHP-test </h4> "; echo "PHP fungerar! <br> "; echo "Grattis! " ; htmlfot(); Spara med oförändrat namn. Kolla att sidan fungerar. Visa källa. - 23 -
- 24 - När vi visar källan kommer all html-kod på en enda rad vilket inte är så snyggt. Vi ska komplettera koden: Med \n kan vi lägga in radbrytningar som syns när vi visar koden. Gör tillägg enligt nedan: // ----------------------funktionsdeklarationer function htmlhuvud() echo " \n "; echo "<head> \n "; echo "<title>"; echo "</title> \n "; echo "</head> \n "; echo "<body> \n "; function htmlfot() echo " \n \n "; echo "</html> "; //------------------------------- htmlhuvud(); echo "<h4> PHP-test </h4> \n "; echo "PHP fungerar! <br> \n "; echo "Grattis! " ; htmlfot(); Spara under oförändrat namn (funktest.php) Kolla att sidan fungerar. Visa källa. Snyggare nu I nästa övning ska vi förse funktionen htmlhuvud() med en parameter: Övning Ändra funktionen så här: function htmlhuvud($titel) echo " \n "; echo "<head> \n "; echo "<title>"; echo $titel; echo "</title> \n "; echo "</head> \n "; echo "<body> \n "; Förse anropet med ett argument: htmlhuvud("min SIDA"); Spara under oförändrat namn. Kolla att sidan fungerar. Kolla titelraden. Visa källa. - 24 -
- 25 - Funktioner i fristående fil. Följande övning visar hur du kan skriva dina funktioner i en fristående fil, och hur denna kan rekvireras till eller inkluderas in i den fil som ska använda dem: Övning Kopiera de båda funktionsdefinitionerna till en ny fil. Lägg dem i ett php-block, så här alltså: // funktioner.php //------------------------------- function htmlhuvud($titel) echo " \n "; echo "<head> \n "; echo "<title>"; echo $titel; echo "</title> \n "; echo "</head> \n "; echo "<body> \n "; //------------------------------- function htmlfot() echo " \n \n "; echo "</html> "; //------------------------------- Spara den nya filen under namnet funktioner.php i samma mapp som funktest.php Radera de båda funktionsdefinitionerna från filen funktest.php Med kommandot require ( eller include ) kan man inkludera php-kod från en annan fil. Ändra filen funktest.php så att den ser ut så här // funktest.php require "funktioner.php"; htmlhuvud("min SIDA"); echo "<h4> PHP-test </h4> \n"; echo "PHP fungerar! <br> \n"; echo "Grattis! " ; htmlfot(); Spara under oförändrat namn (funktest.php). Kolla att sidan fungerar! Visa källa! - 25 -
- 26 - Ett exempel med CSS Kommer du ihåg CSS (Cascading Style Sheets)? Med CSS kan vi skriva mallar/regler för hur texten ska se ut i exempelvis ett <DIV>-block. (Repetera arbetshäften om CSS om det behövs!) I nästa övning ska vi skriva några CSS-regler, spara dem i en separat fil och använda reglerna i en php-fil. Övning Skriv följande regler och spara dem under namnet minstil.css /* minstil.css */ body background-color : navy ; color : white; font-family : Verdana; font-size : 11pt ; h4 color : yellow; font-family : Verdana; font-size : 18pt ; div color : white; font-family : Verdana; font-size : 11pt ; font-weight : bold ; Skriv in ytterligare en funktion för html-huvud i filen funktioner.php: // funktioner.php //------------------------------- function htmlhuvud($titel) echo " \n "; echo "<head> \n "; echo "<title>"; echo $titel; echo "</title> \n "; echo "</head> \n "; echo "<body> \n "; //------------------------------- function htmlhuvud2($titel,$cssfil) echo " \n "; echo "<head> \n "; echo "<title>"; echo $titel; echo "</title> \n "; echo "<link rel=\"stylesheet\" href=\"$cssfil\" type=\"text/css\"> \n"; echo "</head> \n "; echo "<body> \n "; //------------------------------- function htmlfot() echo " \n \n "; echo "</html> "; //------------------------------- - 26 -
- 27 - Utgå från filen funktest.php och gör ändringar enligt nedan. Spara sedan filen under namnet funktest2.php // funktest2.php require "funktioner.php"; htmlhuvud2("min SIDA","minstil.css"); echo "<h4> PHP-test </h4> \n"; echo "PHP fungerar! <br> \n"; echo "<div> Grattis! </div>" ; htmlfot(); Kolla att sidan funktest2.php fungerar. Bakgrunden är nu mörkblå och texten skrivs enligt CSS-reglerna. Visa källa! Kommentarer 1. En fil med CSS-regler länkas (som bekant?) in i html med taggen <link> där den aktuella CSS-filens namn står efter attributet href. 2. Efter echo skriver man den sträng som ska skrivas ut omgiven av citationstecken ( ) (strängparenteser). Men om man nu vill skriva ut citationstecken, hur gör man då? Längst ned på sidan 9 i detta häfte står det att om man sätter ett bakvänt snedstreck framför citationstecknet så skrivs det ut. Satsen echo "<link rel=\"stylesheet\" href=\"$cssfil\" type=\"text/css\"> \n"; kommer således att ge följande utskrift (html-kod): <link rel="stylesheet" href="$cssfil" type="text/css"> Denna tagg följer html-standarden där ju attributens värde ska omges av citationstecken. echo -satsen skulle även kunna skrivas så här: echo "<link rel= stylesheet href= $cssfil type= text/css > \n"; Här är bakvänt-snedstreck-med-citationstecken ersatt av apostrof. Följande utskrift (html-kod) genereras: <link rel= stylesheet href= $cssfil type= text/css > Följer inte helt html-standarden, men echo-satsen blir mer lättläst. I följande arbetshäften om PHP använder vi ofta detta senare skrivsätt (med apostrof) för att inte tynga ned koden. - 27 -