240 likes | 393 Views
Organisering av kode (Kapittel 5). Mål. Forstå inkludering er og hvilken gevinst det gir Lære å utvikle egne funksjoner Forstå variablenes virkemåte. Hva er inkludering?. Vi bruker inkludering av filer hovedsaklig for: Gjennbruk av kode Enklere vedlikehold
E N D
Mål • Forstå inkludering er og hvilken gevinst det gir • Lære å utvikle egne funksjoner • Forstå variablenes virkemåte
Hva er inkludering? • Vi bruker inkludering av filer hovedsaklig for: • Gjennbruk av kode • Enklere vedlikehold • Vanlig å dele opp ulike deler av et script i isolerte deler (topp, bunn, meny) • Inkludering gjøres med funksjonene: • include, require, include_once og require_once
Eksempel på inkludering main.php topp.html meny.php bunn.html
Legg filene dine i et hierarki • Du står helt fritt til å velge filstruktur selv • Finn deg en struktur du syns er fornuftig og liker og hold deg til den
Eksempel på hierarki foret enkelt nettsted / config.php - Konfigurasjons-script index.php - Hovedside include/ topp.inc - Topptekst bunn.inc - Bunntekst meny.inc - Meny nyheter.html produkter.html bestilling/ index.php side2.php omoss.html kontaktskjema.html kontaktskjema.php
Eksempel på struktur foren webapplikasjon / config/ - Konfigurasjonfiler default.ini - Standard konfigurasjon docs/ - Dokumentasjon lib/ - Bibliotek-kode sql/ - Database script www/ - Rotkatalog for script css/ - Stilark js/ - Javascript images/ - Bilder index.php - Hovedside for applikasjonen README - Kort om applikasjonen INSTALL - Installasjonsveiledning ChangeLog - Endringslogg (dagbok)
Eksempel på inkludering variable.php: <?php $frukt = “pære”; $farge = “grønn”; ?> test.php: <?php echo “En $frukt er $farge”; // En er include “variabler.php”; echo “En $frukt er $farge”; // En pære er grønn ?>
Typisk bruk av inkludering include/topp.inc: <html> <head><title>Dagbladet.no</title></head> <body> include/bunn.inc: </body> </html> nyheter.php: <?php include 'include/topp.inc'; ?> <h1>Hus seilte 700 meter</h1> <p>- og grunnstøtte ute i fjorden. Fikk berget hunden og katten.</p> <?php include 'include/bunn.inc'; ?>
Egendefinerte funksjoner • Navngitt samling av kode • Brukes til å organisere og gjennbruke kode ved at de kan kjøres flere ganger fra ulike steder • Gjør scriptet ditt både mindre og enklere og forstå • Uten funksjoner er det tilnærmet umulig å skrive kode som kan vedlikeholdes på en enkel måte
$a $b $c $a $b $resultat $resultat $c Egendefinerte funksjoner • En funksjoner tar imot ingen, en eller flere argumenter og kan produsere et resultat function function function
Opprette egendefinerte funksjoner • Deklareres med nøkkelordet function • Må ha et unikt navn • Bruk store bokstaver eller understrek for å skille ord • Trenger ikke være deklarert før den taes i bruk <?php function navn() { // kropp } function navn($arg1, arg2) { // kropp } function legg_sammen($a, $b) { } function leggSammen($a, $b) { } ?>
Eksempel på egendefinert funksjon <?php function add($a, $b) { return $a + $b; } $total = add(2, 2); echo $total; // 4 ?> <?php $total = add(2, 2); echo $total; // 4 function add($a, $b) { return $a + $b; } ?>
Eksempel på funksjon for datovelger <?php function datovelger($navn, $fra, $til, $valg) { $valg = getdate($valg); $dag = "<select name=\"{$navn}_dag\">\n"; for($i=1; $i<=31; $i++) { $dag .= "\t<option value=\"$i\"".($valg['mday']==$i?'selected':'').">$i</option>\n"; } $dag .= "</select>\n"; $mnd = "<select name=\"{$navn}_mnd\">\n"; for($i=1; $i<=12; $i++) { $mnd .= "\t<option value=\"$i\"".($valg['mon']==$i?'selected':'').">$i</option>\n"; } $mnd .= "</select>\n"; $aar = "<select name=\"{$navn}_aar\">\n"; for($i=$fra; $i<=$til; $i++) { $aar .= "\t<option value=\"$i\"".($valg['year']==$i?'selected':'').">$i</option>\n"; } $aar .= "</select>\n"; return $dag.$mnd.$aar; } echo datovelger('test', 1970, 2006, time()); ?>
Inkludering og funksjoner • Etterhvert som du lager funksjoner er det vanlig å samle de i et “funksjonsbibliotek” som kan inkluderes i scriptene dine functions.php: <?php function sum($a, $b) { return $a + $b; } function difference($a, $b) { return $a - $b; } ?> index.php: <?php include 'functions.php'; echo sum(2, 2); // 2 echo difference(4, 2); // 2 ?>
Variablenes virkeområde og levetid • Virkeområde (variable scope) • Konteksten en variabel er definert i • Globale variabler (global scope) • Normalt eksisterer variabler så lenge scriptet kjører • Lokale variabler (local scope) • En variabel opprettet i en funksjon eksisterer bare i funksjonen og blir slettet når funksjonen er utført
Eksempeler på virkemåte • Globale variabler vil også være definert i alle inkluderte filer <?php $a = 1; // global variabel include “fil.php”; function test() { echo $a; // lokal variabel } test(); // “” ?> fil.php: <?php echo $a; // 1 ?>
global <?php $a = 1; $b = 2; function sum() { global $a, $b; $b += $a; } echo $b; // 2 sum(); echo $b; // 3 ?> • Brukes for å få tilgang til variabler som er eksisterer utenfor funksjonen • Merk: Konstanter er alltid tilgjengelig i funksjoner
static <?php function nestePartall() { static $i = 0; $i += 2; return $i; } echo nestePartall(); // 2 echo nestePartall(); // 4 echo nestePartall(); // 6 ?> • Brukes til å beholde verdien på variabelen • Nyttig ved opptelling av verdier
Valgfrie argumenter • Argumenter kan tilegnes en standard verdi i signaturen til funksjonen • Et valgfritt argument kan utelates ved kall på funksjonen • Alle valgfrie argumenter må ligge på slutten av signaturen <?php function navn($a, $b = 5) { // kropp } navn($arg1); navn($arg1, $arg2); ?>
Eksempel på valgfritt argument test.php: <?php function wrap_html_tag($string, $tag = 'b') { return “<$tag>$string</tag>”; } $string = “Litt tekst”; echo wrap_html_tag($string); echo wrap_html_tag($string, 'i'); ?> Resultat: <b>Litt tekst</b> <i>Litt tekst</i>
Overføring av referanser(pass-by-reference) • Brukes for å beholde endringer gjort på en variabel i en funksjon <?php function leggTil(&$a, $b) { $a += $b; } $a = 0; leggTil($a, 2); echo $a; // 2 leggTil($a, 2); echo $a; // 4 ?>
Eksempel på overføring av referanser <?php function wrap_html_tag(&$string, $tag = 'b') { $string = “<$tag>$string</tag>” return $string; } $string = “Litt tekst”; echo wrap_html_tag($string); echo wrap_html_tag($string, 'i'); ?> Resultat: <b>Litt tekst</b> <b><i>Litt tekst</i></b>
Dynamiske funksjonskall • En variabel kan brukes som funksjonsnavn ved et funksjonskall • Tips: Sjekk alltid om funksjonen faktisk eksisterer dersom det er mulighet for at den ikke gjør det <?php function a() { echo “Funksjon A”; } function b() { echo “Funksjon B”; } function c() { echo “Funksjon C”; } $funksjon = $_GET['funksjon']; if(function_exists($funksjon)) { $funksjon(); } else { echo “$funksjon eksisterer ikke”; } ?>