Strukturer med associativa arrayer
Allt behöver inte vara klasser. En associativ array räcker långt när du bara ska hålla ihop data.
Data utan klass
En associativ array kan beskriva en sak med flera värden, precis som ett objekt, men utan metoder. Det kallas ibland en struktur.
Strukturer och JSON hör ihop
En array med strukturer går att spara direkt som JSON, och json_decode($json, true) ger tillbaka exakt samma form. Därför är strukturer praktiska för data som ska sparas i en fil.
Array eller klass?
| Associativ array | Klass | |
|---|---|---|
| Skapa | ["marke" => "BMW"] |
new Bil("BMW") |
| Läsa ett värde | $bil["marke"] |
$bil->marke |
| Egna funktioner | Nej | Ja, metoder |
| Skydda data | Nej | Ja, med private |
| Stavfel i nyckel | Upptäcks först när koden körs | Upptäcks av VS Code |
| Spara som JSON | Direkt | Publika egenskaper sparas |
En tumregel: börja med en array när du bara ska lagra och visa data. Byt till en klass när det finns regler för datan eller funktioner som hör ihop med den.
Från JSON till objekt
Ett vanligt mönster är att spara som JSON men arbeta med objekt i koden. Då skapar du objekten från arrayerna när filen läses in:
$rader = json_decode(file_get_contents("garage.json"), true);
$garage = [];
foreach ($rader as $rad) {
$garage[] = new Bil($rad["marke"], $rad["farg"]);
}
Prova själv
- Lägg till nyckeln
"pris"på varje bil och skriv ut det totala värdet på garaget. - Lägg till en fjärde bil i listan med
$garage[] = [...]. - Skriv om det första exemplet så att det använder klassen
Bilfrån förra lektionen. Vilken version tycker du är tydligast?