What is a null coalescing operator?

PHP: Ternary & Coalescing Operatorer Forklaret

28/01/2019

Rating: 4.74 (9584 votes)

PHP er et kraftfuldt programmeringssprog med et væld af funktioner, der hjælper udviklere med at bygge robuste og pålidelige applikationer. Blandt de mange værktøjer, sproget tilbyder, er der især tre operatorer, som markant kan forbedre kodens kvalitet og læsbarhed: ternary-operatoren, coalescing-operatoren og den nyere null-safe-operator. Disse operatorer giver programmører mulighed for at skrive kortfattet og effektiv kode til at håndtere standardværdier og betinget logik. Ved at mestre disse kan du reducere antallet af linjer i din kode, gøre den lettere at vedligeholde og undgå almindelige fejl relateret til udefinerede eller null-værdier. I denne artikel vil vi udforske hver af disse operatorer i dybden, fra den klassiske ternary-operator introduceret i PHP 4 til den moderne null-safe-operator fra PHP 8, og vise dig, hvordan du kan bruge dem til at øge din produktivitet.

What is null coalescing in PHP 7?
The Null Coalescing operator is one of the many new features introduced in PHP 7. The word "coalescing" means uniting many things into one. This operator is used to replace the ternary operation in conjunction with the isset () function. PHP has a ternary operator represented by the "? " symbol.
Indholdsfortegnelse

Ternary-operatoren (?:) - Den klassiske genvej

Ternary-operatoren har været en del af PHP siden de tidlige dage med PHP 4. Det er en utroligt populær operator, som findes i utallige kodebaser, især i open source-software. Dens primære formål er at tilbyde et kompakt alternativ til en standard if-else-sætning. Navnet "ternary" kommer af, at den opererer på tre operander: en betingelse, en værdi hvis betingelsen er sand, og en værdi hvis betingelsen er falsk.

Ideen er at transformere en flersidet if-else-struktur til en enkelt linje. I programmering læses kode linje for linje, og en simpel if-else-sætning kan nemt fylde 4-5 linjer. Med en ternary-operator kan den samme logik udtrykkes på én linje. Dette gør ikke kun koden renere, men også hurtigere at skrive og ofte lettere at afkode for andre udviklere, når den bruges korrekt. Lad os se på et klassisk eksempel, der sammenligner en if-else-sætning med dens ternary-ækvivalent.

Antag, at vi har en variabel og vil tildele en streng baseret på dens værdi:

// Traditionel if-else $score = 85; $resultat = ''; if ($score > 50) { $resultat = 'Bestået'; } else { $resultat = 'Ikke bestået'; } echo $resultat; // Udskriver: Bestået

Den samme logik kan skrives meget mere elegant med en ternary-operator:

// Med ternary-operator $score = 85; $resultat = ($score > 50) ? 'Bestået': 'Ikke bestået'; echo $resultat; // Udskriver: Bestået

Syntaksen er (betingelse) ? værdi_hvis_sand: værdi_hvis_falsk. Det er en kraftfuld måde at forbedre kodens læsbarhed på, især ved simple tildelinger og output.

Coalescing-operatoren (??) - Elegant håndtering af NULL

Med udgivelsen af PHP 7 i 2015 blev null coalescing-operatoren, skrevet som ??, introduceret. Denne operator bygger videre på den kortfattede stil fra ternary-operatoren, men er specifikt designet til at håndtere null-værdier. Den returnerer den første operand, der eksisterer og ikke er NULL. Hvis ingen af værdierne opfylder dette, returneres den sidste værdi. Dette er en enorm forbedring i forhold til den gamle metode, hvor man ofte skulle bruge isset() i kombination med en ternary-operator.

I PHP kan variabler ofte være NULL, enten fra starten eller som resultat af en operation, f.eks. en databaseforespørgsel der ikke returnerer noget. At forsøge at bruge en null-værdi kan føre til fejl eller uventet adfærd. Før ?? skulle man typisk skrive noget i stil med:

$brugernavn = isset($_GET['user']) ? $_GET['user']: 'gæst';

Med coalescing-operatoren bliver dette meget enklere:

// Udskriver 'gæst', da $_GET['user'] ikke er sat $brugernavn = $_GET['user'] ?? 'gæst'; echo $brugernavn;

En af de stærkeste egenskaber ved coalescing-operatoren er muligheden for kædning. Dette er yderst nyttigt, når man vil tjekke flere potentielle kilder for en værdi i en prioriteret rækkefølge. For eksempel kan man tjekke for en værdi fra en GET-parameter, derefter en POST-parameter og til sidst falde tilbage på en standardværdi:

// Tjekker GET, derefter POST, og falder til sidst tilbage på 'anonym' $bruger = $_GET['navn'] ?? $_POST['navn'] ?? 'anonym';

Dette erstatter komplekse, indlejrede if-else- eller ternary-sætninger og gør koden markant renere og lettere at forstå.

Null-safe-operatoren (?->) - Sikker kædning af objekter

Den seneste tilføjelse til denne familie af operatorer kom med PHP 8 i 2020: null-safe-operatoren, skrevet som ?->. Denne operator løser et meget almindeligt og frustrerende problem i objektorienteret programmering: at kalde en metode eller tilgå en egenskab på et objekt, der potentielt kan være NULL.

Før PHP 8 ville et forsøg på at kalde en metode på NULL resultere i en fatal fejl, som stoppede eksekveringen af scriptet. For at undgå dette måtte udviklere skrive defensive tjek:

// Før PHP 8 $ordre = findOrdre($id); if ($ordre !== null) { $kunde = $ordre->getKunde(); if ($kunde !== null) { $adresse = $kunde->getAdresse(); if ($adresse !== null) { echo $adresse->gade; } } }

Denne type kode, ofte kaldet "the arrow pyramid of doom", er grim og svær at læse. Null-safe-operatoren løser dette elegant. Hvis en del af kæden er NULL, stopper evalueringen øjeblikkeligt og hele udtrykket returnerer NULL, uden at udløse en fejl.

// Med PHP 8 og null-safe-operatoren $gade = findOrdre($id)?->getKunde()?->getAdresse()?->gade;

Hvis findOrdre($id), getKunde() eller getAdresse() returnerer NULL, vil variablen $gade blot blive sat til NULL, og programmet fortsætter. Dette er en revolution for kodens effektivitet og sikkerhed, især når man arbejder med komplekse datastrukturer eller API-svar.

Sammenligningstabel for operatorer

For at give et klart overblik, er her en tabel, der sammenligner de tre operatorer:

OperatorSyntaksIntroduceret iFormål
Ternary(betingelse) ? sand: falskPHP 4Kortfattet if-else-sætning.
Null Coalescing$var ?? 'default'PHP 7.0Returnerer første værdi, der ikke er NULL. Erstatter isset() ? ...: ...
Null-safe$obj?->metode()PHP 8.0Sikker adgang til metoder/egenskaber på potentielt NULL objekter.

Ofte Stillede Spørgsmål (FAQ)

Kan jeg bruge ternary-operatoren i stedet for coalescing?

Ja, men det er mere omstændeligt. Coalescing-operatoren ?? er en direkte genvej for isset($var) ? $var: 'default'. Hvis du bruger en ternary-operator, skal du selv skrive isset()-tjekket. ?? er derfor både kortere og mere udtryksfuld for netop dette formål.

Hvad er den største fordel ved null-safe-operatoren?

Den største fordel er forebyggelse af fatale fejl. Den eliminerer behovet for gentagne if ($obj !== null)-tjek, når du arbejder med kæder af objektkald. Dette gør koden dramatisk kortere, renere og mere robust over for uventede NULL-værdier i datastrukturen.

Hvilken PHP-version skal jeg bruge for at anvende alle disse?

For at kunne bruge alle tre operatorer, skal du køre PHP 8.0 eller nyere. Ternary-operatoren er tilgængelig i næsten alle versioner. Null coalescing-operatoren kræver PHP 7.0 eller nyere, og null-safe-operatoren kræver PHP 8.0 eller nyere. Det er altid en god idé at bruge en opdateret version af PHP for at få adgang til de nyeste og bedste funktioner.

Konklusion

Afslutningsvis er ternary-, coalescing- og null-safe-operatorerne uvurderlige værktøjer for enhver moderne PHP-udvikler. Ternary-operatoren tilbyder en fantastisk måde at skrive korte og præcise betingede sætninger på, hvilket reducerer kodemængden og forbedrer læsbarheden. Coalescing-operatoren, introduceret i PHP 7, forenkler processen med at tildele standardværdier og fjerner behovet for klodsede isset()-tjek. Endelig har null-safe-operatoren fra PHP 8 revolutioneret, hvordan vi interagerer med objekter, ved at tilbyde en fejlsikker måde at tilgå egenskaber og metoder på. Ved at integrere disse operatorer i din daglige kodning kan du skrive mere vedligeholdelsesvenlig, robust og elegant kode, der er mindre tilbøjelig til fejl og lettere at arbejde med for dig selv og dit team.

Hvis du vil læse andre artikler, der ligner PHP: Ternary & Coalescing Operatorer Forklaret, kan du besøge kategorien Sundhed.

Go up