{"id":9762,"date":"2025-08-25T21:27:39","date_gmt":"2025-08-25T19:27:39","guid":{"rendered":"https:\/\/www.yourwebhoster.eu\/?p=9762"},"modified":"2025-08-26T15:16:55","modified_gmt":"2025-08-26T13:16:55","slug":"php-8-5-new-features","status":"publish","type":"post","link":"https:\/\/www.yourwebhoster.eu\/nl\/2025\/08\/25\/php-8-5-new-features\/","title":{"rendered":"Nieuw in PHP 8.5 &#8211; Pipe Operator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"9762\" class=\"elementor elementor-9762 elementor-9736\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-98bd347 e-flex e-con-boxed e-con e-parent\" data-id=\"98bd347\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-d685ef1 e-con-full e-flex e-con e-child\" data-id=\"d685ef1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dc6b51d elementor-widget elementor-widget-text-editor\" data-id=\"dc6b51d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Elke PHP-release brengt verbeteringen met zich mee, maar PHP 8.5 levert iets bijzonders \u2013 nieuwe functies die het programmeren \u00e9cht leuker maken. De pipe-operator alleen al verandert de manier waarop we PHP schrijven, en zet geneste complexiteit om in leesbare flows. Laten we ontdekken wat er deze november aankomt en waarom ontwikkelaars overal enthousiast raken.<\/p><p><span style=\"font-weight: bolder; caret-color: rgba(0, 0, 0, 0);\">Verwachte releasedatum<\/span><span style=\"caret-color: rgba(0, 0, 0, 0);\">: 20 november 2025<\/span><br style=\"caret-color: rgba(0, 0, 0, 0);\" \/><span style=\"font-weight: bolder; caret-color: rgba(0, 0, 0, 0);\">Sterfunctie<\/span><span style=\"caret-color: rgba(0, 0, 0, 0);\">: De pipe-operator (gam-changer)<\/span><br style=\"caret-color: rgba(0, 0, 0, 0);\" \/><span style=\"font-weight: bolder; caret-color: rgba(0, 0, 0, 0);\">Breaking changes<\/span><span style=\"caret-color: rgba(0, 0, 0, 0);\">: Slechts twee kleine<\/span><br style=\"caret-color: rgba(0, 0, 0, 0);\" \/><span style=\"font-weight: bolder; caret-color: rgba(0, 0, 0, 0);\">Upgradecomfort<\/span><span style=\"caret-color: rgba(0, 0, 0, 0);\">: Vlot overstappen vanaf PHP 8.4<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-879cb99 e-con-full e-flex e-con e-child\" data-id=\"879cb99\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bdd31f6 elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"bdd31f6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;headings_by_tags&quot;:[&quot;h2&quot;],&quot;exclude_headings_by_selector&quot;:[],&quot;no_headings_message&quot;:&quot;No headings were found on this page.&quot;,&quot;marker_view&quot;:&quot;numbers&quot;,&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\tInhoud\t\t\t<\/h4>\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__bdd31f6\" aria-expanded=\"true\" aria-label=\"Open inhoudsopgave\"><i aria-hidden=\"true\" class=\"fas fa-chevron-down\"><\/i><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__bdd31f6\" aria-expanded=\"true\" aria-label=\"Sluit inhoudsopgave\"><i aria-hidden=\"true\" class=\"fas fa-chevron-up\"><\/i><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__bdd31f6\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<i class=\"elementor-toc__spinner eicon-animation-spin eicon-loading\" aria-hidden=\"true\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bd63ff3 e-flex e-con-boxed e-con e-parent\" data-id=\"bd63ff3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-9bd6886 e-con-full e-flex e-con e-child\" data-id=\"9bd6886\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-85c7e88 elementor-widget elementor-widget-text-editor\" data-id=\"85c7e88\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 class=\"wp-block-heading\">Nieuwe functie: De Pipe-operator \u2013 Je Nieuwe Beste Vriend<\/h2><p>De <a href=\"https:\/\/wiki.php.net\/rfc\/pipe-operator-v2\" target=\"_blank\" rel=\"noopener\"><strong>pipe-operator RFC<\/strong><\/a> (<code>|&gt;<\/code>) is de hoofdrolspeler van PHP 8.5, en dat is niet voor niets. Het verandert de leesbaarheid van code op een manier die voelt alsof je voor het eerst een bril opzet \u2013 plotseling is alles duidelijker.<\/p><h3 class=\"wp-block-heading\">Van Geneste Puzzel naar Duidelijk Verhaal<\/h3><p>Weet je nog die diep geneste functie-aanroepen waarbij je ogen begonnen te duizelen? Hier is de transformatie:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dfaa9b8 elementor-widget elementor-widget-code-highlight\" data-id=\"dfaa9b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ De oude geneste aanpak (van binnen naar buiten lezen)\n$slug = preg_replace('\/[^a-z0-9-]\/', '', \n    str_replace(' ', '-', \n        strtolower(\n            trim($title)\n        )\n    )\n);\n\n\/\/ De pipe-operator aanpak (leest als een verhaal)\n$slug = $title \n    |> trim(...)\n    |> strtolower(...)\n    |> fn($s) => str_replace(' ', '-', $s)\n    |> fn($s) => preg_replace('\/[^a-z0-9-]\/', '', $s);<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eedcbf6 elementor-widget elementor-widget-text-editor\" data-id=\"eedcbf6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tHet is alsof je stap voor stap een recept volgt in plaats van het achterstevoren te proberen te begrijpen. Elke transformatie vloeit natuurlijk over in de volgende, waardoor je code een verhaal vertelt: &#8220;Neem de titel, trim hem, maak hem in kleine letters, vervang spaties door streepjes, verwijder speciale tekens.&#8221;\n\n<h3 class=\"wp-block-heading\">Magie in de praktijk<\/h3>\nHier komt de pipe-operator echt tot zijn recht \u2013 het afhandelen van complexe datatransformaties zonder mentale gymnastiek:\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3231e40 elementor-widget elementor-widget-code-highlight\" data-id=\"3231e40\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ Het verwerken van API-responses wordt elegant\n$topActiveUsers = $apiResponse\n    |> json_decode(...)\n    |> fn($data) => array_filter($data->users, fn($u) => $u->active)\n    |> fn($users) => array_slice($users, 0, 10)\n    |> fn($users) => array_map(fn($u) => $u->email, $users);\n\n\/\/ Database-resultaten vloeien natuurlijk door\n$report = $queryResult\n    |> fn($rows) => array_map('normalize_row', $rows)\n    |> fn($data) => array_group_by($data, 'category')\n    |> fn($grouped) => calculate_totals($grouped)\n    |> fn($totals) => format_for_export($totals);<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b3db5e elementor-widget elementor-widget-text-editor\" data-id=\"2b3db5e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tGeen overbodige tussentijdse variabelen meer die je code vervuilen. Geen achterstevoren lezen door geneste haakjes meer. Gewoon duidelijke, vloeiende transformaties die in \u00e9\u00e9n oogopslag logisch zijn.\n\n<a href=\"https:\/\/www.php.net\/manual\/en\/functions.first_class_callable_syntax.php\" target=\"_blank\" rel=\"noopener\">First-class callable syntax<\/a> werkt prachtig samen met pipes, waardoor je code nog schoner wordt.\n<h3 class=\"wp-block-heading\">Een kleine beperking<\/h3>\nDe pipe-operator werkt met functies die \u00e9\u00e9n parameter hebben. Voor meerdere parameters heb je een kleine wrapper nodig:\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8683167 elementor-widget elementor-widget-code-highlight\" data-id=\"8683167\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ Meerdere parameters hebben een wrapper nodig\n$result = $data |> fn($s) => substr($s, 0, 10);\n\/\/ \u2705 Werkt prima \/\/ Maar functies met \u00e9\u00e9n parameter zijn mooi schoon\n\n$result = $data |> trim(...) |> strtoupper(...); \/\/ \u2705 Prachtig<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a05ddbe elementor-widget elementor-widget-text-editor\" data-id=\"a05ddbe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tZie het als een tuinslang \u2013 er kan maar \u00e9\u00e9n stroom water (data) tegelijk doorheen, maar die stroom kan door zoveel transformaties gaan als je maar nodig hebt.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-48f19a7 elementor-widget elementor-widget-text-editor\" data-id=\"48f19a7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Breaking Changes (Niets Engs!)<\/h2><p>Laten we de olifant in de kamer bespreken \u2013 wat moet er mogelijk worden aangepast in je code? Goed nieuws: PHP 8.5 is opmerkelijk mild met slechts twee veranderingen om rekening mee te houden.<\/p><h3>MHASH-constanten met pensioen<\/h3><p>De oude MHASH-constanten gaan na jaren trouwe dienst eindelijk met pensioen. Als je code er zo uitziet:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9ff2236 elementor-widget elementor-widget-code-highlight\" data-id=\"9ff2236\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ De oude manier (gaat met pensioen in PHP 8.5)\n$hash = mhash(MHASH_SHA256, $data);\n\n\/\/ De moderne aanpak (werkt prachtig)\n$hash = hash('sha256', $data, true);<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b25b7a4 elementor-widget elementor-widget-text-editor\" data-id=\"b25b7a4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tZie het als de overstap van een klaptelefoon naar een smartphone \u2013 de <a href=\"https:\/\/www.php.net\/manual\/en\/book.hash.php\" target=\"_blank\" rel=\"noopener\"><strong>hash-extensie<\/strong><\/a> doet alles wat MHASH deed, maar beter en met meer opties. Een snelle zoekopdracht naar &#8220;MHASH&#8221; in je codebase laat zien of dit jou raakt (spoiler: waarschijnlijk niet).\n\n<h3>bzcompress() wordt strenger<\/h3>\nDe functie bzcompress() gooit nu een <strong><a href=\"https:\/\/www.php.net\/manual\/en\/class.valueerror.php\" target=\"_blank\" rel=\"noopener\">ValueError<\/a><\/strong> bij ongeldige parameters in plaats van stilletjes false terug te geven:\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c569506 elementor-widget elementor-widget-code-highlight\" data-id=\"c569506\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ Geeft je nu netjes een waarschuwing bij problemen\nbzcompress($data, 11); \/\/ ValueError: compressieniveau moet tussen 1 en 9 liggen<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ef42edf elementor-widget elementor-widget-text-editor\" data-id=\"ef42edf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tDit is eigenlijk heel handig \u2013 het is alsof je code een behulpzame assistent krijgt die fouten aanwijst in plaats van ze stilletjes te laten passeren.\n\nDat is de complete lijst! Als je al op PHP 8.4 zit, zal upgraden verfrissend eenvoudig zijn.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-edfc4bb e-flex e-con-boxed e-con e-parent\" data-id=\"edfc4bb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cc76a6e elementor-widget elementor-widget-text-editor\" data-id=\"cc76a6e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 class=\"wp-block-heading\">Handige functies die tijd besparen<\/h2>\nNaast de pipe-operator brengt PHP 8.5 verschillende verbeteringen die het dagelijks programmeren een stuk prettiger maken.\n<h3 class=\"wp-block-heading\">array_first() en array_last() zijn er eindelijk<\/h3>\nNa jaren van zelf hulpfuncties schrijven krijgen we eindelijk native array_first() en array_last() in PHP:\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-706f2ca elementor-widget elementor-widget-code-highlight\" data-id=\"706f2ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ De hulpfuncties die we allemaal al tientallen keren hebben geschreven\nfunction array_first($array) {\n    return empty($array) ? null : reset($array);\n}\n\n\/\/ Nu gewoon ingebouwd!\n$first = array_first($array);  \/\/ Schoon, consistent, null bij leeg\n$last = array_last($array);    \/\/ Werkt perfect met elk type array<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dcdf90c elementor-widget elementor-widget-text-editor\" data-id=\"dcdf90c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tHet is alsof PHP eindelijk bekerhouders aan je auto heeft toegevoegd \u2013 niet revolutionair, maar je gebruikt ze elke dag en vraagt je af hoe je ooit zonder kon. Deze <a href=\"https:\/\/www.php.net\/manual\/en\/ref.array.php\" target=\"_blank\" rel=\"noopener\"><strong>array-functies<\/strong><\/a> gaan netjes om met edge-cases en draaien sneller dan userland-implementaties.\n\n<h3 class=\"wp-block-heading\">Betere foutmeldingen met stacktraces<\/h3>\nFatale fouten komen nu standaard met volledige stacktraces:\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-caa5cec elementor-widget elementor-widget-code-highlight\" data-id=\"caa5cec\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>Fatale fout: Maximale uitvoeringstijd overschreden in app.php op regel 42\nStacktrace:\n#0 app.php(42): Database::query()\n#1 app.php(38): UserService::findUser()\n#2 app.php(15): Controller::index()\n#3 {main}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-10a98c0 elementor-widget elementor-widget-text-editor\" data-id=\"10a98c0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"whitespace-normal break-words\">Het is alsof je een GPS-spoor krijgt van hoe je code verdwaald raakte, in plaats van alleen te weten waar het eindigde. Het <a href=\"https:\/\/www.php.net\/manual\/en\/class.sensitiveparameter.php\" target=\"_blank\" rel=\"noopener\">SensitiveParameter-attribuut<\/a> zorgt ervoor dat wachtwoorden en gevoelige data verborgen blijven in deze traces.<\/p>\n\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Error Handler Tools<\/h3>\n<p class=\"whitespace-normal break-words\">Testframeworks en debuggingtools krijgen nieuwe superkrachten:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6a57d36 elementor-widget elementor-widget-code-highlight\" data-id=\"6a57d36\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ Nu kun je de huidige handlers inspecteren\n$currentHandler = get_error_handler();\n$currentException = get_exception_handler();\n\n\/\/ Perfect voor testframeworks\npublic function withErrorHandler(callable $handler, callable $test) {\n    $previous = get_error_handler();\n    set_error_handler($handler);\n    try {\n        $test();\n    } finally {\n        set_error_handler($previous);  \/\/ Herstellen alsof er niets gebeurd is\n    }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-887abfe elementor-widget elementor-widget-text-editor\" data-id=\"887abfe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"whitespace-normal break-words\">Deze functies zijn vooral nuttig voor error monitoring services en testtools.<\/p>\n\n<h3 class=\"text-lg font-bold text-text-100 mt-1 -mb-1.5\">Schonere Property Promotion<\/h3>\n<p class=\"whitespace-normal break-words\">Het maken van onveranderlijke objecten wordt eleganter met final property promotion:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e5e9447 elementor-widget elementor-widget-code-highlight\" data-id=\"e5e9447\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ De beknopte manier om onveranderlijke value objects te maken\nclass User {\n    public function __construct(\n        private final string $id,\n        private final string $email\n    ) {}\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dbbc589 elementor-widget elementor-widget-text-editor\" data-id=\"dbbc589\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"whitespace-normal break-words\">Het is alsof je een snelkoppeling hebt voor veelvoorkomende patronen \u2013 minder typen, dezelfde veiligheid. <a href=\"https:\/\/www.php.net\/manual\/en\/language.oop5.decon.php#language.oop5.decon.constructor.promotion\" target=\"_blank\" rel=\"noopener\">Constructor property promotion<\/a> wordt steeds beter.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cf777e6 e-flex e-con-boxed e-con e-parent\" data-id=\"cf777e6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8ec986a elementor-widget elementor-widget-text-editor\" data-id=\"8ec986a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Voorjaar schoonmaak: Oude Syntax-verouderingen<\/h2>\nPHP 8.5 depreceert voorzichtig wat oude syntax die al jaren stof verzamelt:\n<h3 class=\"wp-block-heading\">Puntkomma&#8217;s na case-statements<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2dd33ad elementor-widget elementor-widget-code-highlight\" data-id=\"2dd33ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ Dit PHP\/FI 2.0-overblijfsel uit 1997 is eindelijk verouderd verklaard\nswitch($var) {\n    case 1;  \/\/ Puntkomma? Dat is een typfout die op problemen wacht\n        echo \"one\";\n        break;\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1957a17 elementor-widget elementor-widget-text-editor\" data-id=\"1957a17\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 class=\"wp-block-heading\">Alternatieve schrijfwijzen voor typecasts<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cc4777e elementor-widget elementor-widget-code-highlight\" data-id=\"cc4777e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ Deze omslachtige alternatieven zijn verouderd verklaard\n(integer) $val;  \/\/ Gebruik gewoon (int)\n(boolean) $val;  \/\/ Gebruik gewoon (bool)\n(double) $val;   \/\/ Gebruik gewoon (float)<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-51327c9 elementor-widget elementor-widget-text-editor\" data-id=\"51327c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"whitespace-normal break-words\">Zie het als PHP dat zijn kamer opruimt \u2013 het verwijderen van dubbele manieren om hetzelfde te doen maakt de taal overzichtelijker voor iedereen. <a href=\"https:\/\/www.php.net\/manual\/en\/language.types.type-juggling.php#language.types.typecasting\" target=\"_blank\" rel=\"noopener\">Type casting in PHP<\/a> behoudt de nuttige onderdelen.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-58885fd e-flex e-con-boxed e-con e-parent\" data-id=\"58885fd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0a0f81c elementor-widget elementor-widget-text-editor\" data-id=\"0a0f81c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Features voor specifieke scenario&#8217;s<\/h2>\nSommige PHP 8.5-verbeteringen richten zich op specifieke use-cases:\n<h3>JIT Compiler-verbeteringen<\/h3>\nDe <a href=\"https:\/\/www.php.net\/manual\/en\/opcache.configuration.php#ini.opcache.jit\" target=\"_blank\" rel=\"noopener\">JIT-compiler krijgt updates<\/a>, hoewel webapplicaties voornamelijk I\/O-gebonden blijven. Zie het als het afstellen van een racewagen \u2013 indrukwekkend, maar je dagelijkse rit naar werk verandert er niet veel door.\n<h3>BCMath-optimalisaties<\/h3>\nBCMath-bewerkingen worden sneller door beter geheugenbeheer. Als je werkt met willekeurige precisiegetallen zul je de verbetering waarderen. Voor iedereen anders is het fijn om te weten dat PHP alles blijft optimaliseren.\n<h3>Het #[NoDiscard]-attribuut<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c3bbd72 elementor-widget elementor-widget-code-highlight\" data-id=\"c3bbd72\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>#[NoDiscard]\nfunction calculateImportantValue(): int {\n    return 42;\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e10cf05 elementor-widget elementor-widget-text-editor\" data-id=\"e10cf05\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tHoewel <a href=\"https:\/\/phpstan.org\/\" target=\"_blank\" rel=\"noopener\">PHPStan<\/a> ongebruikte returnwaarden al detecteert, zorgt het ingebouwd hebben in PHP voor een extra vangnet.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-24cb0e0 elementor-widget elementor-widget-code-highlight\" data-id=\"24cb0e0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-php line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-php\">\n\t\t\t\t\t<xmp>\/\/ Deze omslachtige alternatieven zijn verouderd verklaard\n(integer) $val;  \/\/ Gebruik gewoon (int)\n(boolean) $val;  \/\/ Gebruik gewoon (bool)\n(double) $val;   \/\/ Gebruik gewoon (float)<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b57b6ae elementor-widget elementor-widget-text-editor\" data-id=\"b57b6ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"whitespace-normal break-words\">Zie het als PHP dat zijn kamer opruimt \u2013 het verwijderen van dubbele manieren om hetzelfde te doen maakt de taal schoner voor iedereen. <a href=\"https:\/\/www.php.net\/manual\/en\/language.types.type-juggling.php#language.types.typecasting\" target=\"_blank\" rel=\"noopener\">Type casting in PHP<\/a> behoudt de nuttige onderdelen.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-48bd76c4 e-flex e-con-boxed e-con e-parent\" data-id=\"48bd76c4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-703aefb elementor-widget elementor-widget-text-editor\" data-id=\"703aefb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 style=\"color: #012c6d; caret-color: rgba(0, 0, 0, 0);\">Moet ik upgraden naar PHP 8.5?<\/h2>\n<div>\n<p>Hoe enthousiast we ook zijn, PHP 8.5 is nog niet uitgebracht. Tenzij jij de ontwikkelaar van de applicatie bent, is het vaak beter om een maandje te wachten. Zo krijgen applicaties en plugins de tijd om gevalideerd te worden tegen PHP 8.5. Ook al is PHP 8.5 in de meeste gevallen backwards compatible, er is altijd wel een uitzondering.<\/p>\n<h3>Moet ik WordPress upgraden naar PHP 8.5?<\/h3>\n<p>Voor WordPress kan de volgende grote release b\u00e9ta-ondersteuning bevatten voor PHP 8.5. Een volledig compatibele release volgt meestal pas een paar grote WordPress-releasecycli later.<\/p>\n<\/div>\n<h2>PHP 8.5 bij Yourwebhoster.eu<\/h2>\n<p>Bij Yourwebhoster.eu zijn we enthousiast over PHP 8.5, maar we begrijpen ook dat de praktijk diverse behoeften heeft. Daarom ondersteunen we alles van <a href=\"https:\/\/www.yourwebhoster.eu\/website-hosting-plans\/\"><strong>PHP 4.4 tot en met PHP 8.4<\/strong><\/a>, en PHP 8.5 voegen we kort na de release op 20 november toe aan de familie.<\/p>\n<h3>Ons complete PHP-supportmenu<\/h3>\n<p>We weten dat ieder project zijn eigen verhaal heeft:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><strong>PHP 4.4 tot 5.6<\/strong>: Voor die legacy-applicaties die het bedrijf nog steeds draaiende houden<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><strong>PHP 7.0 tot 7.4<\/strong>: Voor stabiele applicaties in onderhoudsmodus<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><strong>PHP 8.0 tot 8.4<\/strong>: Voor moderne applicaties die de huidige features omarmen<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><strong>PHP 8.5<\/strong>: Beschikbaar binnen enkele dagen na de offici\u00eble release<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Meerdere versies, \u00e9\u00e9n account<\/h3>\n<p>Het mooie? Je kunt verschillende PHP-versies draaien voor verschillende onderdelen van je setup:<\/p>\n<pre><code>yourdomain.com \u2192 PHP 8.4 (jouw hoofdsite)\napp.yourdomain.com \u2192 PHP 8.5 (testen van nieuwe features)\nlegacy.yourdomain.com \u2192 PHP 5.6 (dat systeem waar niemand aan durft te komen)\n<\/code><\/pre>\n<p>Het werkt allemaal via ons eenvoudige <strong><a href=\"https:\/\/help.yourwebhoster.eu\/en\/support\/solutions\/articles\/80001134789-how-to-change-your-php-version-and-enable-php-modules-in-plesk\">controlepaneel<\/a><\/strong> \u2013 geen ingewikkelde configuraties of containerbeheer nodig. Wij regelen de complexiteit achter de schermen zodat jij je op je code kunt focussen.<\/p>\n<h3>Onze PHP 8.5-belofte<\/h3>\n<p>Wij hebben PHP 8.5 voor je klaar kort na de stabiele release. Niet &#8220;binnenkort beschikbaar&#8221; of &#8220;staat op de roadmap&#8221; \u2013 maar echt beschikbaar, getest en klaar voor jouw pipe operators.<\/p>\n<h2>Vooruitblik<\/h2>\n<p>PHP 8.5 vertegenwoordigt de beste soort evolutie \u2013 doordachte verbeteringen die het dagelijkse programmeren prettiger maken. De pipe operator verandert hoe we datatransformaties schrijven. Native arrayfuncties maken veel workarounds overbodig. Betere foutmeldingen besparen je debuggingtijd.<\/p>\n<p>Dit is geen revolutie die je dwingt alles opnieuw te leren. Het is een verzameling verbeteringen die PHP net wat beter maken in wat het al goed doet. De minimale breaking changes betekenen dat je PHP 8.5 in je eigen tempo kunt adopteren en de voordelen kunt ervaren zonder stress.<\/p>\n<p><strong>Support-tijdlijn<\/strong>: PHP 8.5 krijgt actieve ondersteuning tot november 2027 en beveiligingsupdates tot november 2029. <strong><a href=\"https:\/\/www.php.net\/supported-versions.php\" target=\"_blank\" rel=\"noopener\">PHP releaseschema<\/a>.<\/strong><\/p>\n<hr>\n<p><em>Klaar om de vreugde van pipe operators en schonere code te ervaren? Wij hebben <strong>PHP 8.5 hosting<\/strong> bij Yourwebhoster.eu kort na de release voor je klaarstaan. Of je nu enthousiast bent over moderne features of betrouwbare legacy-ondersteuning nodig hebt, wij regelen het. Want ieder project verdient de PHP-versie die er het beste bij past.<\/em><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Elke PHP-release brengt verbeteringen met zich mee, maar PHP 8.5 levert iets bijzonders \u2013 nieuwe functies die het programmeren \u00e9cht leuker maken. De pipe-operator alleen al verandert de manier waarop we PHP schrijven, en zet geneste complexiteit om in leesbare flows. Laten we ontdekken wat er deze november aankomt en waarom ontwikkelaars overal enthousiast raken. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":9766,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-9762","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-geen-onderdeel-van-een-categorie"],"_links":{"self":[{"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/posts\/9762","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/comments?post=9762"}],"version-history":[{"count":30,"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/posts\/9762\/revisions"}],"predecessor-version":[{"id":9833,"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/posts\/9762\/revisions\/9833"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/media\/9766"}],"wp:attachment":[{"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/media?parent=9762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/categories?post=9762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yourwebhoster.eu\/nl\/wp-json\/wp\/v2\/tags?post=9762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}