PHP Grunder
Vad är PHP
Idag står PHP för "PHP: Hypertext Preprocessor".
PHP är ett webbserverbaserat skriptspråk. Koden(filen) som skickas till webbservern interpreteras av serverns och sluprodukten blir en html-webbsida. För att detta ska fungera så måste webbserveradministratören installera PHP på servern. Du programmerar filer som skickas upp till servern. När någon sedan anropar din php-sida, så körs koden och den bygger ihop en html-sida som skickas tillbaks till den som ropade på din sida. I slutet på 90-talet lanserades PHP. Detta är "Back-end" programmering medan när vi skapade färdiga sidor med HTML-CSS-Javascript är "Front-end" skapande.
PHP är fritt att ladda ner och använda, bara vi följer "PHP License".
Andra språk som gör samma sak är Microsofts ASP och Sun's JSP(Java Server Pages).
PHP anses vara enkelt att lära och lätt att arbeta med men ändå kraftfullt. Du som har programmerat i Javascript, C/C++, C# eller Java känner igen all grundläggande struktur. Från och med PHP version 5 så ges även stöd för objektorienterad programmering.
Hur fungerar PHP
Delavsnitt
Grunder
Variabler
Villkor - If, Else
Switch
While och For
Array (Vektor, Fält)
Flerdimensionella arrayer
Alla exempel på denna sida
Grunder
Här kommer vi att börja med grundläggande PHP, lite hur det fungerar, variabler, villkor, loopar och lite om arrayer.
Till att börja med så är PHP inget som ersätter HTML och JavaScript utan ett språk som används för att skapa sidor uppbyggda av HTML och JavaScript. Detta sker här redan vid själva anropet av sidan på servern. PHP används för att skapa webbsidorna.
Ytterligare en skillnad är att en browser aldrig ser röken av PHP-koden,
istället tolkar din webbserver php-koden och skickar den resulterande HTMLkoden
till browsern. HTML/JavaScript-koden tolkas av din browser. PHP körs på
servern medans HTML/JavaScript körs i webbläsaren på klientsidan.
Varför vill man använda PHP? T ex vill man skapa sidor som beror på
vissa indata som användaren skickat när man ropar på en webbsida.
Vill man lagra eller hämta information i en databas så passar PHP
utmärkt. T ex en enkel besöksräknare.
Du ska självklart använda HTML5-standard. Nedan i exemplen skrivs vissa taggar något förenklade och utan doctype.
Du separera givetvis stilmall och javascript från html-filen(i största möjiliga mån). Stilmallen länkas in med link och attributet href, javascript med script och attributet src.
Enklaste möjliga HTMLsida(demo1.htm):
<html> <head> <title>Demol</title> </head> <body> Hej och välkommen till PHP! </body>br> </html>
Motsvarande sida kan även skrivas med ren php-kod (demo1a.php, observera att så fort vi använder minsta lilla php-kod i filen så döper vi filen till *.php och skickar den till servern för att kunna testköra den):
<?php //hela filen som php-kod echo "<html>"; echo " <head>"; echo " <title>Demo1</title>"; echo " </head>"; echo " <body>"; echo " Hej och välkommen till PHP-kursen!"; echo " </body>"; echo "</html>"; ?>
eller så kan bara en del av filen skrivas med php-kod (demo1b.php):
<html> <head> <title>Demo1</title> </head> <body> <?php //en del av filen som php-kod echo "Hej och välkommen till PHP-kursen!"; ?> </body> </html>
Det sista exemplet är det som kommer användas mest och det är
just blandningen av vanlig HTML-kod och PHP-kod som är det effektivaste
sättet.
Har du programmerat bara lite i C(C++, Java) förut så känns
det ganska bekant eller hur?
Då bryter jag ned koden i bitar och förklarar den för er.
"<?php" aktiverar php-språket, så
länge du inte skriver den motsatta taggen "?>"
så är det PHP som gäller, inte HTML. Observera att vi befinner
oss på serversidan och slutresultatet är en vanlig HTML-fil som skickas
till webbläsaren.
Vi kan starta och stoppa PHP i en och samma fil hur många gånger
som helst.
Hittills har vi bara använt ett php-kommando, echo. Echo skriver helt enkelt
ut vad som finns mellan citationstecknen.
De tidigare kodexemplen gör PHP egentligen ingenting som HTML inte hade kunnat
göra och är egentligen fullständigt onödigt. ;-)
Utskrift
Kommandon för att skriva ut från PHP är echo eller print. Det är en marginell skillnad mellan dessa. Vi går inte in på detta för vi kommer inte utnyttja detta i kursen. Vill du veta mer se w3schools eller php.net . Echo kan även skrivas med parentes efter echo (...) men vi kör den enklaste varianten.
echo "Hej svejs!";
?>
//Kortare skrivsätt för echo
<?= "Hej svejs!"; ?>
//Kortare skrivsätt för echo
Hej svejs!
Kommentarer i koden
Enradskommentarer skrivs med två snedstreck, // .
Flerradskommentarer startar med snedstreck stjärna, /* , och avslutas tvärtom, */ .
Enradskommentarer kan också skrivas med # istället för // men vi undviker denna variant i kursen då det krockar med en specialskriven kod senare i kursen.
Ställ in så alla felmeddelanden alltid skrivs ut
När vi utvecklar och lär oss så vill vi ha så mycket information om alla fel som det bara går. I drift så kanske man vill dölja vissa utskrifter.
Lägg koden högst upp i din sida.
error_reporting(-1); // Report all type of errors
ini_set('display_errors', 1); // Display all errors
ini_set('output_buffering', 0); // Do not buffer outputs, write directly
?>
<!DOCTYPE html>
<html lang="sv">
<head>
...
...
Första raden är en PHP-funktion som säger att alla typer av felmeddelande ska visas. -1 är samma sak som E_ALL, det vill säga alla fel/varningar/notiser.
Andra raden anropar en funktion som ber PHP att skriva ut felmeddelanden och inte dölja dem.
Tredje raden säger till PHP att inte lagra informationen och skriva ut senare utan att skriva ut så fort som möjligt. Det är bättre att alltid ha koll på felen.
Öva dig i att läsa felmeddelandena, oftast får vi bra tipps om vad som krånglar, de säger vilken fil och radnummer som du ska börja leta på. Det är en övningssak att rätta felen när de dyker upp, börja alltid med det översta felet och rätta det först. Ibland är en del av resterande fel så kallade följdfel, de beror av det första felet och försvinner när du rättat det.
Variabler
En variabel kan ses som en behållare/låda som innehåller någonting.
Variabelnamn kan innehålla både siffror och bokstäver, men får inte börja med en siffra. (Även _ [underscore] fungerar men inte mellanslag.)
OBS! Stora och små bokstäver är olika bokstäver. $hej är inte samma som $Hej .
Använd beskrivande namn, $summa, $radie och $bankRanta är mycket mer beskrivande än $a, $b och $x;
En god programmeringssed ä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).
Se följande exempel:
//olika variabler
$mintext = "Hej och välkommen till PHP-kursen!";
$sifferexempel = 100;
$text2 = "gånger";
echo "$mintext $sifferexempel $text2";
echo "<br><br>";
echo $mintext." ".$sifferexempel." ".$text2;
//utskrift med enkelfnuttar
echo 'Utskrift med enkelfnuttar: $mintext $sifferexempel $text2';
?>
Vill du spara textsträngar i en variabel får du använda citationstecken som i exemplet, vill du däremot spara t.ex. värdet 100 i en variabel behövs det inte.
Till sist matar vi ut innehållet i variablerna på två olika sätt. Det första anger variablerna i en textsträng, då plockas innehållet i variablerna och ersätter själva variablerna i textsträngen. Det andra sättet kopplar ihop innehållet i variablerna (med punkt mellan varje del). För att få mellanrum så måste vi lägga till en textsträng som innehåller blanksteg. Echo-kommandot i mitten matar ut textsträngen "<br><br>" vilket blir <br><br> i html-sidan som skickas iväg, dvs två radbrytningar.
Skillnad i utskriften med apostrofer och citattecken
OBS! Att skriva ut variabler i en textsträng fungerar då vi använder citattecken, dvs dubbelfnutt. Med enkelfnutt (apostrof) kan vi också skriva ut text men men variabler översätts inte till dess innehåll utan all text skrivs ut exakt som den ser ut i strängen.
Det vill säga följande rad,
skriver ut:
medan följande rad:
skriver ut:
Datatyper
De fyra vanligaste datatyperna är integer, float, string och boolean. I ovanstående
exempel använder vi två string och en integer.
En integer är ett heltal, en float är ett tal med decimaler, en string
är en textsträng och en boolean kan bara ha två värden,
sant eller falskt (TRUE, resp. FALSE).
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. Precis som i Javascript. 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:
bool - boolean, har värdet sant eller falskt, true eller false.
int - lagrar heltal.
float - lagrar decimaltal.
string - lagar textsträngar.
array - en samling av värden.
objekt - en datatyp som representerar en grupp av variabler och metoder som hör 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.
Vill du läsa mer och se exempel på de olika datatyperna så finns det bra info på w3schools - datatyper.
Trots att PHP inte skriver ut vilken datatyp en viss variabel har så är det viktigt att du har koll på vad variabeln innehåller för att du skall kunna använda den på rätt sätt.
Den inbygda funktionen var_dump()
Funktionen var_dump() är en ypperlig funktion för felsökning. Den skriver ut variabelns innehåll och dess typ, så som det uppfattas av PHP.
<?php
$inget = null;
$mintext = "Hej";
$decimaltal = 3.14;
$heltal=123;
$sant=true;
echo "<pre>";
var_dump($heltal);
var_dump($decimaltal);
var_dump($mintext);
var_dump($inget);
var_dump($sant);
echo "</pre>";
?>
Variabler är otypade, dvs typen anpassar sig efter vad som stoppas in i den.
Decimaltal skrivs med punkt.
/* olika variabler, decimaltal med punktnotation,
obs! otypade, dvs anpassar sig efter värde */
// Vi tilldelar alla variabler ett värde.
// Om vi vill skapa en variabel som inte har något värde ännu, så tilldela det värdet null.
// Null är ett specialvärde som innebär ingenting.
$inget = null;
$mintext = "Hej";
$ett_tal = 3.14;
echo "Variablerna mintext och ett_tal : $mintext $ett_tal";
echo "<br><br>";
$mintext = $ett_tal;
$ett_tal = "Tjena";
echo "Variablerna mintext och ett_tal :-) $mintext $ett_tal";
echo "<br><br>";
echo "Variabeln inget: $inget";
?>
If, Else
En if-sats utför en jämförelse mellan två variabler,
eller en variabel och ett värde.
Se följande exempel;
<?php
$variabel = 77;
$buu=true;
if($variabel == 77) {
echo "Variabeln är 77";
} else {
echo "Variabeln är inte 77";
}
if(buu) {
echo "BUU";
} else {
echo "inget buu";
}
?>
Scriptet utför följande;
Först sätter scriptet variabeln $variabel till siffran 7, efter det
utför den en jämförelse med hjälp av en if-sats. Först
kollar scriptet om $variabel är lika med 77, stämmer detta så
utför scriptet vad som nu finns mellan måsvingarna. I detta fallet
skriver den ut texten "Variabeln är 77".
Else fungerar som en slags komplettering för if, den utför någonting
om if-satsen ovanför inte skulle stämma. Om $variabel hade varit 99
hade vad som finns mellan måsvingarna i else-satsen skrivits ut, i det
här fallet "Variabeln är inte 77".
Om du vill kontrollera om två saker är identiska så använder
du dubbla lika-med tecken, men du är inte begränsad till att jämnföra
likhet, se följande tabell med jämförelseoperatorer:
== Lika med
!= Inte lika med
=== Lika med och av samma typ
!== Inte lika med men av samma typ
<= Mindre eller lika med
>= Större eller lika med
< Mindre än
> Större än
&& betyder OCH (villkoren på båda sidorna måste vara
TRUE för att generera slutresultatet TRUE)
|| betyder ELLER (något, eller båda, av villkoren på båda
sidorna måste vara TRUE för att generera slutresultatet TRUE)
Ett litet exempel där man använder både OCH och ELLER:
<?php
if (($myvariable > 5 && $myvariable < 10) || $myvariable == 1)
{
echo "Yaabadabadooo";
}
?>Switch (*för den som behärskar if-satser bra)
Om vi har många villkor som ska testas, t ex att kolla ett svar från en meny, så kan switch-satsen vara mycket användbar. Här ett exempel:
switch ($myvariable)
{
case 1:
print "One";
break;
case 2:
print "Two";
break;
case 3:
print "Three";
break;
default:
print "Other number";
}
?>
Den här kollar $myvariable och skriver"One" om värdet är
1, "Two" om värdet är 2, "Three" om värdet
är 3 och "Other Number" om det är något annat ("default"
alternativet). Men varför alla dessa "break"? Jo, det stoppar
genomgången av switch-satsen och hoppar ur den!
Om vi skulle skriva utan break-satser, kommer den uppföra sig annorlunda.
T ex så här:
switch ($myvariable)
{
case 1:
print "One";
case 2:
print "Two";
case 3:
print "Three";
default:
print "Other number";
}
?>
Så om värdet i $myvariable är 2. Vad kommer att hända? Den kommer skriva ut: "TwoThreeOther number". När vi inte skriver dit "break" kommandot så kör den alla case-satser som ligger efter den som stämmmer.
While och For
Ett while-block utför även den en jämförelse, men inte riktigt på samma sätt som ett if-block.
$nuffra = 10;
while($nuffra >= 4) {
echo "$nuffra <br>";
$nuffra = $nuffra-1;
}
echo "Klar";
?>
Följande kod borde vara ganska enkel att förstå. Först sätts variabeln $nuffra till värdet 10, efter det kommer ett while-block som säger att så länge $nuffra är större än värdet 4 så ska vad som finns mellan måsvingarna utföras. 10 är som bekant större än 4 så programmet kommer utföra vad som finns mellan måsvingarna. Den skriver ut värdet i $nuffra, vilket är 10, och drar sedan bort 1 från $nuffra. $nuffra är nu 9. 9 är större än 4 så vad som finns mellan måsvingarna utförs igen. Scriptet kommer fortsätta så här ända tills $nuffra är 3, vilket inte är lika med eller större än 4. Då skrivs texten "Klar".
for($i = 1; $i <= 12; $i++) {
echo "Hej nr. $i <br>";
}
?>
Här demonstreras ett for-block. Kortfattat säger ovanstående
kodstycke: "Sätt $i till ett, Medan $i är mindre eller lika med
12 så utförs vad som finns mellan måsvingarna, när ett
varv är klart ökas $i med ett."
Just $i++ betyder "öka med ett". Ett $i-- betyder "minska
med ett" och det hade gått lika bra med $fnuffra = $fnuffra-1 som
$fnuffra-- i while-exemplet.
Resultatet av ovanstående kommer se ut som så här:
Hej nr. 1
Hej nr. 2
Hej nr. 3
Hej nr. 4
...
Hej nr. 11
Hej nr. 12
Array (Vektor, Fält)
En array är en slags variabel, fast den kan innehålla flera värden samtidigt. Du kan se det så här, en variabel är en hylla med en låda, du lägger precis vad du vill i den lådan. En array är en hylla med flera lådor. Du kan lägga en siffra i en låda, en text-sträng i ett annan låda, men det är fortfaranda samma hylla. Se följande:
$minarray[0] = 6;
$minarray[1] = 8;
$minarray[2] = -3;
$minarray[5] = 5;
?>
Variabeln heter $minarray, men nu har vi deklarerat 4 st lådor, som är
numrerade 0, 1 och 2 och 5, lite irrationellt men fullt möjligt. Dessa innehåller ett värde var.
En enkel introduktion av array i PHP. Det här kommer garanterat vara användbart.
I samband med att man använder arrayer så finns det ett antal färdiga
funktioner att använda t ex count(), se nedan.
Loopar är perfekt att använda för skriva ut eller bara stega
igenom en array:
echo $i . ' : ' . $minarray[$i] . '<br>';
}
En ännu bättre loop som alldeles själv går igenom befintliga element i arrayen är foreach-loopen
echo $i . ' : ' . $val . '<br>';
}
Om vi inte hade varit intresserade av själva index-värdet i arrayen så hade foreach uttrycket blivit ännu enklare.
foreach ($minarray as $val) , dvs kör igenom arrayen och plocka ut samtliga värden och lägg dessa succesivt i variabeln $val.
Även var_dump() fungerar om vi bara vill "dumpa ut" hela arrayen och dess innehåll. Även den "print_r()" som skippar typerna och gör det lite mer läsbart.
echo "<pre>" . var_dump($minarray) . "</pre>";
En häftig finness i PHP är möjligheten att använda textsträngar istället för ett numrerings index för att komma åt lådorna. Så, istället för $minarray[0] och $minarray[1] kan du skriva $minarray['namn'] och $minarray['adress']. Mer i boken om detta om du kan allt annat!
$minarray['namn'] = "Kalle Anka";
$minarray['adress'] = "Ankeborg";
?>
Flerdimensionella arrayer
Ibland kan ju tvådimensionella arrayer vara användbart. Här en mix av ovanstående två möjligheter till indexering:
$books[0]['name']=""Mickey Mouse";
$books[0]['price']=9.00;
$books[1]['name'] = "Donald Duck & Co";
$books[1]['price'] = 12.99;
foreach($books as $onebook) {
echo $onebook['name'] . " sells for $". $onebook['price'] . "<br>\n";
}
?>