Webprogrammering høsten 2017

Like dokumenter
}?> <!DOCTYPE... <html xmlns=" <head>... </head> <body> <p>nå skal vi printe hallo:</p> <?php //funksjonskall

$i < 5 forsettelsesbetingelsen - false => Løkken slutter.

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Tilgjegelighet av XHTML-forms

En enkel while-løkke. 1 of :28. 2 of :28. while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

while-løkker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

Utvikling av dynamiske nettsteder med PHP og databaser, våren 2009

$antall_maaneder =12; Variablene $pris og $antall_maaneder i eksemplet ovenfor har

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Når en bruker skriver sitt navn ("Ole") i et form-element med name="fornavn" som attributt. klikker på submit-knappen

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Et forsøk på definisjon

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Et forsøk på definisjon

Aritmetiske operasjoner. Litt om forrige times øvelsesoppgaver

Et forsøk på definisjon. Eksempel 1

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Verdier, variabler og forms

Et forsøk på definisjon. Eksempel 1

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

[Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 07/ Vi holder orden på verdier med hjelp av variabler

Introduksjon til beslutningsstrukturer

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Kapittel 1 En oversikt over C-språket

Løse reelle problemer

HØGSKOLEN I SØR-TRØNDELAG

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Del 1 En oversikt over C-programmering

Utførelse av programmer, metoder og synlighet av variabler i JSP

2 Om statiske variable/konstanter og statiske metoder.

Programmeringsspråket C

1.2 Dynamiske, tjenerbaserte og interaktive nettsteder

Informasjon Prøveeksamen i IN1000 høsten 2018

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

lage og bruke funksjoner som tar argumenter lage og bruke funksjoner med returverdier forklare forskjellen mellom globale og lokale variabler

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Klasser. Webprogrammering høsten Objekter. Eksempelklasser og -objekter. 2 of :56. 1 of :56

Repetisjon Novice Videregående Python PDF

Programmering i R. 6. mars 2004

INF1000 : Forelesning 4

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

TDT4105 IT Grunnkurs Høst 2016

Løse reelle problemer

</html> </head> <form action= rtkst.php > <p> Fornavn? <input type= text name= fornavn <input type= submit />

Løse reelle problemer

UNIVERSITETET I OSLO

Programmeringsspråket C Del 2

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

INF1000 Behandling av tekster

Programmeringsspråket C Del 2

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Programmeringsspråket C Del 2

2 Om statiske variable/konstanter og statiske metoder.

Webformularer, PHP og databaser

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Eksamensoppgaver 2014

TDT4110 IT Grunnkurs Høst 2016

Øvingsforelesning 1 Python (TDT4110)

Norsk informatikkolympiade runde

C# (.Net) Tema: Loops (Løkker) Leksjon 7 Kap 18

INF1000 Eksamen 2014 (modifisert)

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

TDT4110 IT Grunnkurs Høst 2015

HØGSKOLEN I SØR-TRØNDELAG

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Forelesning inf Java 5

Oppgave 1 Hva tror du følgende program skriver ut til terminalen? Diskuter med gruppen.

Forelesning inf Java 5

Innføring i bruk av CGI4VB

Løse reelle problemer

Høgskoleni østfold EKSAMEN

Systemarkitektur. Webformularer, PHP og databaser. Hva skal applikasjonsprogrammet gjøre? PHP. Ta i mot data fra brukergrensesnittskjermbildet

TDT4110 IT Grunnkurs Høst 2016

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Finne ut om en løsning er helt riktig og korrigere ved behov

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

Informasjon Eksamen i IN1000 høsten 2017

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

Eksempel 1: Bestemmer om tallet som skrives inn er et partall eller et oddetall side 12

Web-programmering med JSP Løsningsforslag leksjon 4

Kap 2: Løkker og lister

TDT4105 Informasjonsteknologi grunnkurs Øvingsforelesning 2. Iver Dihle Skjervum Vit.ass. ITGK

Innføring i bruk av CGI4VB

datatyper Hva er programmering? Variabler og Informasjonsteknologi 2 Kompetansesemål

Introduksjon til objektorientert programmering

YouTube-kanal ITGK. Læringsmål og pensum

Transkript:

for-løkker - innføring og eksempel Webprogrammering høsten 2017 for-løkker gjentar instruksjonene et gitt antall ganger. for-løkkens oppbygging: [Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 15/09-17 Tilbakeblikk Idag: Byggestein så langt: variabler, betinget utføring, løkker: (for), while enkle arrayer I tillegg: innebygde funksjoner, slik som print() og count(). for og foreach-løkker assosiative arrayer Funksjoner flere innebygde PHP-funksjoner fra PHP-biblioteket egendefinerte funksjoner funksjoner og hovedprogram Eksempel 1: en enkel for-løkke <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"...... <body > 1. 2. print("her kommer en for-løkke</p>"); 3. for ( $i = 0 ; $i < 5 ; $i = $i + 1 ){ 4. print ("dollar-i er nå lik $i</p>"); 5. 6. print ("Nå er løkken slutt, fordi dollar-i er lik $i</p>"); 7. </body> </html> Linje 3 kontrollerer løkkens gang i = 0 oppstart - tellervariabelen $i (testvariabelen) tilordnes en startverdi $i < 5 forsettelsesbetingelsen - false => Løkken slutter. $i = $i + 1 oppdatering - for hver omgang. Her kommer en for-løkke dollar-i er nå lik 0 dollar-i er nå lik 1 dollar-i er nå lik 2 dollar-i er nå lik 3 dollar-i er nå lik 4 Nå er løkken slutt fordi dollar-i er lik 5 1 of 20 9/15/2017, 2:03 PM 2 of 20 9/15/2017, 2:03 PM

Forskjellen mellom while- og for-løkker foreach-løkken En for-løkke er strukturert. All styringen ligger mellom klammene foreach-løkken - "skreddersydd" for å håndtere arrayer (Oppstart, fortsettelsesbetingelse, oppdatering) er konsentrert i for-parentesen. bare nyttekoden mellom { og. "Parentesen" i en while-løkke oppgir bare en fortsettelsesbetingelse. Oppstart ordnes før løkkekoden starter (se linje 2 nedenfor) oppdatering ordnes som en del av løkkens "nyttekode" (mellom { og ). Begge løkketyper kan, i prinsippet, brukes i alle situasjoner som krever løkker for-løkker - når vi vet hvor mange ganger løkken skal kjøres. while-løkker når antallet ganger avhenger av ting som skjer "underveis". foreach-løkken utføresfor hver innførsel. Trenger ikke tenke initialisering eller oppdatering. Eksempel 2:(Gjentar eksempel 2 med begge former) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"...... <body > <h1> Enda en enkel while-løkke </h1> 1. 2. $i=0;//oppstart 3. while( $i < 10 ){ 4. print ("dollar-i er nå lik $i</p>"); 5. $i = $i + 2;//oppdatering 6. 7. print ("Nå er løkken slutt, fordi dollar-i er lik $i</p>"); 8. </body> </html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"...... <body > <h1> Enda en enkel for-løkke </h1> 1. 2. //oppstart og oppdatering i parentesen 3. for ( $i = 0 ; $i < 10 ; $i = $i + 2 ){ 4. print ("dollar-i er nå lik $i</p>"); 5. 6. print ("Nå er løkken slutt, fordi dollar-i er lik $i</p>"); 7. </body> </html> For hver runde : fortløpende innførselverdi legges inn i variabelen $inførselvariabel (navnet er valgfritt, vi kan bruke hvilket variabelnavn vi vil) vi kan bruke verdien i løkkehandlingen (i print, eller på annet vis). as er et "reservert ord", som betyr noe spesielt i PHP, på linje med if, while for osv. Eksempel 3: Skriver ut bynavnene med en foreach-løkke $byer=array("oslo", "Bergen", "Trondheim", "Stavanger", "Kristiansand"); foreach ($byer as $bynavn){//$bynavn inførselvariabel print ("navn=$bynavn</p>"); navn=oslo navn=bergen navn=trondheim navn=stavanger navn=kristiansand for-løkken er lettere å programmere med, men vanskeligere å forstå. Dette fordi mange av detaljene, som programmereren selv må holde styr på i og rundt while-løkker, "abstraheres vekk" i for-løkken. Assosiative Arrayer (Zandstra (2003), s. 110) Assosiative arrayer indekserer sine innførsler med tekststrenger Så langt har vi sett på og arbeidet med arrayer som har tallindeks. Innførslene i de assosiative arrayene har streng-indeks. Å legge en innførsel i en assosiativ array gjøres som følger: $fodselsdager["niels"]="11.desember"; 3 of 20 9/15/2017, 2:03 PM 4 of 20 9/15/2017, 2:03 PM

Eksempel 4: fødselsdager Eksempel 5: Gjennomgå en assosiativ array med en foreach-løkke Vi ønsker å holde orden på fødselsdagsdatoene til noen av våre venner Med en assosiativ array kan vi gjøre det på følgende måte: //Oppretter arrayen $fodselsdager["niels"] = "11. desember"; $fodselsdager["jens"] = "12. juni"; $fodslesdager["mari"] = "21. oktober"; //Oppretter arrayen $fodselsdager["niels"] = "11. desember"; $fodselsdager["jens"] = "12. juni"; $fodselsdager["mari"] = "21. oktober"; //Gjennomgår arrayen og skriver ut indeksene og verdiene print ("Her kommer utskriften av navnene og datoene</p>"); foreach($fodselsdager as $navnvariabel => $datovariabel){ print ("navn = $navnvariabel, dato = $datovariabel</p>"); Assosiative arrayer holder mer informasjon enn de tall-indekserte To typer informasjon samtidig: vennens navn vennens fødselsdag De "gamle" tallindekserte arrayene lagrer bare én type informasjon. Hvordan kunne vi brukt våre gamle arrayer til å holde orden på fødselsdagsinformasjonen? ett mulig svar (klikk) (Se også Horgens hjemmeside for en liten videosnutt) Gjennomgå en assosiativ array foreach løkkestruktur for å gjennomgå en assosiativ array Her kommer utskriften av navnene og datoene navn = Niels, dato = 11. desember navn = Jens, dato = 12. juni navn = Mari, dato = 21. oktober Eksempel 6: Holde orden på en "handlekurv" (summen av prisene representerer prisnivået i butikken) //Oppretter arrayen $pris_i_kroner["coca-cola"] = 10; $pris_i_kroner["kvikklunsj"] = 15; $pris_i_kroner["sjampo"] =25; //Gjennomgår arrayen, og skriver ut vare og pris, og beregner summen 8. $sum = 0; print ("Her kommer utskriften av navnene og datoene</p>") ; foreach($pris_i_kroner as $varenavn => $pris){ print ("navn = $varenavn, pris = $pris kroner </p>"); 12. $sum = $sum + $pris; print ("Totalpris på handlekurven = $sum kroner. </p>"); Legg merke til linje 8. og linje 12. i koden En liten utvidelse av foreach løkken for vanlige arrayer utføres for hver innførsel. Ingen initialisering eller oppdatering. For hver runde: fortløpende indeks legges inn i variabelen $indeksvariabel (navnet valgfritt) fortløpende verdi legges inn i variabelen $verdivariabel ( navnet valgfritt). gjennom disse variablene kan alle indeksene og verdiene brukes etter tur. assosierer en indeks med en verdi. Må ikke blandes sammen med tegnet >= ( større eller lik ). linje 8 definere en sum-variabel med startverdi linje 12 plusser på sumvariabelen med varens pris for hver omgang. $varenavn og $pris er løpevariabler som, for hver runde antar hhv. indeks og verdi i arrayinnførselen Her kommer utskriften av varene og prisene i handlekurven navn = Coca-cola, pris = 10 kroner navn = Kvikklunsj, pris = 15 kroner navn = sjampo, pris = 25 kroner Totalpris på handlekurven = 50 kroner. 5 of 20 9/15/2017, 2:03 PM 6 of 20 9/15/2017, 2:03 PM

Arbeide med HTML-forms og arrayen $_Get Eksempel 7: Verdioverføring gjennom den assosiative arrayen $_GET Fornavn? <form action= "respons_tekst.php"> <label for="id_fornavn"> Fornavn? <input type="text" name= "fornavn" id="id_fornavn" /> </label></p> <input type="submit" /> <input type="reset" /></p> </form> Respons på tekst-elementet:</p> $fornavn= $_GET['fornavn']; print (" $fornavn</p>"); respons_tekst.php(utdrag) Her er $_GET en assosiativ array med innførsler for alle variabler brukt i skjemaet. Eksempel 8: Et PHP-program som skriver ut alle forms-variablene i skjemaet Navn? Alder? kjønn? mann kvinne Variablene fra formen "legger seg inn" som innførsler i arrayen $_GET $_GET kan også gjennomløpes med en foreach-løkke. <form action= "skrive_form_elem.php" target="_blank" method="get"> Navn? <input type="text" id="fornavn" name="navn"/> </p> Alder? <input type="text" id="id_alder" name="alder"/> </p> Kjønn?</p> <input type="radio" name= "kjonn" value="mann"/> Mann </p> <input type="radio" name= "kjonn" value="kvinne"/> Kvinne </p> <input type="submit" name="submit" /> <input type="reset" name="reset"/> </p> </form> //Gjennomgår $_GET[]-arrayen, og skriver ut data til skjermen print ("Her er data du tastet inn i skjemaet </p>") ; foreach($_get as $elementnavn => $elementverdi){ print ("elementet $elementnavn hadde verdien $elementverdi</p>"); print ("Takk for din påmelding. Nedenfor får du vite hvor mye du må betale</p>\n"); //Resten av skjemabehandlingen (utelatt her) skrive_form_elem.php Her er data du tastet inn i skjemaet elementet fornavn hadde verdien Michael Premingr elementet alder hadde verdien 46 elementet kjonn hadde verdien mann elementet submit hadde verdien send Takk for din påmelding. Nedenfor får du vite hvor mye du må betale Funksjoner - en utvidelse av programmeringsspråket. En liten introduksjon Funksjon: et lite hjelpeprogram, med navn, som utfører en bestemt oppgave. En funksjon: en sekvens av instruksjoner som har et navn. //funksjonsdefinisjon function printhallo(){ print("hallo</p>"); Navnet (her printhallo) kan brukes til å kalle funksjonen. Hver gang funksjonen printhallo kalles utføres instruksjonene spesifisert i den. //funksjonskall printhallo(); //enda en gang printhallo(); HALLO HALLO Å skrive en funksjon er det samme som å lage en ny "privat" PHP-kommando til eget bruk. Eksempel 9 : Funksjonsdefinisjon og funksjonskall i en PHP-fil //funksjonsdefinisjon function printhallo(){ print("hallo</p>"); <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head>... </head> <body> Nå skal vi printe hallo:</p> //funksjonskall printhallo(); </body> </html> Nå skal vi printe hallo: HALLO printhallo() er en egendefinert funksjon. vi skrev den selv den er "vår private" utvidelse av PHP-språket 7 of 20 9/15/2017, 2:03 PM 8 of 20 9/15/2017, 2:03 PM

Innebygde og egendefinerte funksjoner Noen Innebygde funksjoner Innebygde: forhåndsskrevet av andre, alle PHP-programmerere kan bruke. Mange av PHP-instruksjonene vi bruker ofte, er "innebygde funksjoner" "noen" har skrevet dem og plassert dem i et "bibliotek" utfører oppgaver de fleste programmerere trenger ofte IKKE en del av kjernespråket". "kjernespråket": if, else, while, for og noen få andre kodeord Innebygde funksjoner: print,count og mange mange andre Egendefinerte funksjoner: for å svare på spesifikke behov Vi kan definere våre egne funksjoner for å "pakke inn" sekvenser av instruksjoner vi bruker ofte og kalle disse ved behov dele opp sammensatte problemer inn i oversiktlige deloppgaver strukturere våre programmer printhallo (): egendefinert funksjon Eksempel 10 : funksjonen print Vi kjenner print. print har en parameter (som skrives til nettleservinduet). Nedenfor er direkteverdien "Dette er et enkelt program" et argument - en realisering av parameteret. print("dette er et enkelt program"); Eksempel 11 : funksjonen count (også kjent) count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen. $byer=array("oslo", "Bergen", "Trondheim", "Stavanger", "Kristiansand"); $antallbyer = count($byer); print ("$antallbyer byer</p>") Typer funksjoner 5 byer bare handing (gjør nøyaktig det samme hver gang den kalles (printhallo) funksjoner med parametre som spesifiserer handlingen funksjoner som returnerer verdier Parametre og argumenter En parameter er en variabel som spesifiserer funksjonen. Et argument er en variabel eller verdi som angir verdien på en parameter i et bestemt kall. (Kommer tilbake til dette. ) 9 of 20 9/15/2017, 2:03 PM 10 of 20 9/15/2017, 2:03 PM

Enkle egendefinerte funksjoner Funksjoner med parametre Vi skriver egendefinerte funksjoner Innebygde funksjoner som har parametre (og tar argumenter) når vi identifiserer en oppgave som gjøres ofte strukturere programmet mao: ganske ofte. En sekvens av instruksjoner som har et navn. pakker instruksjonene inn i en blokk gir funksjonen et navn function funksjonsnavn($parameter1, $parameter2... ){ //instruksjoner plasserer funksjonen et sted i programkoden (for eksempel øverst) kaller den for å utføre handlingen spesifisert med instruksjonene funksjonsnavn($argument1, $argument2... ); Kan ingen -- eller flere -- parametre. argumenter for å "fylle" parametrene med verdier ved kall. Eksempel 12 (enkel egendefinert funksjon -uten parametre) Jeg har definert funksjonen skrivopphavsrett(). Denne ligner på printhallo() vi skrev tidligere. Når den kalles, skriver den en en copyright seksjon i en HTML-fil. 1. 2. function skrivopphavsrett(){ 3. print('<p class="bakgrunn" > Denne filen er beskyttet av opphavsrett. Dersom du ønsker å kopiere 4. fra den eller bruke den til andre formål enn personlig bruk, må du 5. kontakte Michael Preminger.</p> '); 6. //slutt funksjonsdefinisjon 7. 8. <!DOCTYPE... 9. <html xmlns="http://www.w3.org/1999/xhtml"> 10. <head>... 11. </head> 12. <body > 13. Dette er et meget enkelt dokument, med bare en linjes innhold. </p> 14. 15. skrivopphavsrett(); 16. 17. </body> 18. </html> Dette er et meget enkelt dokument, med bare en linjes innhold. Denne filen er beskyttet av opphavsrett. Dersom du ønsker å kopiere fra den eller bruke den til andre formål enn personlig bruk, må du kontakte Michael Preminger. print($argument) skriver ut (verdien til) sitt argument til nettleseren. count($argument) "måler" antall innførsler på sitt argument. Begge disse funksjoner er programmert med parametre Egendefinerte funksjoner med parametre Eksempel 13: skrivopphavsrett($navn) Vi definerer og kaller en funksjon som skal hete skrivopphavsrett($navn). Vi bygger på funksjonen skrivoppgavsrett() fra forrige eksempel. Parameteren $navn gjør funksjonen mer anvendelig. Hvorfor? 1. 2. function skrivopphavsrett($navn){ 3. print(" Denne filen er beskyttet av opphavsrett. Dersom du ønsker å kopiere 4. fra den eller bruke den til andre formål enn personlig bruk, 5. må du kontakte $navn.</p> "); 6. //slutt funksjonsdefinisjon 7. 8. <!DOCTYPE... 9. <html xmlns="http://www.w3.org/1999/xhtml"> 10. <head>... 11. </head> 12. <body > 12. Dette er et meget enkelt dokument, med bare en linjes innhold. </p> 13. 14. skrivopphavsrett("jens Olsen"); 15. 16. </body> 17. </html> Dette er et meget enkelt dokument, med bare en linjes innhold. Denne filen er beskyttet av opphavsrett. Dersom du ønsker å kopiere fra den eller bruke den til andre formål enn personlig bruk, må du kontakte Jens Olsen. I dette eksemplet er $navn (linje 2) parameter "Jens Olsen" (linje 14) argument Parameteren gjør at funksjonen kan brukes av forskjellige opphavspersoner dermed gir økt fleksibilitet referansen $navn på linje 5,, gjør at argumentverdien (i vårt tilfelle "Ole Olsen"), blir skrevet til nettleseren. Linje 2-6 utgjør funksjonsdefinisjonen. På linje 13 skrives et fast avsnitt. På linje 15 blir funksjonen kalt, og instruksjonssekvensen i den utført. 11 of 20 9/15/2017, 2:03 PM 12 of 20 9/15/2017, 2:03 PM

Eksempel 14: printinvertertform($fornavn, $etternavn) Et lite program som definerer en funksjon og kaller den 1. 2. function printinvertertform( $fornavn, $etternavn ){ 3. print("$etternavn, $fornavn</p>"); 4. //slutt funksjonsdefinisjon 5. 6. I det følgende skrives to navn i invertert form: </p> 7. 8. $fnavn="michael"; 9. $enavn="preminger"; 10. 11. //kaller funksjonen 12. printinvertertform($fnavn, $enavn); 13. printinvertertform("jens", "Olsen"); 14. På Linje 2 til 4 defineres funksjonen. På Linje 12 kalles funksjonen med to variabler som argumenter. På linje 13 kalles funksjonen enda en gang, denne gang med to faste strenger som argumenter. $fornavn og $etternavn er parametre. $fnavn og $enavn er argumenter. Samme gjelder "Jens" og "Olsen". Rekkefølgen på parametrene bestemmer hvilke argument mappes til hvilken parameter. Programmet ovenfor skriver ut: I det følgende skrives to navn i invertert form Preminger, Michael Olsen, Jens Funksjoner med returverdi kan illustreres med hjelp av en drikkeautomat: De tar imot argumenter: pengebeløp og produktvalg, gir tilbake en kopp med innhold (og mengde) som tilsvarer argumentverdiene. En funksjon med en returverdi produserer en verdi mens den kjører. Returverdien kan hentes i en returvariabel. En funksjon med en returverdi kan kalles slik: $resultat=funksjon($argument1, $argument2...); her er $resultat returvariabelen. Noen flere innebygde funksjoner med returverdi I de neste eksemplene hopper jeg over og foran og bak eksemplene, for å spare plass og papir. Eksemplene 15-18: Flere innebygde funksjoner De fleste innebygde funksjoner har returverdier. Noen funksjoner produserer en tekststreng og returnerer denne. Eksempel: 15. funksjonen date: $klokkestreng=date("g\.i\.s"); print("klokkeslett= $klokkestreng"); klokkeslett= 2.01.58 Andre funksjoner produserer tall som sine returverdier. 16. strlen(argument) beregner lengden ( antall tegn) på tekststreng-argumentet: $lengde=strlen("michael"); print( $lengde); 7 17. Funksjonen abs(argument) tar et tallargument, og returnerer dets absolutte verdi. abs(-5) returnerer 5. Eksempel: $tall=-5; $absverdi=abs($tall); print ("absoluttverdien av $tall er $absverdi"); 18. absoluttverdien av -5 er 5 Kan også legges direkte i et uttrykk. Eksempel: $tall=-5; $absverdi=abs($tall); $sum=abs($tall) + 6; print ("summen er $sum"); summen er 11 13 of 20 9/15/2017, 2:03 PM 14 of 20 9/15/2017, 2:03 PM

Egendefinerte funksjoner med returverdi Eksempel 19: Funksjonen printinvertertform gjøres om til en funksjon som returnerer en streng istedenfor å printe den. 1. 2. function returnerinvertertform( $fornavn, $etternavn ){ 3. $returstreng="$etternavn, $fornavn"; 4. return $returstreng; 5. //slutt funksjonsdefinisjon 6. 7. I det følgende skrives 2 navn i invertert form: </p> 8. 9. $fnavn1="michael"; 10. $enavn1="preminger"; 11. 12. //kaller funksjonen 13. $invertertstreng1 = returnerinvertertform($fnavn1, $enavn1); 14. $invertertstreng2 = returnerinvertertform("jens", "Olsen"); 15. print ("invertertstreng1: $invertertstreng1; invertertstreng2: $invertertstreng2") ; 16. skriver ut: Dokumentasjon på innebygde funksjoner www.php.net - dokumentasjon på utallige innebygde funksjoner Å programmere i PHP er i stor grad å benytte innebygde funksjoner å programmere sine egne (egendefinerte) funksjoner og benytte disse egendefinerte funksjoner benytter (så klart) også innebygde funksjoner. Informasjon om alle innebygde funksjoner finnes på nettstedet php.net. Der er dokumentasjon av alle innebygde funksjoner et tastetrykk unna. Det er viktig å kunne lese funksjonsdokumentasjon. Dokumentasjon på kjente innebygde funksjoner print count Dokumentasjonen skal gi oss nok opplysninger om funksjonen slik at vi kan bruke den slik den er ment brukt. Eksempel 21: (en del av) Dokumentasjonen av print-funksjonen: invertertstreng1: Preminger, Michael; invertertstreng2: Olsen, Jens Ordet "return" på linje 4 har følgende rolle: funksjonen avgir verdien i angitt variabel til programmet som kalte den funksjonen avsluttes, og programmet kjører videre, utstyrt med den nye verdien. Etter at funksjonen har kjørt (linjer 13 og 14), har variablene $invertertstreng1 og $invertertstreng2 hhv. verdiene "Preminger, Michael" og "Olsen, Jens". Eksempel 20: funksjonen minstav(arg1, arg2) finner og returnerer det minste av to tall 1. function minstav($tall1, $tall2){ 2. if ($tall1<$tall2){ 3. return $tall1; 4. else { 5. return $tall2; 6. 7. //end function 8. 9. //bruk av funksjonen: 10. $t1=3; 11. $t2=5; 12. $minst=minstav($t1, $t2); 13. print("fant ut at $minst er minst av $t1 og $t2"); skriver ut: fant ut at 3 er minst av 3 og 5 Ordet "return" på linje 3 og 5 har samme rolle som i forrige eksempel: funksjonen avgir verdien i angitt variabel til programmet som kalte den funksjonen avsluttes, og programmet som kalte den kjører videre, utstyrt med den nye verdien. Etter at funksjonen har kjørt (linje 12), har returvariabelen, $minst, verdien 3 print (PHP 3, PHP 4, PHP 5) print -- Output a string Description int print ( string $arg ) Outputs arg. Returns 1. Always int print (string $arg) (string $arg) betyr at funksjonen tar et argument som den tolker som en tekststreng. int betyr at funksjonen returnerer et tall ( "returverdien"). Dette er funksjonens formelle resultat. For print sin del pleier vi å ignorere returverdien. Eksempel 22: Dokumentasjon på og bruk av strlen-funksjonen: strlen (PHP 3, PHP 4, PHP 5) strlen -- Get string length Description int strlen ( string $string ) Returns the length of the given string. int strlen (string $string) betyr at funksjonen tar en variabel (eller direkteverdi) av type tekststreng som argument, og returnerer en verdi av type heltall (lengden, eller antallet karakterer i strengen). Verdien som returneres kan legges i en variabel. Sistnevnte kan, for eksempel printes. $lengde=strlen("michael"); print( $lengde ) ; 7 15 of 20 9/15/2017, 2:03 PM 16 of 20 9/15/2017, 2:03 PM

Eksempel 23: Dokumentasjonen av count-funksjonen: Eksempel 24: en PHP-bibliotekfil med én funksjon count ( PHP 4, PHP 5) count -- Count elements in an array, or properties in an object Description int count ( mixed $var [, int $mode] ) Returns the number of elements in var, which is typically an array, since anything else will have one element.... int count (mixed $var [, int $mode]) mixed $var betyr at funksjonen kan ta alle mulige typer variabler som første argument, int $mode betyr at funksjonen returnerer en verdi av type heltall (lengden, eller antallet innførsler i arrayen). Denne kan vi printe (eller bruke på annen måte) $byer=array("oslo", "Bergen", "Trondheim", "Stavanger", "Kristiansand"); $antallbyer = count($byer); print ("$antallbyer byer</p>") 5 byer [, int $mode] betyr at funksjonen har en valgfri parameter (skarpe klammer står ofte for valgfrihet), som modifiserer dens oppførsel. Denne ser vi som oftest bort fra når det gjelder count. Funksjoner og "hovedprogram" Et program er et tre av funksjonskall Et program er gjerne organisert slik at mellom start og slutt skjer instruksjonene én etter én - én instruksjon av gangen. Ofte vil enkeltinstruksjonene, sett fra programmet, være kall til funksjoner, enten innebygde eller egendefinerte. Enhver funksjon kaller så gjerne andre funksjoner. Vi får en tre-struktur av funksjoner som kaller funksjoner osv. De egendefinerte funksjonene kan enten defineres i samme fil som programmet, eller i separate filer Filen funksjoner.inc.php inneholder (foreløpig) bare én funksjon, som kan brukes flere steder. Filen mitt_program.php inneholder et program som bruker denne funksjonen ved å inkludere funksjoner.inc.php function minstav($tall1, $tall2){ if ($tall1<$tall2){ return $tall1; else{ return $tall2; //end function minstav filen funksjoner.inc.php 1. 2. include 'funksjoner.inc.php'; 3. //Nå er funksjonen minstav tilgjengelig, og kan brukes: 4. $t1=3; 5. $t2=5; 6. $minst=minstav($t1, $t2); 7. print("fant ut at $minst er minst av $t1 og $t2\n"); 8. filen mitt_program.php Instruksjonen "include" på linje 2 gjør filen funksjoner.inc.php og alle funksjoner i den (foreløpig bare én) tilgjengelig for vårt program. Linje 6 kaller funksjonen på samme måte som i det forrige eksemplet. Samme fil kan inkluderes av flere programmer. En slik fil kalles ofte en bibliotekfil. Et funksjonsbibliotek kan gjerne inneholde flere slike filer, som hver inneholder et antall funksjoner som hører naturlig sammen. Skrive funksjoner i egne filer (funksjonsbibliotek) En funksjon vi skriver kan brukes i mange sammenhenger, og ikke bare i programmet det ble skrevet for. PHP gir oss mulighet til å skrive funksjoner i egne filer, som vi kan deretter bruke i forskjellige programmer. 17 of 20 9/15/2017, 2:03 PM 18 of 20 9/15/2017, 2:03 PM

Print med "here-document" "print"-instruksjonen brukes ofte til å skrive én linje av gangen: print ("mitt navn er $fornavn\n"); Skal vi skrive flere linjer kan det ofte være ugreitt å bruke den vanlige "print"-syntaksen. Da er "here-dokument" et alternativ. Med "here-dokument" setter vi det som skal skrives ut mellom to forekomster av et markeringsord. markeringsordet er en hvilken som helst tegnkombinasjon. "here-dokumentet" tillater oss å skrive flere sammenhengende linjer til nettleseren, samtidig som vi slipper anførselstegn og parenteser foran og bak strengene våre linjeskifter blir respektert (i kildekoden) "here"-dokumentet tolker også variabler (se for eksempel $variabel i følgende eksempel Eksempel 25: Here-Dokument 1. 2. $variabel="michael"; 3. print <<<PRINTSLUTT 4. 5. Dette er en utskrift produsert 6. med hjelp av språket PHP. 7. Vi bruker here-document-metoden for å skrive flere linjer til 8. nettleseren. Kildevisningen følger linjeskiftene i HERE-dokument. 9. Men for å få linjeskiftene i Nettleseren, må vi bruke linjeskift, 10. eller avsnittsmerke. 11. </p> 12. Here-dokumentet tolker variabler. For eksempel: Mitt navn er $variabel. 13.PRINTSLUTT; 14. Dette er en utskrift produsert med hjelp av språket PHP. Vi bruker here-document-metoden for å skrive flere linjer til nettleseren. Kildevisningen følger linjeskiftene i HERE-dokument. Men for å få linjeskiftene i Nettleseren, må vi bruke linjeskift, eller avsnittsmerke. Here-dokumentet toker variabler. For eksempel: Mitt navn er Michael. Viktig: Denne konstruksjonen er teknisk litt sårbar. To ting som er viktig å passe på er: markeringsordet (i eksemplet over: PRINTSLUTT på linje 3 og linje 13) må ikke etterfølges av noen mellomrom markeringsordet (linje 13) må stå "helt inn til veggen", uten mellomrom eller tab foran Det er flere tekstoperasjoner som kan bruke denne formen, for eksempel 1. 2. $variabel=<<<varslutt Michael VARSLUTT; 3. print <<<PRINTSLUTT 4. 5. Dette er en utskrift produsert 6. med hjelp av språket PHP. 7. Vi bruker here-document-metoden for å skrive flere linjer til 8. nettleseren. Kildevisningen følger linjeskiftene i HERE-dokument. 9. Men for å få linjeskiftene i Nettleseren, må vi bruke linjeskift, 10. eller avsnittsmerke. 11. </p> 12. Here-dokumentet tolker variabler. For eksempel: Mitt navn er $variabel. 13.PRINTSLUTT; 14. Sist oppdatert 15/09-17 av Michael Preminger, michael.preminger@jbi.hio.no 19 of 20 9/15/2017, 2:03 PM 20 of 20 9/15/2017, 2:03 PM