- Kursmaterial
- Planering
- Arbete
- Kunskapsdokument
- Tutorials
- Applikationer
- Andra kurser
- Om Kursolle
2. Moment02 - PHP grunder
Det har blivit dags att lära sig grunderna i PHP. Eftersom denna kurs har Programmering01 som förkunskapskrav så kommer jag inte gå så djupt i att lära dig att programmera utan istället visa hur dina koder skrivs i PHP.
I varje del så kommer det finnas lite kort text om saker att tänka på, kodexempel, ibland länkar eller filmklipp och slutligen en eller flera uppgifter där du får träna på att skriva kod. Tanken med detta moment är att du löser uppgifter för att du själv skall bygga en egen referensbank mer än att du löser uppgifter för inlämning.
Tip
Du tar ansvar för att jobba med de delar som du själv känner att du behöver arbeta med. Din kompis kanske har bättre förkunskaper och lär sig PHP snabbare än du.
Genomgång [klicka för att visa]
Denna film slutar lite abrupt, jag kunde/borde klippa bort slutet och kanske ersätta det med lite nytt material men jag tror att det fungerar bra ändå. Jag var lite trött och hade lite ont om tid att fixa till det.
2.1 PHP & HTML
PHP är ett scriptspråk som bäddas in i html-kod för att skapa dynamiska hemsidor.
Namnet PHP är en rekursiv akronym: Hypertext Preprocessor.
Det finns alternativa tekniker för att skapa dynamiska hemsidor;
- ASP – Microsofts scriptspråk (bygger på Jscript eller Vbscript).
- JSP – ett scriptspråk byggt på java, ej att förväxlas med Javascript
- CGI – ett scriptspråk som mest användes i internets barndom (Perl/C++)
Motsatsen till PHP är statiska sidor tex HTML.
2.1.1 Webbservern
En kort film som visar på hur webbservern bearbetar en fil med php-skript.
Den webbserver som vi använder i denna kurs är XAMPP, har du inte redan installerat och konfigurerat den så är det hög tid.
2.1.2 Hur PHP och HTML samarbetar
PHP är som du förstått ett scriptspråk som med olika avancerade koder gör saker på en server, resultatet som användaren ser blir dock alltid html-kod. Detta gör att vi säger att php är inbäddat i html. För att klara av denna kursen på ett bra sätt så behöver du alltså vara duktig både på att programmera php men du behöver också kunna html och css, annars kommer det arbete du gör inte se bra ut.
Kodexempel
<!DOCTYPE html> <html lang="sv"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php echo "Detta är skrivet inne i kodtaggen"; ?> </body> </html>
För att infoga php i htmlkod så skapar du en kodtagg, se rad 8-10 i exemplet. När du kör skriptet i webbläsaren via webbservern så kommer utskriften se ut så här.
Utskrift
Detta är skrivet inne i kodtaggen
Testa nu att kopiera koden ovan, döp filen till test.php och lägg den i web_rooten som du skapade när du konfigurerade webbservern. Funkar det inte eller om du inte vet hur du gör så kika i kunskapsdokumentet: webbserver.
2.2 Utskrift
Nyckelordet för att skriva ut saker i php, alltså göra om kod till något som blir html-kod, är echo. Print fungerar på liknande sätt. Orsaken till att bägge fungerar är att PHP är tänkt att vara ett smidigt språk för alla programmerare oavsett från vilken miljö du kommer. Detta är både en fördel och en nackdel. Vill du grotta ner lite extra i skillnader mellan echo och print så sök på php.net.
Kodexempel
<!DOCTYPE html> <html lang="sv"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php echo "<h1>Rubrik med echo</h1>"; print "<h2>Rubrik med print</h2>"; ?> </body> </html>
Uppgift
Skapa ett php-dokument som du löser alla detta moments uppgifter i. Tanken är att om du kommenterar de olika delarna på ett bra sätt så skapar du ett eget referensdokument med mängder av kodexempel som du kan använda dig av senare.
- Skriv ut en rubrik (använd HTML-koder) som talar om att du i denna del jobbar med echo.
- Skriv ut ditt namn och någonting annat över två rader. Även här behöver du använda html-koder.
2.3 Kommentarer
Det är viktigt att kommentera den kod du skriver och det av flera olika anledningar. Nu i början så är det bra att kommentera för att sätta ord på det du har skapat, senare så är det bra att kommentera för att förstå större programmeringsflöden, framförallt om det var länge sedan du skapade koden. Det är också skönt att ha välkommenterad kod om du skall använda någon annans kod.
Kodexempel
<!DOCTYPE html> <html lang="sv"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <!-- kommentar i html-koden kommer inte skrivas ut i webbläsaren men den kommer synas i källkoden! --> <?php // När vi kommenterar i php så använder vi dubbla "slashtecken" # eller ett hashtecken. echo "<p>Att kommentera koden är viktigt.</p>"; /* * Vill vi skriva en kommentar över flera rader * så skriver vi på detta sätt. * De viktigaste tecknen är starten på rad 15 och * slut på rad 21, de andra stjärnorna "*" kan tas bort, * de används bara för att det skall se snyggare ut. */ print "<h2>Rubrik med print</h2>"; ?> </body> </html>
Uppgift
Här finns ingen specifik uppgift men från och med nu vill jag att du kommenterar de delar som du lär dig eller testar på i varje uppgift. Tränar du på loopar så är det loopen du kommenterar. När vi senare tittar på metoder kommer du få mer tips på effektiva kommentarer.
2.4 Datatyper
Datatyper är en viktig sak inom programmeringen. Alla variabler (och konstanter) som programmet skall hålla reda på har en datatyp. Det är datatypen som avgör vad man kan göra med just den typen av variabel. Det går att räkna med tal men inte med strängar osv.
För användaren verkar det som att PHP inte använder datatyper men skillanden mot de flesta andra språk är att PHP själv håller koll på vilken datatyp en viss variabel har. Om vi jämför med Java, C++ eller C# så talar vi om vid skapandet att en specifik variabel har en specifik datatyp och sedan kan det inte ändras när programmet körs. I PHP så har en viss variabel en bestämd datatyp vid ett enskilt tillfälle men den kan ändra datatyp lite senare. PHP-tolken tar själv hand om vilken datatyp som är lagrad i variabeln.
Det stora problemet uppstår för oss som användare som också måste hålla koll på vilken datatyp som finns lagrad i variabeln. Beroende på vad vi vill använda variabeln till så behöver vi ibland kolla att den har rätt datatyp, annars kommer applikationen inte att göra som vi förväntar oss.
De datatyper som finns i PHP är;
- boolean, bool - kan har värdet sant eller falskt, blir resultatet i uttryck.
- integer, int - lagrar heltal.
- float, double, real - lagrar decimaltal, (i php är dessa tre samma sak, i andra språk skiljer det en del).
- string - lagar textsträngar (egentligen en sekvens av bokstäver).
- array - en samling av värden (vi återkommer till den senare).
- objekt - en datatyp som representerar en grupp av variabler som på något sätt hänger ihop.
- NULL - en variabel som inte har något värde alls, två variabler med värdet NULL är inte lika.
- resource - variabeln innehåller en referens till någonting, tex ett databasanrop eller en fil.
Vill du läsa mer och se exempel på de olika datatyperna så finns det bra info här w3schools - datatyper.
Några av datatyperna har du redan använt och de flesta andra kommer du stöta på under kursen.
Viktigt är dock att trots att PHP inte skriver ut vilken datatyp en viss variabel har så behöver du ha koll på vad variabeln innehåller för att du skall kunna använda den på rätt sätt.
2.5 Variabler
En variabel kan ses som en behållare som innehåller någonting. I namnet variabel känner du nog också att innehållet i denna variabel kan variera, alltså bytas ut.
För att jobba med variabler i PHP så finns det några saker du behöver känna till;
- En variabel måste ha ett namn, vi kan använda alla siffror och bokstäver, undvik dock å/ä/ö, samt en del specialtecken för att döpa en variabel.
OBS1: Namnet får inte börja med en siffra.
OBS2: Mellanslag får inte användas i en variabel. - Vi talar om att en variabel är en variabel genom att den framför namnet har ett dollartecken ($).
- Eftersom du själv får döpa en variabel så använd beskrivande namn, , och är mycket mer beskrivande än , , och .
- God programmeringssed här innebär att vi använder gemener (små bokstäver) för att namnge variabler. Väljer vi att skapa längre variabelnamn som är sammansatta av flera ord så använder vi camelCase ($namnPaLangVariabel) eller använder oss av
underscore
($namn_pa_lang_variabel) och denna namngivning kallas snake_case, ingen är mer rätt än den andra men försök att vara konsekventa så att du inte blandar i din kod.
Kodexempel
<!DOCTYPE html> <html lang="sv"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php // varibeln $skola skapas och tilldelas texten "Alströmergymnasiet" $skola = "Alströmergymnasiet"; // Skriv ut att kursen går på vilken skola echo "Denna kursen läser vi på " . $skola; // Skapar två variabler $hojden = 3; $bredden = 4; // Skriv ut arean echo "<p>Arean på rektangeln är ".$hojden*$bredden."</p>"; // Vi kan också beräkna arean först $arean = $hojden*$bredden; // Skriv ut arean igen, denna gången med variabeln $area echo "<p>Arean på rektangeln är $arean.</p>"; ?> </body> </html>
Uppgift
- Skapa två variabler där du i den ena lagrar ditt namn och i den andra denna kursens namn. Gör sedan en utskrift om att
Johan läser kursen Webbserverprogrammering 1
- Skapa en variabel
Utskriften kan se ut så här;Om radien är 4 så är omkretsen 25.12 och arean 50.24.
som får värdet 4, beräkna sedan area och omkrets av en cirkel. Anta att PI har värdet 3.14.
2.6 Konkatenering
I avsnittet ovan så slog vi ihop variabler med strängar med en punkt. Detta kallas konkatenering och är ett vanligt sätt att sammanfoga olika strängar eller variabler med varandra. Varje programmeringsspråk löser detta på olika sätt och i PHP kommer ni märka att det ibland kan uppstå lite problem. Vi skall titta på vilka problem som kan uppstå och hur vi får det att fungera.
Kodexempel
<?php // Vi börjar med att definiera två variabler $tal1 = 3; $tal2 = 4; // Första försöket: skriva ut variablerna tillsammans med text // Här skriver vi ut en sträng direkt, vilket kan leda till ett oväntat resultat echo "<p>$tal1 + $tal2 = $tal1+$tal2</p>"; // Resultatet blir: 3 + 4 = 3+4, eftersom variablerna tolkas som en del av strängen // Andra försöket: vi använder punkt (.) för att konkatenera strängar och beräkningar echo "<p>$tal1 + $tal2 = " . ($tal1 + $tal2) . "</p>"; // Här blir resultatet korrekt: 3 + 4 = 7, eftersom parenteserna tvingar PHP att först utföra additionen // Ett säkert och enkelt sätt som alltid fungerar: dela upp utskriften i flera satser echo "<p>$tal1 + $tal2 = "; echo $tal1 + $tal2; echo "</p>"; // Här utförs först additionen, och sedan skrivs resultatet ut. Detta ger också 3 + 4 = 7. ?>
Förklaring av respektive exempel ovan.
- Direkt utskrift: När vi skriver ut med ", tolkas allt inom citattecknen som en sträng, och variablerna ersätts av sina värden, men ingen beräkning sker. Därför får vi ett oväntat resultat där beräkningen inte utförs.
- Konkatenering med parenteser: Genom att använda punkt `.` för att konkatenera strängar och omge beräkningen med parenteser , ser vi till att PHP utför additionen innan den konkatenerar resultatet med strängen. Detta ger oss det korrekta resultatet.
- Säker metod: Genom att dela upp utskriften i flera satser (med flera `echo`), kan vi vara säkra på att beräkningen utförs innan resultatet skrivs ut. Detta är ett pålitligt sätt som fungerar i alla situationer.
Om du vill vara säker på att beräkningar utförs korrekt innan de skrivs ut, använd alltid parenteser runt beräkningen och konkatenera strängen med `.`. Alternativt, dela upp utskriften i flera satser som i det sista exemplet.
2.6.1 Förstärka med
I PHP används
runt variabler för att tydligt markera variabelns gränser när du sätter in variabler direkt i strängar. Det kan vara särskilt användbart i situationer där det finns risk för att PHP kan missförstå var variabeln slutar och resten av strängen börjar. Här är några vanliga situationer där du bör använda runt variabler.2.6.1.1 När variabeln följs av ett tecken som kan vara en del av variabelnamnet
Om du vill lägga till ett tecken direkt efter en variabel som också skulle kunna vara en del av variabelnamnet, är det nödvändigt att använda
för att undvika förvirring.Kodexempel utan {}
<?php $fruit = "apple"; echo "I have a $fruitpie."; // PHP letar efter en variabel som heter $fruitpie ?>
Kodexempel med {}
<?php $fruit = "apple"; echo "I have a {$fruit}pie."; // PHP förstår att du vill använda $fruit och sedan lägga till "pie" ?>
2.6.1.2 När variabeln är inbäddad i en komplex sträng
Om du har en mer komplex sträng där du vill undvika fel, kan du använda
för att säkerställa att PHP tolkar variabeln korrekt.Kodexempel med {}
<?php $tal1 = 3; $tal2 = 4; echo "Summan av {$tal1} och {$tal2} är " . ($tal1 + $tal2) . "."; // Tydligt och korrekt ?>
2.6.1.3 För att förbättra läsbarheten
Även om det inte alltid är nödvändigt, kan du använda
för att förbättra läsbarheten, särskilt i komplexa strängar eller om du har många variabler.Kodexempel med {}
<?php $firstName = "John"; $lastName = "Doe"; $age = 28; $city = "New York"; $hobby = "reading"; // Utan {} kan strängen bli svår att läsa och förstå vid första anblicken echo "Hello, my name is $firstName $lastName. I am $age years old and I live in $city. My favorite hobby is $hobby."; // Med {} blir det tydligare vad som är variabler och vad som är vanlig text echo "Hello, my name is {$firstName} {$lastName}. I am {$age} years old and I live in {$city}. My favorite hobby is {$hobby}."; ?>
2.6.1.4 Vid användning av array-element direkt i strängar
När du använder ett element från en array i en sträng, bör du använda
för att tydligt ange vilket element du vill referera till.Arrayer kommer vi till lite senare i detta moment, men jag visar ändå ett kodexempel nu.
Kodexempel med {} i en array
<?php $person = ['name' => 'Alice', 'age' => 25]; echo "Hello, my name is {$person['name']} and I am {$person['age']} years old."; ?>
2.6.1.5 Sammanfattning
Du behöver använda
runt variabler när- Variabeln följs direkt av ett tecken som kan tolkas som en del av variabelnamnet.
- Du använder array-element direkt i strängar.
- Du vill förbättra läsbarheten eller undvika missförstånd i mer komplexa strängar.
I enklare situationer kan du ofta utelämna
, men det är bra att veta när det är nödvändigt för att undvika oväntade resultat.Uppgift
- Vi återanvänder en gammal uppgift, gå tillbaka till uppgift 4, den som beräknade area och omkrets av en cirkel. Denna uppgift skall vi nu göra på två sätt;
- Det första sättet då skall alla uträkningar göras i samband med att svaret skrivs ut. Här måste du använda konkatenering.
- I den andra lösningen får du använda variablerna och och seda skapa en utskrift utan konkatenering.
2.6 Strängar
Strängar både skiljer sig och liknar tidigare variabler som vi har använt. Det går ju inte att räkna med dem men vi kommer använda dem väldigt ofta för att bygga upp längre strängar som sedan skrivs ut.
Kodexempel
<?php // Exempel på hur vi kan jobba med strängar $str = "En liten"; // Här låter vi den ursprungliga strängen konkatenera med den nya strängen $str = $str . " sträng."; echo $str; // Utskriften blir i detta fallet "En liten sträng." // Vi kan också skriva det på följande sätt $str = "En liten"; $str .= " sträng"; // $str .= fungerar som "$str = $str ." ?>
2.6.1 Escapetecken
När vi jobbar med strängar så används tecknet " för att öppna och stänga en sträng. Om vi vill skriva ut ett sådant tecken så kommer vi få problem då PHP-tolken kommer läsa våra instruktioner felaktigt. Det finns ett sätt att gå runt detta och det gör vi med ett så kallat escapetecken (\) som gör att vi talar om för PHP-tolken att detta tecken behöver du inte tolka utan bara skriv ut det.
Kodexempel
<?php // escapetecken "\" gör att vi kan skriva ut tecknet " echo "Peter \"Foppa\" Forsberg"; // Andra tillfällen då vi behöver använda escaptecken är när vi vill skriva ut echo "\'"; // ' - enkelfnutt echo "\\"; // / - backslash echo "\$"; // $ - dollartecken, echo "\n"; // \n - ger radbrytning i html-koden men inte på sidan. echo "\t"; // \t - ger tab i html-koden men inte på sidan. // beroende på om vi omringar strängen med enkel- eller dubbelfnutt // så behöver vi köra escapetecken på samma tecken inne i strängen. ?>
Att hantera escapetecken är inte helt enkelt eller speciellt naturligt så det behöver du troligtvis träna på.
Uppgift
- Skriv ut följande text;
- Jag tycker det är ”kul” med PHP!
- Nej, jag skojade bara!
(dubbelfnutt (”) och radbrytning skall du göra med escapetecken. Radbrytningen skall både synas på sidan och i källkoden)
2.6.2 Strängfunktioner
Någonting som är väldigt användbart i PHP är den mängd av stringsfunktioner som finns tillhands. Att manipulera strängar är något du kommer behöva lära dig. Jag skall nu visa några av de som du har stört behov av att använda.
I exemplen nedan kommer det ibland finnas en alternativ funktion med prefixet mb_ vilket står för multibyte och dessa funktioner är särskilt anpassade för svenska tecken som å, ä och ö.
trim()
Det finns flera användningsområden, men den vanliga är att ta bort whitespace (mellanslag och tab) i början och slutet av en sträng. Användbart när vi får data från ett formulär.
$str = " Steve Jobs "; $str = trim($str); // Lagras som "Steve Jobs"
strlen() || mb_strlen()
Räknar antalet tecken i strängen.
echo strlen($str); // Skriver ut 10 ("Steve Jobs")
strtoupper() || mb_strtoupper()
Gör om strängen till enbart versaler.
echo strtoupper($str); // Skriver ut "STEVE JOBS"
strtolower() || mb_strtolower()
Gör om strängen till enbart gemener.
echo strtolower($str); // Skriver ut "steve jobs"
strrev() || ingen mb_strrev, men funktion finns här.
Vänder på strängen, extremt användbart!
echo strrev($str); // Skriver ut "sboJ evetS"
ucfirst() || ingen mb_ucfirst, men funktioner finns att hitta vid sökning
Gör första bokstaven i strängen versal. Visar här med att första göra hela strängen till gemena bokstäver för att sedan göra första bokstaven versal. OBS! När det är flera funktioner i varandra så börjar vi längst in i den innersta parentesen.
echo ucfirst(strtolower($str)); // Skriver ut "Steve jobs"
ucwords() || mb_convert_case
På samma sätt som ovan så använder jag ucwords vilket gör första bokstaven i varje ord versal.
echo ucwords(strtolower($str)); // Skriver ut "Steve Jobs"
stripos() || mb_stripos()
Kollar om det du söker efter finns i strängen.
echo stripos($str, "Steve"); // Skriver ut "0" då Steve börjar på position 0.
str_replace()
Byter ut en del av strängen mot något annat.
echo str_replace("Steve", "Kalle", $str); // Skriver ut "Kalle Jobs"
Det finns många bra funktioner som vi kommer använda vid olika tillfällen. Det viktigaste är att vi vet hur principen är att använda dem och också var vi hittar instruktionerna om hur de används. En bra sammanställning med tydliga exempel. Eller så går vi direkt till php.net och manualen för strängfunktioner.
Uppgift
- Skapa en variabel med innehållet ”WebbServerProgrammering 1”, du skall nu med olika strängfunktioner få fram, och skriva ut, olika strängar.
- 25 (längden på strängen)
- webbserverprogrammering 1 (bara gemener)
- WEBBSERVERPROGRAMMERING 1 (bara versaler)
- 1 gniremmargorprevresbbeW (första bokstaven stor, omvänd utskrift)
- Testa att ändra innehållet i strängen, använd en sträng som innehåller å, ä och/eller ö inne i strängen och inte först i strängen. Kontrollera att det fungerar som det skall, annars behöver du kika på
multibytefunktionerna
, alltså de som börjar medmb_
.
2.7 Arrayer
Array är en datatyp som är väldigt användbar inom programmering och någonting som du kommer använda ofta i php framförallt när vi senare jobbar med databaser. En array är en variabel som består av flera olika värden, du kan likställa den med en låda som har flera olika fack. I varje fack finns sedan ett innehåll som du kan använda dig av.
Tänk dig att en klass med 25 elever har haft ett prov och du skall sammanställa resultatet för alla 25 elever. Istället för att skapa 25 unika variabler, $resultat1, $resultat2 osv så skapar du en array med 25 komponenter, varje fack
kallas för en komponent.
I PHP, till skillnad från flera andra programmeringsspråk, behöver du inte tala om när du skapar arrayen hur många komponenter som den skall innehålla och du kan också lägga till och ta bort komponenter efter att arrayen är skapad.
2.7.1 Ge värde
Det finns olika sätt att ge arrayens komponenter olika värden. Jag ger ett kodexempel.
Kodexempel
<?php // När vi skapar en ny array kan vi ge den flera värden. $resultat = array(12, 14, 15); // När vi sedan vill lägga till flera värden måste vi skriva så här. // Det går att skapa arrayen och ge den värden på detta sättet direkt. $resultat[] = 16; // Skriver ut alla värden i arrayen echo "<pre>"; var_dump($resultat); echo "</pre>"; ?>
Utskrift
array(4) { [0]=> int(12) [1]=> int(14) [2]=> int(15) [3]=> int(16) }
2.7.2 Index
Som du säkert noterar ovan så får varje komponent ett index. Anger du inget index så kommer de automatiskt att räknas från 0 och uppåt. Att numrera från 0 är klassiskt inom programmeringen. Det går att skapa egna index om du vill, kanske används det för att göra en koppling till exempelvis riktnr.
Kodexempel
<?php // Här väljer jag att skriva index och värde på en rad, det går att // skriva på samma sätt som tidigare men detta blir mer lättläst. $riktnr = array( "031" => "Göteborg", "040" => "Malmö", "07XX" => "Mobil", "08" => "Stockholm" ); // Skriver ut alla värden i arrayen echo "<pre>"; var_export($riktnr); // var_export ger annan formattering echo "</pre>";
Utskrift
array ( '031' => 'Göteborg', '040' => 'Malmö', '07XX' => 'Mobil', '08' => 'Stockholm', )
2.7.3 Använda en komponents innehåll
Att använda en array är i stort sett som att använda vilken variabel som helst, den enda skillnaden är att du måste tala om namnet på arrayvariabeln och den komponents index som du vill använda.
Kodexempel
<?php $resultat = array(11, 12, 13, 14); // Ändra innehållet i den fjärde komponenten, index 3. $resultat[3] = 15; // Skriver ut alla värden i arrayen echo "<pre>"; var_export($resultat); echo "</pre>"; // Skriver ut innehållet i den fjärde komponenten echo "<p>$resultat[3]</p>"; ?>
Utskrift
array ( 0 => 11, 1 => 12, 2 => 13, 3 => 15, ) 15
2.7.4 Resurser & länkar
Webbguider på svenska, ArrayerUppgift
- Skapa två arrayer med minst tre komponenter, i den ena lagrar du förnamn och i den andra lagrar du mailadresser. Se till att det finns lika många namn som mailadresser.
Skriv sedan ut bägge arrayerna med hjälp av metoderna var_dump() eller var_export().
Avsluta med att skriva ut en text som liknar "Anders har mailadressen info@anders.se" genom att skriva ut innehållet från bägge arrayerna med samma index.
2.8 Selektioner
I alla programmeringsspråk så är selektioner ett centralt begrepp. Selektioner eller villkorssatser brukar vi kalla det på svenska, Control Structures heter det på engelska.
Oavsett vad det kallas så handlar det om val och att tala om för programmet att göra olika saker beroende på ett specifikt villkor. Vi kommer gå igenom två olika strukturer som i grunden fungerar på samma sätt, fastän de skrivs olika.
2.8.1 If-satsen
Den absolut vanligaste selektionen är att bara använda en if-sats. Genom att skriva en if-sats och i parentesen ha ett uttryck så får du din kod att utföra en operation. Vi gör ett enkelt exempel;
Kodexempel
<?php $age = 17; // Kollar om variabeln $age är mindre än 18 if($age < 18){ echo "Du är inte myndig!"; } ?>
Läs ut koden som OM $age är mindre än 18, då kommer koden mellan måsvingarna att köras.
Utskrift
Du är inte myndig!
Uppgift
- I php finns det mängder av inbyggda funktioner, en som kan användas skrivs date("H") och då får du fram webbserverns klockslag i timmar. Lagra detta värde i variabeln $timme och skriv sedan en if-sats som kollar om värdet är större än 16, om det är fallet så skriver du ut att skoldagen är slut.
Kodexempel
<?php $t = date("H"); echo $t; ?>
Utskrift
13
2.8.2 If - else
Nu när vi kan skriva uttryck så ser vi att det oftast blir två olika alternativ, antingen blir resultatet av uttrycket sant eller så blir det falskt. Vi vet hur vi tar hand om det sanna resultatet, nu är det dags att ta hand om det falska också.
Läs ut koden som Om - annars.
Kodexempel
<?php $age = 17; // Kollar om variabeln $age är mindre än 18 if($age < 18){ echo "Du är inte myndig!"; } else { echo "Du är myndig!"; } ?>
Om $age är mindre än 18 körs koden mellan de första måsvingarna, annars körs koden mellan de andra måsvingarna.
Det här kommer vi ganska så långt med. Har vi två val är det alltid if och else som vi skall jobba med.
Uppgift
- Skriv nu ut om det är skoldag eller inte, allt mellan 8 och 16 anser vi vara skoldag. Om klockslaget visar utanför den tiden så skriver du ut att det inte är skoldag.
2.8.3 If - else if - else
Ibland så räcker det inte endast med två alternativ då får vi lägga till med if - else if - else för att kunna göra rätt val.
Kodexempel
<?php $age = 17; // Kollar om variabeln $age är mindre än 18 if($age < 18){ echo "Du är inte myndig!"; } else if ($age >= 65) { // Kolla om $age är större än eller lika med 65 echo "Du är troligtvis pensionär!"; } else { echo "Du är myndig"; } ?>
OM $age är under 18 ..... annars om $age är större än eller lika med 65 ...... annars .......
Avsluta alltid ett flerval med en else-sats.
Det finns ingen anledning att göra följande kontroll;
Kodexempel
<?php $age = 17; // Kollar om variabeln $age är mindre än 18 if($age < 18){ echo "Du är inte myndig!"; } else if ($age >= 18) { echo "Du är myndig"; } ?>
Risken är större att du skriver fel och tex missar att ta hand om 18-åringen då du av misstag skriver ($age >18).
På samma sätt kan vi skriva många olika uttryck, det finns ingen begränsning om hur många du kan skriva. Det enda du behöver tänka på är att så fort ett uttryck passar så kommer koden att utföra de instruktioner som finns mellan de måsvingar i direkt anslutning till det korrekta uttrycket.
Kodexempel
<?php $age = 72; if($age < 2){ echo "Du är nog hemma med dina föräldrar!"; } else if ($age < 6 ) { echo "Förskolebarn"; } else if ($age < 12 ){ echo "Hoppas du får många läxor..."; } else if ($age < 20){ echo "Tonåring, högstadie, gymnasie eller börjat högskolan?"; } else if ($age > 64){ echo "Pensionär?"; } else { echo "Jobba, jobba, jobba!"; } ?>
Uppgift
- Ok. Vi överraskar lite, nu skall du skriva ut att "skoldagen inte har börjat" om klockan är före 8, att "skoldagen är slut" om klockan är efter 16 annars skriver du att "skoldagen pågår".
Utan måsvingar
Om du tittar på kod som finns på nätet kommer du rätt var det är upptäcka att det här med måsvingar ägnar sig inte alla av. Det beror på att du kan skippa måsvingen om det bara är en instruktion som skall utföras inne i en selektion. Jag rekommenderar dig dock att skriva ut dem då det är vanligt att det blir fel innan du är helt på det klara med hur det fungerar. Lär dig grunderna först och välj sedan de lite enklare lösningarna.
2.8.4 Switch
Switch-satsen är väldigt användbar när det är många olika alternativ. Även om man kan lösa i stort sett alla selektioner med både if-satser och switch-satser så är de naturligtvis extra bra på olika saker. När vi jobbar med if-satser så jobbar vi med tydligare uttryck, i switch-satsen så är vi mer ute efter att alternativet vi söker efter är ett heltal, ett tecken eller en sträng. Att köra switch med en sträng fungerar inte i alla programmeringsspråk, men det fungerar utmärkt med php.
Om vi tittar på strukturen så har vi en variabel som vi sätter in i parentesen och sedan jämför vi det värdet med olika "case" som vi sätter upp. Varje case är ett värde som variabeln kan anta. Efter alla case är uppräknade så avslutar vi med ett default-case som tar hand om alla andra alternativ. Detta går att jämställa med else-satsen tidigare.
Nästa grej att hålla koll på är "break;" som kommer efter alla satser som hör ihop med ett speciellt "case". Denna "break" avslutar switch-satsen och gör att programmet fortsätter efter den stängande måsvingen. Om vi struntar i break-satsen på rad 7 och rad 10 så kommer svaret alltid bli "Jag känner inte igen sporten" följt av det som du angivit. Detta kan vara användbart om vi vill göra beräkningar men oftast blir det bara svårt att kontrollera.
Enda chansen att upptäcka detta är att testa våra applikationer.
Kodexempel
<?php $favSport = "fotboll"; switch ($favSport) { case "fotboll": // Valet: fotboll echo "Det gröna fältets schack är sporten framför andra."; break; case "innebandy": // Valet: innebandy echo "Den finaste vinteridrotten!"; break; default: // Alla andra val echo "Jag känner inte igen sporten $favSport."; } ?>
Utskrift
Det gröna fältets schack är sporten framför andra.
Om vi har flera "case" som ger samma resultat eller som skall utföra samma sats så kan vi ställa upp koden på följande sätt.
Kodexempel
<?php // Ange i vilken månad du är född. $monthOfBirth = 11; switch($monthOfBirth){ case 12: // december case 1: // januari case 2: // osv..... $season = "vintern"; break; // break, annars går vi automatiskt... case 3: case 4: case 5: $season = "våren"; break; // ...vidare till nästa case... case 6: case 7: case 8: $season = "sommaren"; break; // ...vilket slutar med att... default: // ... alla skulle vara födda på hösten. $season = "hösten"; } echo "Du fyller år på $season"; ?>
Utskrift
Du fyller år på hösten
Uppgift
Skapa ett php-dokument
- Vi testar att lösa uppgift 11 med switch-satsen istället. Denna lösning är inte den snyggaste som går att göra men den visar tydligt på skillnaden mellan if och switch. (Om du inte vill skriva alla möjliga åldrar så kör t.ex. upp till 25.)
2.9 Uttryck och operatorer
I parentesen efter ett if- eller ett else-if-kommando så skapar vi ett uttryck. Alla uttryck som vi skapar måste ge svaret SANT eller FALSKT. Inga andra svar kommer fungera.
För att kunna skapa dessa uttryck behöver vi kunna använda oss av ett gäng operatorer inom två olika grupper, jämförelseoperatorer och logiska operatorer.
2.9.1 Jämförelseoperatorer
Dessa operatorer gör precis vad de säger, de används för att jämföra olika värden.
Operator | Namn | Exempel | Resultat av uttrycket |
---|---|---|---|
== | Lika med | $a==12 | Sant om $a är lika med 12, annars falskt. |
!= | Inte lika med, skiljt ifrån | $a!=12 | Sant om $a inte är lika med 12, annars falskt. |
< | Mindre än | $a<12 | Sant om $a är mindre än 12. |
> | Större än | $a>12 | Sant om $a är större än 12. |
<= | Mindre än eller lika med | $a<=12 | Sant om $a är mindre än eller lika med 12. |
>= | Större än eller lika med | $a>=12 | Sant om $a är större än eller lika med 12. |
=== | Identiska | $a===12 | Sant om $a har värdet 12 och är ett heltal, 12 är inte lika med "12"! |
!== | Icke identiska | $a!==12 | Sant om $a inte har värdet 12 eller inte är ett heltal. |
2.9.2 Logiska operatorer
Logiska operatorer används för att kunna skapa sammansatta uttryck.
Operator | Namn | Exempel | Resultat av uttrycket |
---|---|---|---|
and | och | $a and $b | Sant om $a och $b båda är sanna, annars falskt. |
or | eller | $a or $b | Sant om $a eller $b är sanna, är $a sant kollas inte $b. |
xor | exklusivt eller | $a xor $b | Sant om $a eller $b är sanna, men inte sant om bägge är sanna. |
! | icke | !$a | Sant om $a inte är sant. (Kallas att negera) |
2.9.3 Sammansatta exempel
Att lära sig bygga sammansatta uttryck är viktigt för att skriva bra kod. I många fall så går det att komma runt med flera mindre uttryck men vi vill ju skriva effektiv kod och då är detta bra att kunna.
Exempel | Betydelse |
---|---|
$age < 18 or $age > 65 | Sant om $age är mindre än 18 eller större än 65. Alltså koll om personen är ungdom eller pensionär. |
$age >= 18 and $haveJob != true | Sant om $age större än eller lika med 18 och $haveJob är falsk. Personen är myndig och arbetslös. |
Uppgift
Skapa ett php-dokument
- Skriv på minst ett sätt ett uttryck som gör att det där klockslaget som vi hämtade i förra övningen ger svaret att "Det är skoldag" om värdet är mellan 8 och 16. Hur många sätt kan du lösa uppgiften på?
2.10 Iteration
Det finns flera olika strukturer när vi skapar iterationer inom programmeringen, de är bra på olika saker så för att få den mest effektiva koden behöver du kunna använda flera olika typer.
2.10.1 For-loopen
For-loopen är den mest styrda loopen, här ligger fokus på att en operation genomförs x antal gånger.
Kodexempel
<?php for($i=0; $i<5; $i++){ echo "$i<br>"; } ?>
Inom loophuvudet, rad 2, så ser du att det finns tre argument;
- Variabeln $i får ett värde, i detta fall 0.
- Loopen skall köras så länge som villkoret är uppfyllt, i detta fall så länge som $i<5.
- Efter att de instruktioner som skall köras, koderna mellan måsvingarna, så händer något med variabeln, i detta fall så ökar värdet med 1, sedan körs hela loopen igen.
Utskrift
0 1 2 3 4
Uppgift
- Ulf har satt in 10 000kr på ett konto med 3 % årlig ränta, hur mycket pengar finns på kontot efter 15 år? Inga fler insättningar görs.
Välj själv hur du vill skriva ut svaret, med en enda rad eller en rad för varje år.
2.10.2 While-loopen
While-loopen är den loopen där uttrycket ligger i fokus, här vet vi inte hur många gånger som en operation skall utföras men vi vet när vi skall avsluta den.
Kodexempel
<?php $i = 0; while ($i < 5){ echo "$i<br>"; $i++; } ?>
While-loopen ser lite annorlunda ut mot for-loopen. De tre argument som var så tydliga i for-loopen finner vi även här;
- På rad 2 får variabeln $i ett värde, i detta fall 0.
- På rad 4 sätter vi villkoret för loopen. De skall köras så länge som villkoret är uppfyllt, i detta fall så länge som $i<5.
- På rad 6 så ger vi varabeln $i ett nytt värde, vi ökar dess värde med 1. Hade vi inte gjort detta så hade vi fått en oändlig loop.
När alla instruktionerna inom måsvingarna har genomförts så kollar loopen om den kan köras igen genom att uttrycket testas.
Utskriften av exemplet blir då;
Utskrift
0 1 2 3 4
Uppgift
- Antalet råttor i en stad är 100 stycken, varje månad dubblas populationen av råttor, hur många månader dröjer det innan det finns en miljon råttor i staden?
Välj själv hur du vill skriva ut svaret, med en enda rad eller en rad för varje månad.
2.10.3 Do-while loopen
Do-while är väldigt lik en while-loop fast med en skillnad, denna loop kommer alltid köras minst en gång. Orsaken till detta är att villkoret kommer sist i loopen, efter att det redan har körts en gång. Inom php så är denna loop inte så extremt användbar, den gör sig bättre inom andra programmeringsspråk framförallt när man skapar menyer eller andra funktioner som alltid skall köras minst en gång.
Kodexempel
<?php $i = 0; do{ echo "$i<br>"; $i++; } while ($i < 5); ?>
Våra tre argument som vi nu känner igen finner vi även här;
- På rad 2 får variabeln $i ett värde, i detta fall 0.
- På rad 7 sätter vi villkoret för loopen. De skall köras så länge som villkoret är uppfyllt, i detta fall så länge som $i<5.
- På rad 6 så ger vi varabeln $i ett nytt värde, vi ökar dess värde med 1. Hade vi inte gjort detta så hade vi fått en oändlig loop.
När alla instruktionerna inom måsvingarna har genomförts så kollar loopen om den kan köras igen genom att uttrycket testas.
Utskriften av exemplet blir då;
Utskrift
0 1 2 3 4
2.10.4 foreach
De tre iterationer vi har tittat på kan vi styra på olika sätt, vi kan bestämma startvärdet, hur länge loopen skall fortgå och även hur stora steg vi skall ta. Men om vi vill loopa från start till slut, i tex en array, och göra något med alla komponenter så finns det ett enklare sätt. Då är foreach-loopen att föredra.
Kodexempel
<?php // skapar en array, kanske med tärningsslag $array = array(3,3,6,5,1); // Looar igenom hela arrayen med foreach foreach($array as $a){ echo "$a<br>"; // Skriver ut varje värde } ?>
Vilket ger utskriften;
Utskrift
3 3 6 5 1
2.10.5 foreach med index
Eftersom en array innehåller komponenter som har ett index så kan vi använda detta även i foreach-loopen. Vi kikar på ett gammalt exempel där vi lagrade riktnummer för några städer.
Kodexempel
<?php // Skapar en array med index som skall användas $riktnr = array( "031" => "Göteborg", "040" => "Malmö", "07XX" => "Mobil", "08" => "Stockholm" ); // Skriver ut alla värden i arrayen foreach($riktnr as $nr => $ort){ echo "<p>$ort har riktnr $nr.</p>"; } ?>
Vilket ger utskriften;
Utskrift
Göteborg har riktnr 031 Malmö har riktnr 040 Mobil har riktnr 07XX Stockholm har riktnr 08
2.10.6 break & continue
I alla loopar kan det ibland finnas anledning att avbryta loopen i det specifika varvet eller helt och hållet hoppa ur loopen. Då är break eller continue bra att använda.
Break gör vad den låter som, den avbryter loopen och låter sedan koden fortsätta efter loopen.
Kodexempel
<?php // loopar från 1 till 10 for($i=1; $i<=10; $i++){ if($i%2 == 0){ // kollar om talet är jämnt break; // Abryter loopen om sant } echo "$i<br>"; // skriver ut } ?>
Notera % som i programmeringsvärlden heter modulus. Modulus är en räkneoperator som utför en heltalsdivision och ger resten som resultat.
blir då 0, eftersom 4 delat med 2 går jämnt upp och resten blir 0. blir då 1, 7 går två gånger i 3 och kvar blir 1.Vilket ger utskriften;
Utskrift
1
Continue avbryter det varvet som loopen just nu utför, men hoppar sedan vidare till nästa varv.
Kodexempel
<?php // loopar från 1 till 10 for($i=1; $i<=10; $i++){ if($i%2 == 1){ // kollar om talet är ojämnt continue; // Abryter loopen om sant } echo "$i<br>"; // skriver ut } ?>
Vilket ger utskriften;
Utskrift
2 4 6 8 10
Uppgift
- Du skall med hjälp av en iterator samt break och continue se till att skriva ut talen 1-20 med följande regler. Alla tal som är jämnt delbara med 3 skall inte skrivas ut, när du kommer till 15 så skall loopen avbrytas.
Utskriften skall bli
Utskrift
1 2 4 5 7 8 10 11 13 14
2.11 Funktioner
Vi har tidigare tittat på några inbyggda funktioner och det finns väldigt många sådana men vi kan också skapa egna funktioner.
En funktion är en del kod som utför någon beräkning, utskrift eller något liknande som vi behöver i vår kod. En funktion är perfekt att använda till saker som skall göras flera gånger, behöver vi ändra något så andras det bara på ett ställe och slår igenom i hela applikationen. I vissa programmeringsspråk pratar vi om metoder men det är samma sak som en funktion. Grundinställningen till en funktion är att varje funktion skall göra en sak, behöver vi utföra två beräkningar så vill vi oftast dela upp dem i två funktioner.
Varför vill vi ha två funktioner? Tänk dig att vi skall skapa funktioner för att beräkna area och omkrets på en cirkel. I detta exempel kan vi skapa en gemensam funktion som räknar ut båda sakerna samtidigt och skriver ut resultatet, men sedan vill vi bara beräkna arean i en annan uppgift och har vi då en sammansatt funktion så kan vi inte använda den utan måste skapa en ny. Av denna anledning så är det enklare att skapa två funktioner som vi anropar.
2.11.1 Anrop
Nu kör vi lite exempel, först kollar vi på anropet till en funktion. Allt vi gör skall kommenteras och det gäller inte minst funktioner. Eftersom den skall kunna användas flera gånger i samma applikation och även återanvändas i andra projekt och kanske tom av andra utvecklare är dokumentation av en funktion väldigt viktig.
Anropet till funktionen sker i den vanliga koden.
Kodexempel
<?php /* * print_footer * Skriver ut en sidfot */ function print_footer(){ echo "<footer>© Förnamn Efternamnsson</footer>"; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php print_footer(); ?> </body> </html>
När du tittar på funktionen så består den av ett funktionshuvud och en funktionskropp. Funktionshuvudet innehåller funktionens namn och eventuella inparametrar. Funktionskroppen är själva koden som utför det som funktionen skall utföra.
Uppgift
- Skapa en funktion som skriver ut Jag heter
förnamn efternamn
och jag går i klassklassens
namn. Anropa sedan denna funktion så att texten skrivs ut i dokumentet.
2.11.2 Inparametrar
Vi kan skicka en inparameter till funktionen ifall funktionen behöver någon input att jobba med. Det kan vara vilket data som helst, en sträng, ett tal eller kanske en array.
Vi kollar på ett exempel där vi räknar och skriver ut arean på en kvadrat.
Kodexempel
<?php /* * kvadratens_area * Beräknar och skriver ut kvadratens area. */ function kvadratens_area($sida){ $area = $sida * $sida; echo $area; } $sida = 4; echo "När kvadratens sida är $sida så blir arean: "; kvadratens_area($sida); ?>
Utskriften blir då;
Utskrift
När kvadratens sida är 4 så blir arean: 16
Nu använder jag
som variabel både i programkoden och som inparameter till funktionen. Det är viktigt att veta att detta är två helt olika variabler. Även om de heter samma så är variabeln inne i funktionen lokal och kommer bara finnas och fungera där inne. Om jag vill använda denna variabel senare så måste jag returnera variabelns värde.Uppgift
- Du skall skapa en funktion som tar
Anropa sedan funktionen från din kod, gör gärna två olika anrop, med olika radier, för att se att det fungerar som det är tänkt. som inparameter och sedan skriver ut både area och omkrets för cirkeln inne i funktionen. Detta skall du nu göra med en funktion. Använd konstanten M_PI som värde på PI.
2.11.3 Returvärde
Ibland vill vi inte skriva ut från funktionen utan få det uträknade värdet och göra något annat med det än att bara skriva ut det.
Kodexempel
<?php /* * kvadratens_area * Beräknar kvadratens area. */ function kvadratens_area($sida){ $area = $sida * $sida; return $area; } $sida_kvadrat1 = 4; $sida_kvadrat2 = 6; echo "Den totala arean på de två kvadraterna med sidorna $sida_kvadrat1 och $sida_kvadrat2 är "; echo kvadratens_area($sida_kvadrat1) + kvadratens_area($sida_kvadrat2)."."; ?>
Utskrift
Den totala arean på de två kvadraterna med sidorna 4 och 6 är 52.
Uppgift
- Nu skall du göra om uppgift 2 och istället skapa två funktioner som returnerar resultatet så att du kan skriva ut det genom anrop från koden.
2.11.4 Användning
Nu har du sett exempel på funktioner, då gäller det att fundera på när vi skall använda funktioner. Använd funktioner till:
- uppgifter som kan avgränsas på något sätt
- uppgifter som är repititiva
- kod som du återanvänder i andra program
Ett enkelt sätt är att lagra alla funktioner i en extern fil som inkluderas när den behövs, då ligger inte alla funktioner i samma fil som anropar funktionen. Det är alltid enklare att ändra saker på ett ställe än att hela tiden hålla koll på att alla filer är uppdaterade.
Kodexempel
Filen functions.php
<?php // functions.php, här samlas alla funktioner /* * kvadratens_area * Beräknar kvadratens area. */ function kvadratens_area($sida){ $area = $sida * $sida; return $area; } ?>
Kodexempel
Vår ordinarie programfil
<?php // inkluderar alla funktioner include('functions.php'); $sida_kvadrat1 = 4; $sida_kvadrat2 = 6; echo "Den totala arean på de två kvadraterna med sidorna $sida_kvadrat1 och $sida_kvadrat2 är "; echo kvadratens_area($sida_kvadrat1) + kvadratens_area($sida_kvadrat2)."."; ?>
Smidigt, nu har jag alla funktioner på ett ställe, behöver jag ändra något så gör jag det bara där. Sedan kan jag inkludera funktionsfilen på varje sida där jag behöver använda en funktion.
Uppgift
- Flytta nu alla funktioner som du har skrivit i uppgifterna ovan och lägg dem i en fil som heter functions.php och inkludera den filen så att du når dina funktioner. Alla tidigare funktioner skall fortfarande fungera även om samtliga funktioner är flyttade.
2.12 Fler uppgifter
Här finns några lite större uppgifter som du kan genomföra för att träna lite extra.
2.12.1 Färgad tabell
Här kommer en uppgift där du behöver använda flera iterationer och selektioner för att lösa.
Uppgift - färgad tabell
Uppgiften är att skapa en tabell med två kolumner som listar alla tal mellan 1 och 20. Alla tal som är jämnt delbara med 3 skall ha en annan bakgrundsfärg än de andra, samma gäller för de talen som är jämnt delbara med 5, fast dessa skall ha en tredje färg. I den andra kolumnen skall du rita ut lika många stjärnor som talet i kolumn ett är. Se exemplet nedan om du tycker det verkar oklart.
- Klurighet 1: hur gör du med tal som både är delbara med 3 och 5?
- Klurighet 2: Kan du färga hela raden och inte bara cellen?
Utskrift
1 | * |
2 | ** |
3 | *** |
4 | **** |
5 | ***** |
6 | ****** |
7 | ******* |
8 | ******** |
9 | ********* |
10 | ********** |
11 | *********** |
12 | ************ |
13 | ************* |
14 | ************** |
15 | *************** |
16 | **************** |
17 | ***************** |
18 | ****************** |
19 | ******************* |
20 | ******************** |
Redovisning
Redovisa detta moment på följande sätt;
- Lägg upp dina övningar på din hemsida. Lägg dem på en sida med tydliga förklaringar eller skapa flera sidor med olika uppgifter. Viktigt att jag, och andra, kan gå mellan sidorna så vi inte missar något.
- Länka sidan/sidorna från din samlingssida.
- Länka också till CSource och se till att jag den vägen kan se all din kod.
- I wordpress så reflekterar du över ditt arbete, berätta vilka uppgifter du gjort och varför. Resonera kring om PHP är svårt eller enkelt och vad du har lärt dig samt vilka problem du eventuellt har haft. Länka också till den sidan, se sidorna, där dina exempeluppgifter finns.
Frågestöd - Hur har arbetet med att lära sig grunderna i PHP gått?
- Vilket annat programmeringsspråk, om något, känner du dig mest bekväm i? Jämför detta språk med PHP, likheter, skillnader, och en allmän känsla över att programmera i webbmiljö.
- Vilka resurser har du använt dig av för att lära dig PHP? Någon av de som jag har länkat eller någon annan bra resurs? Har du tips på någon bra resurs så länka gärna denna.