{"id":49290,"date":"2023-03-07T11:37:07","date_gmt":"2023-03-07T10:37:07","guid":{"rendered":"https:\/\/kinsta.com\/dk\/?p=49290&#038;preview=true&#038;preview_id=49290"},"modified":"2023-08-24T10:26:51","modified_gmt":"2023-08-24T09:26:51","slug":"skifte-til-php-8","status":"publish","type":"post","link":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/","title":{"rendered":"Skift til PHP 8.x med fire trin &#8211; et interview med Juliette Reinders Folmer"},"content":{"rendered":"<p>Opgradering af et WordPress-websted, plugin eller tema til en ny version af PHP er en opgave, som du j\u00e6vnligt skal udf\u00f8re. Men hvordan g\u00f8r du det s\u00e5 effektivt som muligt? Hvordan kan du vide, at du ikke overser noget? Er der en k\u00f8replan for det?<\/p>\n<p>I denne artikel tager vi fat p\u00e5 disse sp\u00f8rgsm\u00e5l (og flere) og ser p\u00e5, hvad der er involveret i en problemfri overgang til PHP 8.x for dit WordPress-websted, plugin eller tema, herunder en k\u00f8replan.<\/p>\n<p>Vi g\u00f8r dette p\u00e5 baggrund af et interview, som vi har foretaget med PHP-ekspert Juliette Reinders Folmer. Hun bruger det meste af sin dagligdag p\u00e5 programmering og alt omkring det, og fokuserer prim\u00e6rt p\u00e5 open source-projekter, herunder WordPress.<\/p>\n<p>Er du ogs\u00e5 klar til at foretage et smidigt skift? Er du nysgerrig efter vores trin-for-trin-plan? S\u00e5 lad os dykke ned med det samme!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>PHP 8.x &#8211; Hvad er der \u00e6ndret?<\/h2>\n<p>For at f\u00e5 et overblik over \u00e6ndringerne anbefaler vi nedenst\u00e5ende artikler:<\/p>\n<ul>\n<li>Udgivelsesbem\u00e6rkninger for<a href=\"https:\/\/www.php.net\/releases\/8.0\/en.php\" target=\"_blank\" rel=\"noopener noreferrer\"> PHP 8.0<\/a> og <a href=\"https:\/\/www.php.net\/releases\/8.1\/en.php\" target=\"_blank\" rel=\"noopener noreferrer\">PHP 8.1<\/a><\/li>\n<li>Migrationsvejledning for <a href=\"https:\/\/www.php.net\/manual\/en\/migration80.php\" target=\"_blank\" rel=\"noopener noreferrer\">PHP 8.0<\/a> og <a href=\"https:\/\/www.php.net\/manual\/en\/migration81.php\">PHP 8.1<\/a><\/li>\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2020\/11\/23\/wordpress-and-php-8-0\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress og PHP 8.0<\/a> og den <a href=\"https:\/\/make.wordpress.org\/core\/2022\/01\/10\/wordpress-5-9-and-php-8-0-8-1\/\" target=\"_blank\" rel=\"noopener noreferrer\">aktuelle status<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/dk\/blog\/php-8\/\">Hvad er nyt i PHP 8.0<\/a> og <a href=\"https:\/\/kinsta.com\/blog\/php-8-1\/\">PHP 8.1<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/dk\/blog\/php-8-2\/\">Nyheder i PHP 8.2<\/a> og <a href=\"https:\/\/www.php.net\/manual\/en\/migration82.php\">PHP 8.2 migrationsguide<\/a>.<\/li>\n<\/ul>\n<p>N\u00e5r du har l\u00e6st disse artikler, vil du v\u00e6re helt opdateret p\u00e5, hvad der er \u00e6ndret i PHP 8.x, og hvad du skal g\u00f8re for at f\u00e5 dine PHP-projekter til at k\u00f8re uden problemer.<\/p>\n<p>Hvis du er usikker p\u00e5, hvad der er den bedste m\u00e5de at starte p\u00e5, er det ikke noget problem. I samtalen med Juliette diskuterede vi dette i detaljer, og vi vil i denne artikel forklare dig s\u00e5 fyldestg\u00f8rende som muligt, hvordan du kan skifte til PHP 8.x.<\/p>\n<p>Vi vil ogs\u00e5 forklare i informative bokse, hvordan du udf\u00f8rer forskellige operationer i <a href=\"https:\/\/kinsta.com\/dk\/mykinsta\/\">MyKinsta<\/a>, vores propriet\u00e6re kontrolpanel til alle dine WordPress-websteder, applikationer og databaser.<\/p>\n<h2>Skift til PHP 8.x: S\u00e5dan kommer du i gang<\/h2>\n<p>At skifte til PHP 8.x lyder simpelt, og det er det teknisk set ogs\u00e5. Mange v\u00e6rter giver dig mulighed for at angive, hvilken version af PHP du \u00f8nsker at bruge til dit websted i administrationspanelet. Hos Kinsta kan du <a href=\"https:\/\/kinsta.com\/dk\/changelog\/php-8\/\">skifte PHP-versionen<\/a> med et enkelt klik i MyKinsta-dashboardet.<\/p>\n<p>Men f\u00f8r du g\u00f8r det, er der nogle ting, du skal v\u00e6re sikker p\u00e5. Afh\u00e6ngigt af dit videns- og erfaringsniveau anbefaler vi f\u00f8lgende:<\/p>\n<ul>\n<li>Hvis du har bygget dit eget WordPress-websted med standardtemaer og plugins uden at have meget viden om PHP, skal du hyre en udvikler eller et bureau til at unders\u00f8ge, om dit websted er egnet til at k\u00f8re p\u00e5 PHP 8.x. Leder du efter en tredjepart, der kan hj\u00e6lpe dig med dette? S\u00e5 kig p\u00e5 <a href=\"https:\/\/kinsta.com\/dk\/partnere\/\">vores Partnerside<\/a> med en liste over flere p\u00e5lidelige virksomheder, der kan hj\u00e6lpe dig.<\/li>\n<li>Hvis dit WordPress-websted er bygget af en ekstern part, en udvikler eller et bureau, skal du kontakte dem for at sp\u00f8rge, om dit websted kan k\u00f8re p\u00e5 PHP 8.x.<\/li>\n<li>Hvis du selv har bygget dit WordPress-websted &#8211; f.eks. med dit eget tilpassede tema eller selvudviklede plugins &#8211; har vi en k\u00f8replan til dig nedenfor.<\/li>\n<\/ul>\n<p>Hvis dit websted falder ind under en af de to f\u00f8rste kategorier, opfordrer vi dig bestemt til at l\u00e6se resten af artiklen, men vi anbefaler ikke, at du selv begynder at teste dit websted for PHP 8-kompatibilitet. Overlad det til de professionelle.<\/p>\n<p>Uanset hvad du v\u00e6lger, vil vi r\u00e5de dig til ikke bare at skifte dit live-site til PHP 8 og &#8220;se, om det virker&#8221; Er du nysgerrig p\u00e5, hvordan dit websted vil se ud, og kan du ikke vente med at se det k\u00f8re med PHP 8? S\u00e5 begynd at teste i et scenemilj\u00f8. En god host vil give dig mulighed for nemt at <a href=\"https:\/\/kinsta.com\/dk\/blog\/wordpress-staging-site\/\">oprette et scenemilj\u00f8<\/a>.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Det er nemt at oprette et scenemilj\u00f8 med Kinsta.<\/p>\n<p>I <a href=\"https:\/\/my.kinsta.com\/?lang=da?lang=en\">MyKinsta<\/a> skal du klikke p\u00e5 <strong>WordPress Websteder <\/strong>i den venstre navigation. Du vil nu se en liste over dine WordPress-websteder\/installationer. V\u00e6lg det websted, du vil oprette et staging-milj\u00f8 for, klik p\u00e5 <strong>Environment Picker <\/strong>ved siden af webstedets navn og v\u00e6lg <strong>Create a new environment (Opret et nyt milj\u00f8)<\/strong> fra dropdown-menuen. I den modale modal\/pop-up, der vises, skal du navngive dit milj\u00f8, v\u00e6lge <strong>Standardmilj\u00f8<\/strong> og klikke p\u00e5 knappen <strong>Opret et nyt milj\u00f8 <\/strong>.<\/p>\n<p>Herefter bliver du bedt om at v\u00e6lge det milj\u00f8, du vil oprette. V\u00e6lg mulighed 1, <strong>Klon et eksisterende milj\u00f8<\/strong>. Klik nu p\u00e5 knappen <strong>Create a new environment (Opret et nyt milj\u00f8)<\/strong>, hvorefter oprettelsen af det nye milj\u00f8 begynder. Dette kan tage et par minutter. N\u00e5r processen er afsluttet, kan du v\u00e6lge det nye standard staging-milj\u00f8 fra rullelisten <strong>Environment Selector (Milj\u00f8v\u00e6lger)<\/strong> ud for stednavnet.<\/p>\n<p>F\u00e5 mere at vide om, hvordan du <a href=\"https:\/\/kinsta.com\/docs\/wordpress-hosting\/staging-environment\/\">opretter et scenemilj\u00f8<\/a>.<\/p>\n<\/aside>\n\n<figure id=\"attachment_147928\" aria-describedby=\"caption-attachment-147928\" style=\"width: 2864px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-147928 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/mykinsta-create-new-environment-eng0.png\" alt=\"MyKinsta - Opret et nyt milj\u00f8s\" width=\"2864\" height=\"968\"><figcaption id=\"caption-attachment-147928\" class=\"wp-caption-text\">MyKinsta &#8211; Opret et nyt milj\u00f8<\/figcaption><\/figure>\n<p>I scenemilj\u00f8et kan du aktivere PHP 8.x og se, om denne opdatering fungerer godt med dit websted. Det er ogs\u00e5 muligt at arbejde med en lokal kopi af dit websted. Med vores <a href=\"https:\/\/kinsta.com\/dk\/devkinsta\/\">gratis DevKinsta-udviklingsv\u00e6rkt\u00f8j<\/a> kan du nemt importere dit websted fra <a href=\"https:\/\/kinsta.com\/dk\/mykinsta\/\">MyKinsta-dashboardet<\/a>, hvorefter du kan \u00e6ndre PHP-versionen til 8.0 eller 8.1.<\/p>\n<p>Hvis du ikke kan se nogen problemer i staging-milj\u00f8et, betyder det ikke n\u00f8dvendigvis, at der faktisk ikke er nogen problemer. I nedenst\u00e5ende k\u00f8replan kan du se hvorfor.<\/p>\n<h2>Test af PHP 8.x-kompatibilitet: K\u00f8replan<\/h2>\n<p>Test: n\u00f8gleordet til god software. Selv for WordPress-websteder og deres komponenter, s\u00e5som temaer, plugins og WordPress-kernen, er testning et middel til at sikre, at der ikke sker ting, som du ikke \u00f8nsker skal ske.<\/p>\n<p>Et softwareudviklingsprojekt best\u00e5r i h\u00f8j grad af testning. I denne artikel ser vi specifikt p\u00e5 de tests, der kan hj\u00e6lpe dig med at f\u00e5 overgangen til PHP 8.x til at g\u00e5 glat. I vores artikel om DevOps-v\u00e6rkt\u00f8jer finder du et afsnit med en <a href=\"https:\/\/kinsta.com\/blog\/devops-tools\/#devops-testtools\">samling af v\u00e6rkt\u00f8jer<\/a>, du kan bruge.<\/p>\n<p>F\u00f8lgende typer af tests behandles i dette blogindl\u00e6g:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"-1\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<p>Lad os se n\u00e6rmere p\u00e5 de forskellige typer af tests, vi kan udf\u00f8re.<\/p>\n<h3>Statisk analyse (eller statisk test)<\/h3>\n<p>Det f\u00f8rste skridt, du kan tage som PHP-udvikler, er at udf\u00f8re en statisk analyse af din kode med forskellige v\u00e6rkt\u00f8jer. Statisk analyse er en proces, hvor man analyserer software uden at udf\u00f8re koden. Med statisk analyse er det muligt at opdage fejl, opdage problemer med PHP 8.x-kompatibilitet, h\u00e5ndh\u00e6ve kodningsstandarder (f.eks. <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/best-practices\/coding-standards\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-kodningsstandarderne<\/a>), og det er endda muligt at \u00e6ndre og rydde op i koden.<\/p>\n<h4>V\u00e6rkt\u00f8jer til statisk analyse<\/h4>\n<p>Du kan udf\u00f8re en statisk analyse med forskellige v\u00e6rkt\u00f8jer, f.eks:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/PHPCompatibility\/PHPCompatibility\" target=\"_blank\" rel=\"noopener noreferrer\">PHPCompatibility<\/a><\/li>\n<li><a href=\"https:\/\/psalm.dev\/\" target=\"_blank\" rel=\"noopener noreferrer\">Psalm<\/a><\/li>\n<li><a href=\"https:\/\/phpstan.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">PHPStan<\/a><\/li>\n<\/ul>\n<p>I skrivende stund underst\u00f8ttes ikke alle kontroller af PHP 8.1 i den seneste udgave af PHPCompatibility. PHP 8.1-kontroller kan v\u00e6re i udviklingsudgaven, s\u00e5 s\u00f8rg for at bruge disse (indtil videre), n\u00e5r du bruger PHPCompatibility til at analysere dit projekt og se, hvilke fejl\/anbefalinger der er.<\/p>\n<p>PHP 8.1-kontroller vil snart blive frigivet i en ny <em>st\u00f8rre <\/em>version. Hvis du vil holdes opdateret om dette, og du har en GitHub-konto, skal du \u00e5bne <a href=\"https:\/\/github.com\/PHPCompatibility\/PHPCompatibility\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub-repositoriet for PHPCompatibility<\/a> og navigere til <strong>Watch<\/strong> -&gt; <strong>Custom<\/strong> -&gt; <strong>Releases<\/strong>, hvor du kan v\u00e6lge at blive underrettet, n\u00e5r en ny version udgives.<\/p>\n<p>PHPCompatibility, som kun tester kompatibilitet for en bestemt version (eller r\u00e6kke af versioner) af PHP, er let at ops\u00e6tte. Du f\u00e5r de bedste resultater, hvis du k\u00f8rer en <a href=\"https:\/\/github.com\/PHPCompatibility\/PHPCompatibility#sniffing-your-code-for-compatibility-with-specific-php-versions\" target=\"_blank\" rel=\"noopener noreferrer\">testVersion<\/a> &#8211; f.eks. 8.0+ (8.0 og opefter) &#8211; inden for PHPCompatibility.<\/p>\n<p>Du b\u00f8r holde \u00f8je med for\u00e6ldede eller slettede funktioner, \u00e6ndrede standardv\u00e6rdier for funktionsparametre, om du skal bruge concat uden parenteser, om du skal bruge match som funktionsnavn (da det har v\u00e6ret reserveret siden PHP 8.0) osv.<\/p>\n<figure id=\"attachment_147872\" aria-describedby=\"caption-attachment-147872\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-147872 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/PHPCompatibility-1024x619-1.png\" alt=\"Sk\u00e6rmbillede fra PHPCompatibility GitHub-siden\" width=\"1024\" height=\"619\"><figcaption id=\"caption-attachment-147872\" class=\"wp-caption-text\">Sk\u00e6rmbillede fra PHPCompatibility GitHub-siden<\/figcaption><\/figure>\n<p>Psalm og PHPStan er gode tilf\u00f8jelser og kan hj\u00e6lpe dig ved at udf\u00f8re yderligere kontroller i forbindelse med variabelstyper. Ulempen ved disse v\u00e6rkt\u00f8jer er, at det kr\u00e6ver en masse konfiguration for at f\u00e5 rapporter om PHP 8.0 og 8.1. Selv hvis de er vellykkede, kan du forvente mange falske positive resultater. False positives er indberetninger, der gives forkert, hvilket skyldes begr\u00e6nsningerne i statisk analyse.<\/p>\n<p>Der kr\u00e6ves solid viden for at fortolke resultaterne fra disse to v\u00e6rkt\u00f8jer korrekt, men denne viden kan hj\u00e6lpe dig med at identificere yderligere inkompatibiliteter, som PHPCompatibility ikke kan finde. Se dokumentationen for <a href=\"https:\/\/psalm.dev\/docs\/\" target=\"_blank\" rel=\"noopener noreferrer\">Psalm<\/a> og <a href=\"https:\/\/phpstan.org\/user-guide\/getting-started\" target=\"_blank\" rel=\"noopener noreferrer\">PHPStan<\/a>, hvis du vil l\u00e6re mere om dem.<\/p>\n<p>Sammenfatning:<\/p>\n<ul>\n<li>Udf\u00f8r statisk analyse med PHPCompatibility, Psalm, PHPStan<\/li>\n<li>L\u00f8s alle legitime problemer<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-\">\n        <p><strong>Eksperttip fra Juliette<\/strong><\/p>\n<p>Mens du tester, skal du i din fil php.ini \/ wp-config.php indstille error_reporting til -1 i din fil php.ini \/ wp-config.php. Dette skyldes, at E_ALL, afh\u00e6ngigt af PHP-versionen, ikke indeholder alt.<\/p>\n<p>F\u00f8rst fra 8.0 og frem indeholder E_ALL alt. Sl\u00e5 ogs\u00e5 log_errors til for at se tilbage p\u00e5 notifikationer i en logfil.<\/p>\n<p>Du m\u00e5 ikke sl\u00e5 fejllogning til p\u00e5 et live-site, da det kan medf\u00f8re forsinkelser, da det skal skrive data til en fil. S\u00e5 g\u00f8r dette i et staging-milj\u00f8 og s\u00f8rg for at vide, hvad der sker\/fejl.<\/p>\n<p>Hvis du vil se dine logfiler i MyKinsta, skal du g\u00e5 til webstedet og klikke p\u00e5 <strong>Logs <\/strong>i menuen. Her kan du se filerne error.log og access.log og studere alle logposter.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/docs\/wordpress-hosting\/wordpress-troubleshooting\/view-server-logs\/\">Klik her for at f\u00e5 mere at vide om visning af logs i MyKinsta<\/a>.<\/p>\n<\/aside>\n\n<figure id=\"attachment_147929\" aria-describedby=\"caption-attachment-147929\" style=\"width: 2806px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-147929 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/mykinsta-access-logs-eng0.png\" alt=\"MyKinsta - visning af logfiler\" width=\"2806\" height=\"1746\"><figcaption id=\"caption-attachment-147929\" class=\"wp-caption-text\">MyKinsta &#8211; visning af logfiler<\/figcaption><\/figure>\n<h3>Test af enheder<\/h3>\n<p>Det n\u00e6ste trin i processen er enhedstest. Enhedstest er en metode til at teste kodestykker enkeltvis. Ved enhedstestning udvikles der specifikke m\u00e5lrettede tests for hver enhed. Dette vil indeb\u00e6re, at forskellige scenarier skal k\u00f8res igennem. Det er at foretr\u00e6kke, at hvert scenarie testes separat fra de andre, s\u00e5 testene er uafh\u00e6ngige af hinanden.<\/p>\n<p>Det er naturligvis ikke nok at have unit-tests alene. De skal ogs\u00e5 k\u00f8res. Unit tests automatiseres bedst ved hj\u00e6lp af CI-v\u00e6rkt\u00f8jer (continuous integration) som <a href=\"https:\/\/www.jenkins.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jenkins<\/a>, <a href=\"https:\/\/github.com\/features\/actions\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Actions<\/a> eller <a href=\"https:\/\/www.travis-ci.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Travis<\/a>.<\/p>\n<figure id=\"attachment_147875\" aria-describedby=\"caption-attachment-147875\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-147875 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/github-actions-1024x687-1.png\" alt=\"Et eksempel fra GitHub Actions\" width=\"1024\" height=\"687\"><figcaption id=\"caption-attachment-147875\" class=\"wp-caption-text\">Et eksempel fra GitHub Actions<\/figcaption><\/figure>\n<h4>Underst\u00f8ttelse af flere versioner af PHP<\/h4>\n<p>Hvis du som plugin-bygger \u00f8nsker at underst\u00f8tte flere PHP-versioner, skal du sikre, at testene i CI k\u00f8res mod alle de PHP-versioner, du underst\u00f8tter.<\/p>\n<p>Du kan selvf\u00f8lgelig ogs\u00e5 kun underst\u00f8tte nyere versioner, valget er helt op til dig.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-\">\n        <p><strong>Eksperttip fra Juliette<\/strong><\/p>\n<p>P\u00e5 GitHub Actions kan du allerede nu teste mod PHP 8.2, hvilket sikrer, at du f\u00e5r advarsler i tide om nye \u00e6ndringer i PHP, som du skal tage hensyn til.<\/p>\n<\/aside>\n\n<p>Test med flere versioner af PHP kr\u00e6ver, at du bruger flere PHPUnit-versioner, afh\u00e6ngigt af PHP-versionen. Da PHPUnit har indf\u00f8rt flere \u00e6ndringer i l\u00f8bet af \u00e5rene, der p\u00e5virker, hvordan testene skrives, kan denne del v\u00e6re vanskelig.<\/p>\n<p>For at komme udenom dette kan du bruge <a href=\"https:\/\/github.com\/Yoast\/PHPUnit-Polyfills\" target=\"_blank\" rel=\"noopener noreferrer\">PHPUnit Polyfills<\/a> (skrevet af Juliette og sponsoreret af <a href=\"https:\/\/kinsta.com\/partners\/yoast\/\">Yoast<\/a>). Dette giver dig mulighed for at skrive tests, der officielt ikke underst\u00f8ttes af PHPUnit 9 (og som derfor kan k\u00f8re p\u00e5 PHP 8.x). Polyfills f\u00e5r derefter dine tests til at fungere i PHPUnit 4.x til 9.x og med PHP 5.4 til PHP 8.1 (fra nu af).[\/notice]<\/p>\n<p>Nu hvor du har testene k\u00f8rende, er det n\u00e6ste skridt at sikre, at de problemer, der er fundet i testene, er rettet.<\/p>\n<h4>Koded\u00e6kning<\/h4>\n<p>K\u00f8rsel af disse tests er den mest p\u00e5lidelige m\u00e5de at finde inkompatibiliteter p\u00e5 tv\u00e6rs af versioner p\u00e5.<\/p>\n<p>I den forbindelse skal du v\u00e6re opm\u00e6rksom p\u00e5 <em>koded\u00e6kningen <\/em>af dine tests:<\/p>\n<ul>\n<li>Lad os antage, at du har en funktion A og har skrevet en test for den, og at funktion A kalder funktionerne B, C og D som en del af logikken i funktionen.<\/li>\n<li>Testen for funktion A er skrevet for at teste logikken i funktion A, men den vil ogs\u00e5 kalde funktionerne B, C og D under testen. For funktionerne B, C og D tester man s\u00e5 normalt kun &#8220;happy path&#8221; &#8211; den situation, hvor alt g\u00e5r godt &#8211; og dermed er disse funktioner heller ikke fuldt ud testet endnu, selv om (en del af) koden i disse funktioner udf\u00f8res under testen af funktion A.<\/li>\n<li>For hver af dine tests skal du angive, hvilken kode der specifikt testes. Det g\u00f8r du ved at give hver test et <a href=\"https:\/\/phpunit.readthedocs.io\/en\/9.5\/code-coverage-analysis.html#specifying-covered-code-parts\" target=\"_blank\" rel=\"noopener noreferrer\">@covers<\/a> P\u00e5 denne m\u00e5de &#8220;t\u00e6ller B, C og D ikke med&#8221; i beregningen af koded\u00e6kningen, hvilket giver dig mulighed for at se, hvilken del af din kode der er d\u00e6kket af testene.<\/li>\n<\/ul>\n<p>Ofte skriver og tester udviklere &#8211; nogle gange endda ubevidst &#8211; for &#8220;den lykkelige vej&#8221;. I disse tilf\u00e6lde er det ogs\u00e5 n\u00f8dvendigt at teste, hvad der sker, n\u00e5r der overf\u00f8res uventede data til en funktion.<strong> Det<\/strong> <strong>er ikke nok at teste med kun forventede v\u00e6rdier\/typer<\/strong>.<\/p>\n\n<p>Den anden del af ovenst\u00e5ende citat bliver ofte glemt, selv om den m\u00e5ske er endnu vigtigere end den f\u00f8rste del. Hvad sker der, hvis du overf\u00f8rer en forkert type? F\u00e5r du en fejlmeddelelse? Eller bliver variablen castet med funktionen forts\u00e6tter som normalt? Hvad sker der, hvis der overgives en uventet v\u00e6rdi til funktionen?<\/p>\n<p>S\u00f8rg for at teste dine funktioner med uventede variabler, typer og v\u00e6rdier. Kun p\u00e5 den m\u00e5de kan du stole p\u00e5, at dine tests kan finde problemer, som en ny PHP-version kan for\u00e5rsage.<\/p>\n<h4>PHP bliver strengere og strengere<\/h4>\n<p>PHP bliver mere pr\u00e6cis (strict) i sin h\u00e5ndtering af &#8220;typer&#8221; for PHP&#8217;s egne funktioner samt ting som dynamiske egenskaber. Disse \u00e6ndringer har generelt til form\u00e5l at hj\u00e6lpe udviklere med at levere fejlfri kode (alts\u00e5 kode med f\u00e6rre fejl). Men dette kan udg\u00f8re en stor opgraderingsh\u00f8jde for allerede eksisterende kode, der er skrevet p\u00e5 grundlag af de &#8220;gamle&#8221; principper i PHP.<\/p>\n<p>P\u00e5 grund af denne str\u00e6ben efter mere nyttige fejlmeddelelser i PHP kan du se, at det tager mere og mere tid at g\u00f8re eksisterende kode egnet til nye PHP-versioner. At g\u00f8re kode, der fungerede i PHP 5.6, egnet til PHP 7.0, tog i de fleste tilf\u00e6lde kun en br\u00f8kdel af tiden sammenlignet med at opgradere kode, s\u00e5 den blev egnet til PHP 8.1. Og det er p\u00e5 trods af, at PHP 7.0 var en &#8220;major&#8221;-udgave, mens PHP 8.1 er en &#8220;minor&#8221;-udgave<\/p>\n<p>I mange tilf\u00e6lde er testning stadig den eneste p\u00e5lidelige m\u00e5de at afg\u00f8re, hvad der skal \u00e6ndres for at underst\u00f8tte en ny version.<\/p>\n<p>Unit testing er muligt med forskellige v\u00e6rkt\u00f8jer, f.eks:<\/p>\n<ul>\n<li><a href=\"https:\/\/phpunit.de\/\" target=\"_blank\" rel=\"noopener noreferrer\">PHPUnit<\/a><\/li>\n<li><a href=\"http:\/\/docs.mockery.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Mockery<\/a><\/li>\n<li><a href=\"https:\/\/docs.behat.org\/en\/latest\/\" target=\"_blank\" rel=\"noopener noreferrer\">Behat<\/a>,<\/li>\n<li><a href=\"http:\/\/datasift.github.io\/storyplayer\/v2\/using\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">Storyplayer<\/a><\/li>\n<\/ul>\n<p>Mange af disse v\u00e6rkt\u00f8jer er bygget p\u00e5 eller i forbindelse med PHPUnit.<\/p>\n<p>I sidste ende er det ligegyldigt, hvilke v\u00e6rkt\u00f8jer du bruger. Det vigtigste er, at du tester, og at du f\u00e5r testene til at k\u00f8re p\u00e5 nye PHP-versioner. Dette trin kan nogle gange v\u00e6re meget tricky, men heldigvis findes der som tidligere n\u00e6vnt v\u00e6rkt\u00f8jer til dette, s\u00e5som <a href=\"https:\/\/github.com\/Yoast\/PHPUnit-Polyfills\" target=\"_blank\" rel=\"noopener noreferrer\">PHPUnit Polyfills<\/a>.<\/p>\n<h3>Integrationstestning<\/h3>\n<p>Integrationstest er det n\u00e6ste trin, vi udf\u00f8rer efter statisk analyse og enhedstest. En integrationstest er der, hvor virkelige situationer testes i en st\u00f8rre sammenh\u00e6ng end blot en &#8220;kodenhed&#8221; Det drejer sig f.eks. om test med en aktiv (test)database eller test med et eksternt API, for blot at give to eksempler.<\/p>\n<p>S\u00e5 n\u00e5r du tester koden for et plugin eller tema i forbindelse med WordPress og bruger en rigtig version, er der pr. definition tale om integrationstest.<\/p>\n<p>WP Test Utils (igen skrevet af Juliette og sponsoreret af Yoast) er et fremragende v\u00e6rkt\u00f8j til integrationstest. WP Test Utils leverer v\u00e6rkt\u00f8j til at skrive integrations- og enhedstests, hvor WordPress &#8220;mocked up&#8221; ved hj\u00e6lp af <a href=\"https:\/\/github.com\/Brain-WP\/BrainMonkey\" target=\"_blank\" rel=\"noopener noreferrer\">Brainmonkey<\/a> og <a href=\"http:\/\/docs.mockery.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Mockery<\/a>, hvor almindeligt anvendte WordPress-funktioner &#8220;fakes&#8221;, s\u00e5 du tester din egen kode og ikke WordPress-koden.<\/p>\n<figure id=\"attachment_147877\" aria-describedby=\"caption-attachment-147877\" style=\"width: 911px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-147877 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/02\/wp-test-utils.png\" alt=\"WP Test Utilities p\u00e5 GitHub\" width=\"911\" height=\"648\"><figcaption id=\"caption-attachment-147877\" class=\"wp-caption-text\">WP Test Utilities p\u00e5 GitHub<\/figcaption><\/figure>\n<p>Integrationstest med WordPress er en mere tricky historie, fordi det involverer integration med WordPress og WordPress&#8217; testsuite. Afh\u00e6ngigt af hvilke versioner af WordPress et plugin eller tema underst\u00f8tter, skal du overveje, hvilke PHPUnit-versioner der underst\u00f8ttes af WordPress selv for at k\u00f8re testene p\u00e5 forskellige PHP-versioner.<\/p>\n<p>WordPress 5.6 til 5.8 bruger f.eks. <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/references\/phpunit-compatibility-and-wordpress-versions\/\" target=\"_blank\" rel=\"noopener noreferrer\">PHPUnit 5 til 7<\/a> til at teste <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/references\/php-compatibility-and-wordpress-versions\/\" target=\"_blank\" rel=\"noopener noreferrer\">PHP 5.6 til PHP 8.0<\/a>, men fra WordPress 5.9 bruger WordPress selv ogs\u00e5 PHPUnit Polyfills til bredere underst\u00f8ttelse. WP Test Utils fungerer som en bro for at overvinde alle disse forskelle.<\/p>\n<p>Vil du l\u00e6re mere om, hvordan du k\u00f8rer integrationstest mod flere forskellige versioner af WordPress, herunder WordPress 5.9 og nyere? S\u00e5 <a href=\"https:\/\/make.wordpress.org\/core\/2021\/09\/27\/changes-to-the-wordpress-core-php-test-suite\/\" target=\"_blank\" rel=\"noopener noreferrer\">l\u00e6s om det p\u00e5 WordPress&#8217; websted<\/a>.<\/p>\n<h3>Manuel testning<\/h3>\n<p>Nu hvor du har gennemg\u00e5et enhedstest og integrationstest og har rettet alle de problemer, du har fundet, er det tid til at lave manuel test. Dit websted k\u00f8rer, og din egen kode fungerer, men du bruger ogs\u00e5 plugins A, B og C. Ved du, om disse plugins er kompatible?<\/p>\n<p>Tjek f.eks. dette med pluginets forfattere og se, om de angiver, at det er PHP 8.x-kompatibelt. Sp\u00f8rgsm\u00e5let er s\u00e5 selvf\u00f8lgelig, hvordan plugin&#8217;et er blevet testet. Ofte er svaret her: isoleret. Pluginets funktioner er normalt blevet testet i forbindelse med WordPress alene, uden andre aktive plugins. Og selv hvis der blev brugt andre plugins i disse tests, er der stor sandsynlighed for, at ikke alle plugins, som <em>du<\/em> bruger, var en del af testen, s\u00e5 tag en s\u00e5dan kompatibilitetserkl\u00e6ring med et gran salt.<\/p>\n<p>For eksempel et WordPress-websted med 3 plugins (A, B og C). Det er muligt, at plugin B f.eks. returnerer en forkert variabel type via et filter, som plugin C, der bruger det samme filter, \u00f8nsker at arbejde med. Dette kan s\u00e5 for\u00e5rsage en fatal fejl, fordi typen ikke l\u00e6ngere er den forventede. Plugin C ses s\u00e5 som den skyldige for fejlmeddelelsen, selv om plugin B er den egentlige synder.<\/p>\n<p>Plugin-interoperabilitet-inkompatibiliteter er umulige at opdage, n\u00e5r man tester isoleret. Jo flere aktive plugins, jo st\u00f8rre er sandsynligheden for, at noget g\u00e5r galt. Det ville f.eks. v\u00e6re meget gavnligt at sende sideanmodninger fra et livewebsted til et scenemilj\u00f8 (med fejllogning aktiveret) for at opdage, hvad der faktisk g\u00e5r galt.<\/p>\n<p>Med denne type problem vil en webstedsejer normalt kun se en meddelelse om, at der var en fejl med den sidst udf\u00f8rte kode (i dette tilf\u00e6lde fra plugin C), selv om plugin C ikke n\u00f8dvendigvis er \u00e5rsagen til problemet.<\/p>\n<p>I de fleste tilf\u00e6lde er der en masse manuelt, menneskeligt arbejde involveret, og der kr\u00e6ves en god portion albuefedt for at opdage og l\u00f8se disse problemer. Dette <em>kunne <\/em>automatiseres ved hj\u00e6lp af end-to-end-test, men vi ser ikke, at dette sker meget i WordPress.<\/p>\n<h4>Test tilg\u00e6ngelighed for udnyttede plugins<\/h4>\n<p>For udviklere og udviklingsteams: Accepter kun kode, n\u00e5r test er tilg\u00e6ngelige. P\u00e5 den m\u00e5de sikrer du, at der kr\u00e6ves mindre manuel testning, hvilket sparer dig for en masse tid.<\/p>\n<p>Stil sp\u00f8rgsm\u00e5lstegn ved dens teststrategi, hvis du \u00f8nsker at k\u00f8be et kommercielt plugin eller tema. P\u00e5 den m\u00e5de skaber vi i f\u00e6llesskab bevidsthed blandt udviklere\/udviklingsteams i WordPress-f\u00e6llesskabet om at f\u00e5 testning h\u00f8jere op p\u00e5 dagsordenen, og det kommer os alle til gode.<\/p>\n<p>Testning bliver ofte &#8211; uretf\u00e6rdigt &#8211; opfattet som en omkostning, n\u00e5r det i virkeligheden sparer penge. Den ekstra investering, der kr\u00e6ves for at skrive tests, betaler sig i form af betydeligt f\u00e6rre fejlrapporter og mindre tid brugt p\u00e5 at rette fejl. Med automatiseret softwaretestning kan udvidelser og \u00e6ndringer desuden gennemf\u00f8res hurtigere, fordi testene hurtigt kan bekr\u00e6fte, at den eksisterende funktionalitet fortsat fungerer.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-\">\n        <p><strong>Eksperttip fra Juliette<\/strong><\/p>\n<p>N\u00e5r du vil i gang med at skrive ny kode:<\/p>\n<ol>\n<li>Start med at skrive, hvad en funktion skal g\u00f8re og med hvilken logik. Skriv dette som en kommentar eller en r\u00e6kke kommentarer.<\/li>\n<li>Skriv testene. Pr\u00f8v ogs\u00e5 at have edge cases i tankerne.<\/li>\n<li>Skriv f\u00f8rst derefter koden.<\/li>\n<\/ol>\n<p>Af den oprindelige logik, som du har beskrevet i kommentarerne, vil halvdelen v\u00e6re forsvundet, fordi den er blevet erstattet af kode. Lad bare resten af kommentarerne st\u00e5, da de kan hj\u00e6lpe dig med at forst\u00e5 logikken igen senere, hvis du ikke har kigget p\u00e5 din kode i et stykke tid<\/p>\n<\/aside>\n\n\n<h2>WordPress-v\u00e6rternes rolle og PHP 8.x<\/h2>\n<p>For den gennemsnitlige webstedsejer er vejledning fra din host yderst \u00f8nskelig. Overvej f\u00f8lgende:<\/p>\n<ul>\n<li>Dokumentation og opdateringer til kunderne om, at WordPress Core, plugins og\/eller temaer (i nogle tilf\u00e6lde) ikke er kompatible med PHP p\u00e5 tv\u00e6rs af versioner<\/li>\n<li>Muligheder for test (s\u00e5som at <a href=\"https:\/\/kinsta.com\/dk\/wordpress-hosting\/scenemiljoeer\/\">arbejde med et scenemilj\u00f8<\/a>)<\/li>\n<li>Metoder til fejlrapportering og kontakt med support<\/li>\n<\/ul>\n<p>Dette er ogs\u00e5 en fordel for en webhost, da webstedsejere ofte kontakter hostet for at f\u00e5 hj\u00e6lp, n\u00e5r der opst\u00e5r problemer. I tilf\u00e6lde af et skift til PHP 8.0, 8.1 eller 8.2 er ejeren af webstedet ansvarlig for potentielle problemer, og jo flere oplysninger ejeren har for at kunne forberede skiftet ordentligt, jo bedre er det.<\/p>\n<p>At stille PHP 8.1 eller 8.2 til r\u00e5dighed for kunderne som webhost er \u00e9n ting, men i den forbindelse skal de s\u00f8rge for at skabe opm\u00e6rksomhed blandt kunderne, s\u00e5 de er klar over, at der kan opst\u00e5 problemer. Det anbefales at teste dit websted i et scenemilj\u00f8 med en anden version end live-versionen. (Valg af PHP-versioner er <a href=\"https:\/\/kinsta.com\/dk\/changelog\/php-8\/\">tilg\u00e6ngelig som standard hos Kinsta<\/a>)<\/p>\n<h2>Minimum PHP-version til WordPress<\/h2>\n<p>Over 15 % af alle websteder bruger i \u00f8jeblikket PHP-version 7.0 eller lavere. Dette kan ses i de <a href=\"https:\/\/wordpress.org\/about\/stats\/\" target=\"_blank\" rel=\"noopener noreferrer\">officielle WordPress-statistikker<\/a>. Omkring 83% af alle WordPress-websteder bruger i \u00f8jeblikket PHP-version 8.0 eller lavere. Bem\u00e6rk venligst, at alt, der er lavere end eller lig med version 7.4, i \u00f8jeblikket <a href=\"https:\/\/www.php.net\/supported-versions\" target=\"_blank\" rel=\"noopener noreferrer\">ikke l\u00e6ngere underst\u00f8ttes af PHP<\/a>. Brug af udtjente versioner af PHP kan medf\u00f8re problemer, fordi sikkerhedsopdateringer ikke l\u00e6ngere udgives.<\/p>\n<p>For at undg\u00e5 problemer er det vigtigt, at ejere af WordPress-websteder er opm\u00e6rksomme p\u00e5 og informeret om den mindste PHP-version, der g\u00f8r det muligt for deres websted at k\u00f8re sikkert. Ejere af websteder kan for deres vedkommende selv \u00e6ndre PHP-versionen (<a href=\"https:\/\/kinsta.com\/dk\/blog\/opdateres-php-versionen-wordpress\/\">muligt hos Kinsta for alle pakker<\/a>) eller bede deres host om at opdatere webstedet til en nyere PHP-version. I ekstreme tilf\u00e6lde kan man skifte til en v\u00e6rt, der underst\u00f8tter disse nyere versioner.<\/p>\n<p>Da WordPress kun kr\u00e6ver en <a href=\"https:\/\/wordpress.org\/about\/requirements\/\" target=\"_blank\" rel=\"noopener noreferrer\">minimumsversion p\u00e5 7.4<\/a>, er der ikke tilstr\u00e6kkelig motivation for mange v\u00e6rter og webstedsejere til at opdatere deres websteder. Og det er p\u00e5 trods af, at PHP 7.4 n\u00e5ede sin slutdato i <a href=\"https:\/\/www.php.net\/eol.php\" target=\"_blank\" rel=\"noopener noreferrer\">november 2022<\/a>.<\/p>\n<p>Hvis WordPress nogensinde \u00f8ger minimumsversionen af PHP, kan det betyde, at mange websteder ikke l\u00e6ngere vil v\u00e6re kompatible med en opdatering til den nyeste WordPress-version. Der vil dog fortsat blive udgivet sikkerhedsopdateringer til disse for\u00e6ldede versioner i et stykke tid endnu.<\/p>\n<h2>Opsummering<\/h2>\n<p>For at skifte til PHP 8.0 eller h\u00f8jere for dit websted er der flere trin, som du eller din udvikler skal udf\u00f8re. Vigtige trin omfatter:<\/p>\n<ul>\n<li>Statisk analyse<\/li>\n<li>Test af enheder<\/li>\n<li>Integrationstest<\/li>\n<li>Manuel test<\/li>\n<\/ul>\n<p>N\u00e5r du skifter til PHP 8.x, skal du sikre dig, at <em>alt<\/em> er blevet testet korrekt. Det er den eneste m\u00e5de at garantere, at dit websted vil k\u00f8re korrekt, hurtigt og sikkert p\u00e5 en nyere PHP-version.<\/p>\n<p>Vi takker Juliette enormt meget for at deltage i denne artikel og for alt hendes arbejde med de n\u00e6vnte v\u00e6rkt\u00f8jer!<\/p>\n<p><em>Foto af Juliette, taget af Jip Moors og brugt med tilladelse.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Opgradering af et WordPress-websted, plugin eller tema til en ny version af PHP er en opgave, som du j\u00e6vnligt skal udf\u00f8re. Men hvordan g\u00f8r du det &#8230;<\/p>\n","protected":false},"author":139,"featured_media":49291,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[713,726],"class_list":["post-49290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-laer-php","topic-php-opdateringer"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Skift til PHP 8.x i fire trin - et interview med Juliette Reinders Folmer - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"L\u00e6r, hvad der er involveret i en glidende overgang til PHP 8.x for dit WordPress-websted, plugin eller tema, inklusive en k\u00f8replan.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/\" \/>\n<meta property=\"og:locale\" content=\"da_DK\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Skift til PHP 8.x med fire trin - et interview med Juliette Reinders Folmer\" \/>\n<meta property=\"og:description\" content=\"L\u00e6r, hvad der er involveret i en glidende overgang til PHP 8.x for dit WordPress-websted, plugin eller tema, inklusive en k\u00f8replan.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-07T10:37:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-24T09:26:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Marcel Bootsman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"L\u00e6r, hvad der er involveret i en glidende overgang til PHP 8.x for dit WordPress-websted, plugin eller tema, inklusive en k\u00f8replan.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_dk\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_dk\" \/>\n<meta name=\"twitter:label1\" content=\"Skrevet af\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcel Bootsman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimeret l\u00e6setid\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/\"},\"author\":{\"name\":\"Marcel Bootsman\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/d8f086a7911078001ff0e6c05d42b5c7\"},\"headline\":\"Skift til PHP 8.x med fire trin &#8211; et interview med Juliette Reinders Folmer\",\"datePublished\":\"2023-03-07T10:37:07+00:00\",\"dateModified\":\"2023-08-24T09:26:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/\"},\"wordCount\":4053,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png\",\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/\",\"url\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/\",\"name\":\"Skift til PHP 8.x i fire trin - et interview med Juliette Reinders Folmer - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png\",\"datePublished\":\"2023-03-07T10:37:07+00:00\",\"dateModified\":\"2023-08-24T09:26:51+00:00\",\"description\":\"L\u00e6r, hvad der er involveret i en glidende overgang til PHP 8.x for dit WordPress-websted, plugin eller tema, inklusive en k\u00f8replan.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#breadcrumb\"},\"inLanguage\":\"da-DK\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png\",\"contentUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/dk\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"L\u00e6r PHP\",\"item\":\"https:\/\/kinsta.com\/dk\/emner\/laer-php\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Skift til PHP 8.x med fire trin &#8211; et interview med Juliette Reinders Folmer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/dk\/#website\",\"url\":\"https:\/\/kinsta.com\/dk\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Hurtig, sikker, premium hostingl\u00f8sninger\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/dk\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"da-DK\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/dk\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/dk\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/\",\"https:\/\/x.com\/kinsta_dk\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/d8f086a7911078001ff0e6c05d42b5c7\",\"name\":\"Marcel Bootsman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@id\":\"https:\/\/kinsta.com\/dk\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1bf6543c8d557c182b40836c561bf0cd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1bf6543c8d557c182b40836c561bf0cd?s=96&d=mm&r=g\",\"caption\":\"Marcel Bootsman\"},\"description\":\"Partnerships &amp; Community Manager EMEA. Je kan me bereiken via Linkedin.\",\"sameAs\":[\"https:\/\/kinsta.com\/nl\/\",\"https:\/\/www.linkedin.com\/in\/marcelbootsman\/\"],\"url\":\"https:\/\/kinsta.com\/dk\/blog\/author\/marcelbootsman\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Skift til PHP 8.x i fire trin - et interview med Juliette Reinders Folmer - Kinsta\u00ae","description":"L\u00e6r, hvad der er involveret i en glidende overgang til PHP 8.x for dit WordPress-websted, plugin eller tema, inklusive en k\u00f8replan.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/","og_locale":"da_DK","og_type":"article","og_title":"Skift til PHP 8.x med fire trin - et interview med Juliette Reinders Folmer","og_description":"L\u00e6r, hvad der er involveret i en glidende overgang til PHP 8.x for dit WordPress-websted, plugin eller tema, inklusive en k\u00f8replan.","og_url":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","article_published_time":"2023-03-07T10:37:07+00:00","article_modified_time":"2023-08-24T09:26:51+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png","type":"image\/png"}],"author":"Marcel Bootsman","twitter_card":"summary_large_image","twitter_description":"L\u00e6r, hvad der er involveret i en glidende overgang til PHP 8.x for dit WordPress-websted, plugin eller tema, inklusive en k\u00f8replan.","twitter_image":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png","twitter_creator":"@kinsta_dk","twitter_site":"@kinsta_dk","twitter_misc":{"Skrevet af":"Marcel Bootsman","Estimeret l\u00e6setid":"18 minutter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/"},"author":{"name":"Marcel Bootsman","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/d8f086a7911078001ff0e6c05d42b5c7"},"headline":"Skift til PHP 8.x med fire trin &#8211; et interview med Juliette Reinders Folmer","datePublished":"2023-03-07T10:37:07+00:00","dateModified":"2023-08-24T09:26:51+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/"},"wordCount":4053,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/dk\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png","inLanguage":"da-DK","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/","url":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/","name":"Skift til PHP 8.x i fire trin - et interview med Juliette Reinders Folmer - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/dk\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png","datePublished":"2023-03-07T10:37:07+00:00","dateModified":"2023-08-24T09:26:51+00:00","description":"L\u00e6r, hvad der er involveret i en glidende overgang til PHP 8.x for dit WordPress-websted, plugin eller tema, inklusive en k\u00f8replan.","breadcrumb":{"@id":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#breadcrumb"},"inLanguage":"da-DK","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/"]}]},{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#primaryimage","url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png","contentUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/03\/Juliette_Reinders_Folmer_image.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/dk\/blog\/skifte-til-php-8\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/dk\/"},{"@type":"ListItem","position":2,"name":"L\u00e6r PHP","item":"https:\/\/kinsta.com\/dk\/emner\/laer-php\/"},{"@type":"ListItem","position":3,"name":"Skift til PHP 8.x med fire trin &#8211; et interview med Juliette Reinders Folmer"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/dk\/#website","url":"https:\/\/kinsta.com\/dk\/","name":"Kinsta\u00ae","description":"Hurtig, sikker, premium hostingl\u00f8sninger","publisher":{"@id":"https:\/\/kinsta.com\/dk\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/dk\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"da-DK"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/dk\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/dk\/","logo":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/dk\/wp-content\/uploads\/sites\/12\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/dk\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Danmark-122855885298660\/","https:\/\/x.com\/kinsta_dk","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/d8f086a7911078001ff0e6c05d42b5c7","name":"Marcel Bootsman","image":{"@type":"ImageObject","inLanguage":"da-DK","@id":"https:\/\/kinsta.com\/dk\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1bf6543c8d557c182b40836c561bf0cd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1bf6543c8d557c182b40836c561bf0cd?s=96&d=mm&r=g","caption":"Marcel Bootsman"},"description":"Partnerships &amp; Community Manager EMEA. Je kan me bereiken via Linkedin.","sameAs":["https:\/\/kinsta.com\/nl\/","https:\/\/www.linkedin.com\/in\/marcelbootsman\/"],"url":"https:\/\/kinsta.com\/dk\/blog\/author\/marcelbootsman\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/49290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/users\/139"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/comments?post=49290"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/49290\/revisions"}],"predecessor-version":[{"id":50998,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/posts\/49290\/revisions\/50998"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/translations\/en"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/translations\/nl"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/translations\/dk"},{"href":"https:\/\/kinsta.com\/dk\/wp-json\/kinsta\/v1\/posts\/49290\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/media\/49291"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/media?parent=49290"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/tags?post=49290"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/dk\/wp-json\/wp\/v2\/topic?post=49290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}