Hver gang funksjonen printhallo kalles utføres instruksjonene spesifisert i den. [Kurssidene] [ ABI - fagsider bibin ] //funksjonskall printhallo(); //enda en gang printhallo(); Michael Preminger (michaelp@hio.no) 30/09-16 HALLO HALLO Byggestein så langt: variabler, betinget utføring, løkker: (for), while enkle arrayer I tillegg: innebygde funksjoner, slik som print() og count(). Funksjoner flere innebygde PHP-funksjoner fra PHP-biblioteket egendefinerte funksjoner funksjoner og hovedprogram En liten introduksjon Funksjon: et lite hjelpeprogram, med navn, som utfører en bestemt oppgave. Ser vekselvis på egendefinerte og innebygde funksjoner. En funksjon: en sekvens av instruksjoner som har et navn. //funksjonsdefinisjon function printhallo(){ print("<p>hallo</p>"); } Å skrive en funksjon er det samme som å lage en ny "privat" PHP-kommando til eget bruk. Eksempel 1 : Funksjonsdefinisjon og funksjonskall i en PHP-fil //funksjonsdefinisjon function printhallo(){ print("<p>hallo</p>"); } <!DOCTYPE... <html xmlns="http://www.w3.org/1999/xhtml"> <head>... </head> <body> <p>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 Navnet (her printhallo) kan brukes til å kalle funksjonen. 1 of 16 30.09.2016 12:24 2 of 16 30.09.2016 12:24
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 hver gang vi trenger å utføre de dele opp sammensatte problemer inn i oversiktlige deloppgaver (en funksjon utfører en slik deloppgave) strukturere våre programmer slik at de blir leselig for oss selv og andre printhallo (): egendefinert funksjon Eksempel 2 : 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 3 : 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 ("<p>$antallbyer byer</p>") 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. ) 3 of 16 30.09.2016 12:24 4 of 16 30.09.2016 12:24
Eksempel 4 (enkel egendefinert funksjon -uten parametre) Vi skriver egendefinerte funksjoner 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. Jeg har definert funksjonen skrivopphavsrett(). Denne ligner på printhallo() vi skrev tidligere. Når den kalles, skriver den en fast tekststreng i en HTML-fil, en copyright seksjon. 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. <p>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. 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. 5 of 16 30.09.2016 12:24 6 of 16 30.09.2016 12:24
Eksempel 6: printinvertertform($fornavn, $etternavn) Innebygde funksjoner som har parametre (og tar argumenter) 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 5: 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("<p> 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. <p>dette er et meget enkelt dokument, med bare en linjes innhold. </p> 13. 14. skrivopphavsrett("jens Olsen"); 15. 16. </body> 17. </html> Et lite program som definerer en funksjon og kaller den 1. 2. function printinvertertform( $fornavn, $etternavn ){ 3. print("<p>$etternavn, $fornavn</p>"); 4. } //slutt funksjonsdefinisjon 5. 6. <p>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 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. 7 of 16 30.09.2016 12:24 8 of 16 30.09.2016 12:24
Egendefinerte 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 7-10: Flere innebygde funksjoner De fleste innebygde funksjoner har returverdier. Noen funksjoner produserer en tekststreng og returnerer denne. Eksempel: 7. funksjonen date: $klokkestreng=date("g\.i\.s"); print("klokkeslett= $klokkestreng"); klokkeslett= 12.24.11 Andre funksjoner produserer tall som sine returverdier. 8. strlen(argument) beregner lengden ( antall tegn) på tekststreng-argumentet: $lengde=strlen("michael"); print( $lengde); Eksempel 11: 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. <p>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: 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". 7 9. 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"); 10. 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 9 of 16 30.09.2016 12:24 10 of 16 30.09.2016 12:24
Eksempel 12: 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 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. Eksempel 13: (en del av) Dokumentasjonen av print-funksjonen: 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 14: 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 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. 11 of 16 30.09.2016 12:24 12 of 16 30.09.2016 12:24
Eksempel 15: Dokumentasjonen av count-funksjonen: Eksempel 17: 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 ("<p>$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. Et program er et tre av funksjonskall 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. 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 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. 13 of 16 30.09.2016 12:24 14 of 16 30.09.2016 12:24
Eksempel 18: Here-Dokument "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 1. 2. $variabel="michael"; 3. print <<<PRINTSLUTT 4. <p> 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. <p> 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 30/09-16 av Michael Preminger, michael.preminger@jbi.hio.no 15 of 16 30.09.2016 12:24 16 of 16 30.09.2016 12:24