Php
Anonymous functions – closures
$square = function ($number) {
return $number * $number;
};
$result = $square(5);
echo '5 gange med sig selv = ' . $result;
Læg mærke til at der efter en anonymous function lukkes med semikolon
function () {
...
};
I eksemplet var det :
function ($number) {
return $number * $number;
};
Resultat: 5 gange med sig selv = 25
Closures
function createCounter() {
$count = 0;
$counter = function() use(&$count) {
return ++$count;
};
return $counter;
}
$counter = createCounter();
echo $counter() . '
';
echo $counter() . '
';
echo $counter() . '
';
For at få "adgang" til $count
når $counter
defineres, benytter vi use(&$count)
.
På den måde kan vi hente $count
fra et andet scope og benytte inde i $counter scope
!
Resultat:
1
2
3
Arithmetic Operators – Matematiske udtryk
Læs mere her.
- + Addition
- – Subtraction
- * Multiplication
- / Division
- % Modulus (rest ved division)
array_pop()
array_pop() fjerne sidste værdi i et array()
$ids = [10, 22, 15, 45, 67];
array_pop($ids);
Resultat = 10,22,15,45
array_push()
At tilføje data til et array()
$ids = [10, 22, 15, 45, 67];
array_push($ids, 100);
Resultat = 10,22,15,45,67,100
(100 bliver tilføjet til sidst)
array_reverse()
Med array_reverse() vender du rækkefølgen om.
$colors = ['red', 'blue', 'green', 'yellow'];
$colors_rev = array_reverse($colors);
print_r($colors_rev);
Array
(
[0] => yellow
[1] => green
[2] => blue
[3] => red
)
array_search()
Med array_search() kan du finde index på det du søger.
$navne = ['Jens', 'Birthe', 'Ole'];
$output = 'Birthe har index : ' . array_search('Birthe', $navne) . ' et array kaldet $navne';
Hvis vi printer $output
vil der vises:
Birthe har index : 1 et array kaldet $navne
NB!
Det første index i et array er = 0
array_shift()
array_shift() fjerne den første værdi i et array()
$ids = [10, 22, 15, 45, 67];
array_shift($ids);
Resultat = 22,15,45,67
array_slice()
Med array_slice() kan du tage en del af et eksisterende array og med den data lave et nyt array.
$ids = [10, 22, 15, 45, 67];
Hvis jeg vil lave et nyt array, som vi kalder $ids2 med tallene 15 og 45 kan jeg:
$ids2 = array_slice($ids, 2, 2);
De 3 parametre fra array_slice er ("hvilket array skal jeg tage data fra", "på hvilket ID skal jeg begynde", "hvor langt skal jeg gå")
array_splice()
Med array_splice() kan du udskifte en værdi i et array.
$ids = [10, 22, 15, 45, 67];
Vi udskifter tallet 22 med tallet 1000
array_splice($ids, 1, 1, 1000);
I array_splice($ids, 1, 1, 1000);
betyder det første 1, at vi begynder ved index 1, her indsætter vi tallet 1000.
Det næste 1 betyder, at vi skal fjerne 1 index under det vi lige har indsat.
På den måde fjerne vi tallet 22.
Havde der stået 2 array_splice($ids, 1, 2, 1000);
ville både tallet 22 og 15 blive fjernet!
array_sum()
array_sum() lægger alle værdierne sammen som findes i et array.
$tal = [10, 20, 20];
array_sum($tal);
Resultat: 50
array_unshift()
array_unshift() vil tilføje en værdi først i et array()
$ids = [10, 22, 15, 45, 67];
array_unshift($ids, 100);
Resultat = 100,10,22,15,45,67
(100 er tilføjet først)
Arrays
To måder at skrive et array()
på:
$navne = array('Markus', 'Thit', 'Ida');
$navne = ['Markus', 'Thit', 'Ida'];
For at skrive "Thit" på skærmen kan vi:
echo $navne[1];
var_dump($navne);
Kan benyttes for dig som PHP programmør til at udskrive info omkrig dit array()
Så var_dump($navne);
giver følgende:
array(3) { [0]=> string(6) "Markus" [1]=> string(4) "Thit" [2]=> string(3) "Ida" }
Vil du have det mere læseligt på skærmen, kan du benytte <pre> ...</pre>
.
echo '';
var_dump($navne);
echo '
';
... eller benytte en function() til fast at vise dine var_dump()
function dump($value) {
echo '';
var_dump($value);
echo '
';
}
dump($navne);
Tilføje til et Array()
$tal =['1','2','3'];
$tal[] = 4;
Nu har dit Array() værdierne: 1,2,3,4
Ændre værdi i et Array()
$tal =[1, 2, 3];
$tal[1] = 6;
Resultat = 1,6,3 (tallet 2 er udskiftet med tallet 6)
Fjerne en værdi
Du kan fjerne 1 tallet ved unset($tal[0]);
Assignment operator
Læs mere her.
$num = 10;
$num += 20;
Resultat = 30
Det samme som $num = $num + 20;
$num = 10;
$num -= 20;
Resultat = -10
$num = 10;
$num /= 20;
Resultat = 0,5
Associative Arrays
Et associative array i PHP er en datastruktur, hvor hver værdi er knyttet til en nøgle … et ord!
(I stedet for en numerisk indeks).
Nøglerne i et associative array kan være en string, hvilket gør det muligt at få adgang til værdier ved hjælp af meningsfulde navne i stedet for tal.
$user = [
'forNavn' => 'Morten',
'efterNavn' => 'Andersen',
'instrument' => ['guitar', 'bas']
];
Vi opretter her 3 forskellige $output som vi kan echo ...
$output = 'Fornavnet er: ' . $user['forNavn'];
$output = 'Efternavnet er: ' . $user['efterNavn'];
$output = 'Instrument: ' . $user['instrument'][0];
echo $output;
Første resultat vil være: "Fornavnet er: Morten"
Andet resultat vil være: "Efternavnet er: Andersen"
Ved tredje ... den med instrument vil resultatet være: "guitar"
Hvis det havde været $user['instrument'][1]
ville det være: "bas"
Break
Med break kan du stoppe et loop før det er færdigt.
for ($i = 0; $i < 10; $i++ ) {
if ( $i == 5){
break;
}
echo $i . '
';
}
Resultat:
0
1
2
3
4
I første omgang beder vi loopet om at køre indtil $i
værdien er lige under 10, men vi stopper loopet i at køre så snart $i
er lige med 5
Comparison Operators
==
Lige med===
identisk med!=
Ikke lige med<>
Ikke lige med!==
Ikke identisk med<
Mindre end>
Større end<=
Mindre end eller lige med=
Større end eller lige med
Forskellen på ==
og ===
$x = 10; // et tal (Integer)
$y = '10'; // en tekst (String)
var_dump($x == $y);
Resultat: bool(true)
$x og $y er ens, da ==
ikke tjekker for om det er et tal eller en tekst!
$x = 10; // et tal (Integer)
$y = '10'; // en tekst (String)
var_dump($x === $y);
Resultat: bool(false)
$x og $y er IKKE identiske, da ===
tjekker om det er et tal eller en tekst!
Det samme forhold gælder ved !=
og !==
Constants
Du kan både benytte define()
og const()
når du opretter en Constant (konstant).
En konstant er som navnet antyder, en værdi der IKKE ændres modsat en variable()
Constants er global scope så de kan benytte overalt i din PHP kode!
define('WP_TEMA', 'Mit fantastiske WordPress tema');
define('WP_VERSION', '1.0.0');
echo WP_TEMA . ' ver.: ' . WP_VERSION;
Resultat: Mit fantastiske WordPress tema ver.: 1.0.0
const DB_NAME = 'mydb';
const DB_HOST = 'localhost';
echo 'Database: ' . DB_NAME . ', Host: ' . DB_HOST;
Resultat: Database: mydb, Host: localhost
Continue
Med continue kan du bede loopet om ikke at udføre, hvad det nu skal, når en betingelse er opfyldt. Bagefter kører loopet videre.
for ($i = 1; $i < 10; $i++ ) {
if ( $i == 5){
continue;
}
echo $i . '
';
}
Resultat:
1
2
3
4
6
7
8
9
Tallet 5 er ikke med!
count()
Som et eksempel tæller vi antallet af data i et Array med navet ids
$ids = [10, 22, 15,45,67];
count($ids);
Resultat = 5
Data Types
String: Bogstaver, tal eller tegn der skal angives imellem ‘…’ eller “…”
Integer: Hele tal som er positive eller negative
(skal ikke angives imellem anførselstegn, da det så er en string!)
Float: Decimaltal (der benyttes . (punktum) ikke , (komma))
Boolean: True eller False
Array: kan indeholde flere værdier
Object:
Null: En Variable med ingen værdi
Resource: Eksempelvis en ekstern fil
Date()
'Y'
= år'm'
= måned'd'
= dag (1-31)'D'
= dag kort navn'l'
= dagens fulde navn'h'
= timer (12)'H'
= timer (24)'i'
= minutter's'
= sekunder'a'
= AM/PM
date_default_timezone_set('Europe/Copenhagen');
$output = date('H:i');
Resultat timer:minutter lige nu i danmark
Læs mere her.
do-while loop
Et do-while loop køre ALTID en gang før den tjekker betingelserne.
Modsat et while loop som tjekker før den afvikler!
$i=0;
do{
echo $i;
$i++;
} while ($i < 10);
Det betyder at sætter vi $i = 100
$i=100;
do{
echo $i;
$i++;
} while ($i < 10);
... så vil den echo tallet 100, da den først tjekker om $i < 10 efter først gang loppet kører.
Echo
= 'Her er en kortere måde at skrive på' ?>
= 'Her er der tilføjet HTML elmenterne H2
' ?>
Man kan opdele echo
med komme (,) for at vise flere elementer:
Resultat:
MortenAndersen
(Uden mellemrum!)
Det kan man IKKE med print
!
explode()
Med explode() kan du ændre en string (tekst) til et array
$instrumenter = 'guitar,bas,trommer';
$instrumneter_array = explode(',', $instrumenter);
For at printe det på skærmen kan vi var_dump($instrumneter_array);
Resultat:
array(3) { [0]=> string(6) "guitar" [1]=> string(3) "bas" [2]=> string(7) "trommer" }
For Loop
Et for
-loop i PHP bruges til at gentage en blok af kode et bestemt antal gange.
for (initialisering; betingelse; opdatering) {
// Kode der skal gentages
}
- initialisering: Her angives en startværdi for en variabel, som ofte bruges til at tælle antallet af gennemløb.
- betingelse: Dette er den betingelse, der skal være sand for at loopen fortsætter. Hvis betingelsen bliver falsk, stopper loopen.
- opdatering: Efter hver gennemløb af koden opdateres variablen (f.eks. øges med 1).
Her printer vi tallene 0 til og med 10:
for($i = 0; $i <= 10; $i++) {
echo $i . '
';
}
<br />
er kun for at skifte linje så talene står nedad på skærmen!
Vi kan selvfølgelig også vende loopet rundt, så vi begynder med 10 og ender med talle 0.
for($i = 10; $i >= 0; $i--) {
echo $i . '
';
}
Her en simpel måde at skrive det op i en HTML liste:
echo ' ';
for ($i = 0; $i <= 10; $i++) :
echo '- Nummer:' . $i . '
';
endfor;
echo '
';
Foreach loop – associative array
$users = [
['name' => 'Sus', 'email' => 'sus@email.com'],
['name' => 'Markus', 'email' => 'markus@email.com'],
['name' => 'Ida', 'email' => 'ida@email.com'],
['name' => 'Thit', 'email' => 'thit@email.com']
];
For at printe navn og email
foreach($users as $user) :
echo $user['name'] .' - ' . $user['email'] . '
';
endforeach;
Resultat:
Sus - sus@email.com
Markus - markus@email.com
Ida - ida@email.com
Thit - thit@email.com
Med $key og $value
foreach($users as $user) :
foreach($user as $key => $value) :
echo $key . ': ' . $value .'
';
endforeach;
endforeach;
Resultat:
name: Sus
email: sus@email.com
name: Markus
email: markus@email.com
name: Ida
email: ida@email.com
name: Thit
email: thit@email.com
function()
En PHP function i sin mest simple form.
En function skal altid “kaldes” før den udføres!
function sayHallo(){
echo 'Hello World';
}
sayHallo();
Resultat:
Hello World
Typisk vil du benytte return
til at "gemme" indholdet af funktionen for så senere at printe den.
function farvel() {
return 'Farvel min ven';
}
echo farvel();
Resultat:
Farvel min ven
En function kan indholde variables
function plus($a, $b) {
return $a + $b;
}
echo plus(7, 13);
Resultat: 20
Giv dine variables
en default værdi for at undgå PHP fejl.
Hvis du har glemt at angive to tal, når du skriver echo plus();
function plus($a = 0, $b = 0) {
return $a + $b;
}
echo plus();
Resultat: 0 ... og ikke en PHP fejl!
Splat Operator
Hvis du eksempelvis ikke ved hvor mange tal der indtaste kan du benytte Splat Operator.
( de tre små prikker ...)
function plusAlle(...$numbers){
$sum = 0;
foreach ($numbers as $number){
$sum += $number;
}
return $sum;
}
echo plusAlle(1,2,3,4,5);
Resultat: 15
If
if (betingelse) {
// indholdet eksekveres hvis betingelsen er opfyldt
}
Et simpelt eksempel hvor vi tjekker om du er myndig.
$alder = 23;
if ($alder >= 18) {
echo 'Du er myndig';
}
Resultat:
Du er myndig
If-Else hvor vi giver et svar hvis betingelsen ikke er opfyldt
$alder = 17;
if ($alder >= 18) {
echo 'Du er myndig';
} else {
echo 'Du er ikke myndig';
}
Resultat:
Du er ikke myndig
implode()
Med implode() kan du ændre et array til en string
$navne = ['Jens', 'Birthe', 'Oles'];
$output = implode(', ', $navne);
Hvis vi nu printer (echo) $output vil vi få:
Jens, Birthe, Oles
in_array()
Giver et Boolean værdi (true / false)
$navne = ['Jens', 'Birthe', 'Ole'];
var_dump(in_array('Ole', $navne));
Her er resultatet true da Ole findes i et array der hedder $navne
if(in_array('Ole', $navne)){
$output = 'Ole findes';
} else {
$output = 'Ole er ikke mere!';
}
Logical Operators
and
eller &&
Sandt hvis begge er sandeor
eller ||
Sandt hvis en af dem er sandexor
Sandt hvis en er sand!
Sandt hvis det ikke er sandt
$a = 10;
$b = 20;
var_dump($a == 10 && $b == 20);
Resultat: bool(true)
$a = 9;
$b = 20;
var_dump($a == 10 || $b == 20);
Resultat: bool(true)
...da en af dem er rigtige!
$a = 10;
var_dump(!($a == 5));
Resultat: bool(true)
... da $a jo er 10 er udsagnet sandt .... altså at $a IKKE er lige med 5
Looping Through Arrays
For Loop
Vi har et Array() = $navne
$navne = ['Markus Andersen', 'Astrid Hytten', 'Lone Bundsgaard', 'Ole Jensen'];
Et simplet for loop der printer navne i $navne
for ($i = 0; $i < count($navne); $i++){
echo $navne[$i] . '
';
}
Resultat:
Markus Andersen
Astrid Hytten
Lone Bundsgaard
Ole Jensen
count($navne)
Tæller hvor mange navne der findes i vores array
echo $navne[$i]
Printer det aktuelle index i vores array når loopet kører.
Foreach loop
En mere elegant metode er med foreach()
foreach($navne as $navn) {
echo $navn .'
';
}
eller
foreach($navne as $navn) :
echo $navn .'
';
endforeach;
Multi-Dimensional Arrays
Multi-Dimensional Arrays i PHP er arrays, der indeholder andre arrays som deres elementer.
Dette gør det muligt at oprette tabeller af data.
Eksempelvis en tabel med rækker og kolonner, hvor hver række er et array.
Du kan få adgang til elementerne i et multidimensionel array ved at bruge flere indekser, f.eks. $array[række][kolonne]
.
$frugter = [
['Æbel', 'Grøn'],
['Appelsin', 'Orange'],
['Banan', 'Gul']
];
For at echo
ordet "Gul" som kommer fra "Banan-array" skal vi skrive:
echo $frugter[2][1];
[2] = Banan og i "Banan-array" har "Gul" index = 1
Et eksempel med associative array
$users = [
['forNavn' => 'Morten', 'efterNavn' => 'Andersen', 'hobby' => 'At mixe musik'],
['forNavn' => 'Lise', 'efterNavn' => 'Hansen', 'hobby' => 'At spille blokfløjte'],
['forNavn' => 'Tina', 'efterNavn' => 'Jensen', 'hobby' => 'At strikke i uld']
];
Hvis vi vil echo
Lises hobby skal vi:
echo $users[1]['hobby'];
Nested for loop
for ($i = 0; $i < 3; $i++){
for ($j = 0; $j < 3; $j++){
echo $i . ' - ' . $j . '
';
}
}
Resultat:
0 - 0
0 - 1
0 - 2
1 - 0
1 - 1
1 - 2
2 - 0
2 - 1
2 - 2
Nested while loop
$i = 0;
while ($i < 3) {
$j = 0;
while ($j < 3 ) {
echo $i . ' - ' . $j . '
';
$j++;
}
$i++;
}
Resultat
0 - 0
0 - 1
0 - 2
1 - 0
1 - 1
1 - 2
2 - 0
2 - 1
2 - 2
Null Coalescing Operator
I PHP bruges Null Coalescing Operator (??
) til at returnere den første værdi, der ikke er null, blandt flere alternativer.
Det er ofte brugt til at håndtere situationer, hvor en variabel muligvis ikke er sat.
Her er forskellen på Ternary Operator og Null Coalescing Operator
$favColor = 'red';
// Ternary Operator
// $color = isset($favColor) ? $favColor : 'blue';
// Null Coalescing Operator
$color = $favColor ?? 'blue';
echo $color;
Når der kommer flere variabler bliver denne metode så meget nemmere
$favColor = 'red';
$favColorSec = 'yellow';
// Ternary Operator
// $color = isset($favColor) ? $favColor : (isset($favColorSec) ? $favColorSec : 'blue');
// Null Coalescing Operator
$color = $favColor ?? $favColorSec ?? 'blue';
echo $color;
number_format()
Som navnet antyder benyttes number_format()
til at formatere tal.
Har du eksempelvis variabel $loen
(løn) som indeholder et uformateret tal, kan du lave en function
der formaterer tallet:
function formatLoen($loen) {
return number_format($loen, 2, ',', '.') . ' kr.';
}
Når du kalder variablen $loen kan du bruge funktionen ved at kalden den på følgende måde:
formatLoen($loen):
Resultat kunne se ud som: 35.000,00 kr
Formatet på number_format($loen, 2, ',', '.') . ' kr.';
:
Først indsætte funktionens variabel $loen
. 2 betyder to decimaler, det efterfølgende komma at der skal benyttes komma foran øre decimalerne. Punktumet er tusindtals separatoren. Til sidst printer vi "kr.".
print
er mere simpel end echo
og benyttes derfor sjældnere!
sort()
Vi kan sortere indholdet i et array() vi sort()
$ids = [10, 22, 15, 45, 67];
sort($ids);
Her vil vi nu få tallene i den "rigtige" rækkefølge:
10,15,22,45,67
(15 og 22 har bytte plads!)
Vi kan benytte rsort()
til at vende rækkefølgen om, så den største værdi kommer først.
String Concatenation
$fornavn = 'Morten';
$efternavn = 'Andersen';
$navn = $fornavn . ' ' . $efternavn;
echo 'Mit navn er: ' . $navn;
En løsning med det almindelige anførselstegn.
echo "Mit navn er: $navn";
Resultat: Mit navn er: Morten Andersen
Læs mere her
switch()
$dayOfWeek = date('l');
switch ($dayOfWeek) {
case 'Monday':
$message = 'Monday Blues!';
$color = 'blue';
break;
case 'Tuesday':
$message = "At least it's not Monday!";
$color = 'green';
break;
case 'Wednesday':
$message = 'Hum Day!';
$color = 'Orange';
break;
case 'Thursday':
$message = 'One more day until friday!';
$color = 'red';
break;
case 'Friday':
$message = 'TGIF!';
$color = 'purple';
break;
case 'Saturaday':
$message = 'Have a nice weekend!';
$color = 'magenta';
break;
case 'Sunday':
$message = 'Have a nice weekend!';
$color = 'magenta';
break;
}
Tal funktioner
rand()
viser et tilfældigt tal
$output = rand(1, 10);
et tilfældigt tal imellem 1 og 10
round(3.7)
= 4 (runder op eller ned)
ceil(4.2)
= 5 (runder altid op)
floor(7.8)
= 7 (runder altid ned)
sqrt(16)
= 4 (kvadratroden af 16)
pi()
= pi
abs(-3.7)
= 3,7 (absolut værdi … positiv)
max(1, 4, 12, 50)
= 50 (max værdien)
min(1, 4, 12, 50)
= 1 (min værdien)
number_format(27375.750, 2, ',', '.')
= 27.375,75
Først det givne tal, derefter antallet af decimaler (2), derefter tegnet der skal benyttes foran decimalerne (komma) og til sidst angiver vi tusindtals separator som her er punktum.
Tekst (string) funktioner
$string = 'Morten Andersen';
strlen($string)
= 15 (15 tegn … og mellemrum)
str_word_count($string)
= 2 ord
strpos($string, 'Andersen')
= 7 (Andersen begynder på det 7 tegn ud af de 15 i alt)
$string[7]
= A (tegn nr. 7)
substr($string, 7, 3)
= And (Begynd ved tegn nr. 7 og vis 3 tegn derfra)
str_replace('Morten', 'Sus', $string)
= Sus Andersen … min kone 😉 (Find “Morten” og udskift det med “Sus”)
strtolower($string)
= morten andersen (Små bogstaver)
strtoupper($string)
= MORTEN ANDERSEN (kun store bogstaver)
ucwords($string)
= Morten Andersen (stort begyndelsesbogstav)
trim(' Her er IKKE tomme tegn først i sætningen')
Ternary Operator
$variable = (condition) ? true_value : false_value;
I PHP er ternary-operatoren en kort form for en if-else-sætning.
Den bruges til at evaluere en betingelse og returnere én værdi, hvis betingelsen er sand, og en anden værdi, hvis den er falsk.
Med if/else
$point = 50;
if ($point > 40) {
echo 'Du har mange point';
} else {
echo 'Du har ikke så mange point';
}
Den mere enkle Ternary Operator form
$point = 50;
echo $point > 40 ? 'Du har mange point' : 'Du har ikke så mange point';
Du vil typisk sætte det ind i en variabel - $hvorMangePoint
$point = 50;
$hvorMangePoint = $point > 40 ? 'Du har mange point' : 'Du har ikke så mange point';
echo $hvorMangePoint;
Resultatet er alle gange:
Du har mange point
Type Casting & Juggling
$number1 = 5;
$number2 = 10;
$number3 = '20';
$result = $number1 + $number2;
var_dump($result);
Resultat af dump: int(15)
String to int conversion.
$result = $number1 + $number3;
var_dump($result);
Resultat af dump: int(25)$number3
er jo en string (tekst) og ikke et tal, men PHP ændre teksten '20' til tallet 20
String Concatenation
$resultat = $number1 . $number2;
var_dump($result);
Resultat: string(3) "510"
Explicit Conversion
$resulat = (string) $number1;
var_dump($resulat);
Resultat: string(1) "5"
Variables
Læs mere her
Definition: I PHP er variabler symboler, der bruges til at gemme data, og som kan ændres under programmets kørsel.
$navn = 'Morten Andersen';
Her $navn
en variabel og mit navn er en string
- Starter altid med
$
-tegnet efterfulgt af et navn, fx$navn
. - Er case-sensitive, så
$navn
og$Navn
er forskellige variabler. - Kan indeholde forskellige typer data, som tal, strenge, arrays eller objekter.
- Bliver oprettet, når de tildeles en værdi, fx
$alder = 25;
.
While loop
$i = 0;
while($i < 10 ){
echo $i . '
';
$i++;
}
Resultat er tallene 0 til og med 9