PHP 7.3: de nieuwe features

Robert-Jan Budding, 9 januari 2019

Begin december werd de nieuwste versie van PHP beschikbaar. Het is de derde feature-update van PHP 7. Naast PHP 7.3 zijn er ook updates uitgebracht voor oudere PHP-versies (5.6.39, 7.0.33, 7.1.25 en 7.2.13). Aangezien WordPress en alle themes en plugins zijn gebouwd met PHP, zijn dit soort feature-updates interessant om in de gaten te houden. Behalve dat PHP 7.3 je website sneller maakt, bevat deze versie ook weer nieuwe functies. Wat houdt de PHP 7.3 update in voor WordPress-websites?

Geen support meer voor PHP 5.6 en 7.0

PHP.net heeft (waarschijnlijk) de laatste update uitgebracht voor PHP 5.6: versie 5.6.39 is een security release en bevat geen nieuwe features. Hetzelfde geldt voor PHP 7.0.33. Vanaf 1 januari 2019 wordt PHP 5.6 niet meer ondersteund. PHP 7.0 wordt al sinds begin december niet meer ondersteund.

Iedere versie van PHP wordt twee jaar ondersteund vanaf het moment dat deze wordt gereleased. Na die twee jaar wordt de PHP-versie nog één jaar onderhouden op het gebied van security. Dat wil zeggen dat kritieke veiligheidslekken nog wel gedicht zullen worden.

PHP-versions-support

Op de PHP-website kun je zien hoe lang iedere PHP-versie nog ondersteund wordt. Zoals je in de bovenstaande screenshot ziet krijgt PHP 7.1 alléén nog “Security Support” tot en met 1 december 2019. PHP-versies 7.2 en de nieuwe 7.3 worden beiden nog actief ondersteund en geüpdatet. Voor PHP 7.2 geldt dat deze actief ondersteund wordt tot 30 november 2019 en daarna nog één jaar security support krijgt.

Wat houdt een PHP feature-update in?

Een PHP feature-update bestaat uit twee onderdelen:

  1. Nieuwe features of aanpassingen aan bestaande features;
  2. Features die verdwijnen, ook wel “deprecated” functies genoemd.

Nieuwe features in PHP 7.3

PHP 7.3 brengt voor developers een hoop nieuwe features met zich mee. We zetten een aantal van de belangrijkste veranderingen op een rij. Zowel het WordPress Core team als theme- en plugin-ontwikkelaars kunnen deze nieuwe features vanaf nu gebruiken! Ontwikkelaars houden er echter rekening mee dat niet alle websites de nieuwste versie van PHP gebruiken, waardoor ze nog een tijd oudere PHP-versies ondersteunen.

Heredoc en Nowdoc

Eén van de belangrijkste verbeteringen in PHP 7.3 zijn veranderingen aan Heredoc- / Nowdoc-syntax. Deze werden vaak verafschuwd door developers, omdat er behoorlijk strenge eisen werden gesteld aan de code. Hierdoor kon het gebruik van Heredoc- en Nowdoc-syntax de code lelijk en minder goed leesbaar maken. In PHP 7.3 wordt dit probleem aangepakt door twee veranderingen:

  • De “closing marker” mag nu een “indent” hebben.
  • Na een “closing marker” is het niet langer verplicht om een nieuwe regel te beginnen.

Deze verbeteringen voor Heredocs en Nowdocs zal het voor developers aantrekkelijker maken om ze in hun code te gebruiken. Meer over Heredoc en Nowdoc lees je in deze blog van Laravel News.

JSON_THROW_ON_ERROR

Dit is geen “core”-functionaliteit van PHP, maar is een update voor de JSON extension. JSON is een manier om data te structureren, net als bijvoorbeeld XML. Het was voor PHP-ontwikkelaars omslachtig om met foutmeldingen van de json_encode() and json_decode() functies te werken, maar daar komt met PHP 7.3 verandering in.

In PHP 7.2 en voorgaande versies, gaat dit als volgt:

De onderstaande regel code probeert een JSON-tekst te decoderen. De tekst is “{“, wat geen geldige JSON opmaak is. De code zal dus niet werken, maar PHP 7.2 biedt de ontwikkelaar geen informatie waarom dit niet werkt.

json_decode(“{“);

Je zou daarna de volgende regel kunnen gebruiken om te kijken of er een foutmelding is:

json_last_error() === JSON_ERROR_NONE

Omdat er wél een fout is – de syntax is immers niet correct – zal de bovenstaande regel FALSE returnen. Om daadwerkelijk de error te zien, moet de volgende regel code gebruikt worden:

json_last_error_msg()

Deze regel zal Syntax-error returnen. Kortom: een omslachtige manier om met foutmeldingen om te gaan. Het voorstel om dit aan te passen, werd met 25-0 stemmen doorgevoerd in PHP 7.3.

Wat is er nieuw?

PHP 7.3 maakt het mogelijk om met exceptions te werken. De functies json_encode en json_decode accepteren nu een nieuwe parameter: JSON_THROW_ON_ERROR, zoals het onderstaande voorbeeld:

try {
return json_decode(“{“, JSON_THROW_ON_ERROR);
} catch (
JsonException $error) {
$e->getMessage();
}

Bovenstaande code doet hetzelfde als eerst, maar $e-getMessage() zal de waarde van json_last_error_msg() returnen als json_decode mislukt. Het is dus een stuk eenvoudiger geworden voor ontwikkelaars om met fouten om te gaan in het encoderen en decoderen van JSON!

JSON-toepassingen in WordPress

JSON wordt in WordPress gebruikt in de WP API. Deze koppeling maakt het mogelijk voor ontwikkelaars om hun applicatie te laten communiceren met een WordPress-installatie.

Enkele voorbeelden:

  • WordPress Multisite – content van verschillende installaties weergeven op één domein;
  • Een custom web/mobile applicatie om WordPress-content te beheren;
  • Een ‘slimme’ koelkast elke dag een WordPress-post laten publiceren met de inhoud van de koelkast op dat moment.

Meer informatie over de JSON update in PHP 7.3 vind je hier.

Argon2 wachtwoord-hashing

Argon2 is een hashing-algoritme dat in PHP 7.2 geïntroduceerd werd als alternatief voor het Bcrypt-algoritme. De PASSWORD_ARGON2I-constant kan als volgt gebruikt worden in password_* functies:

password_hash('password', PASSWORD_ARGON2I);

Inmiddels is er een nieuwe variant van Argon2, waardoor er nu in totaal drie varianten zijn: Argon2d, Argon2i en Argon2id. Die laatste is een soort combinatie van de eerste twee, waardoor deze ook het meest wordt aangeraden voor web-gebruik. Dit ziet er als volgt uit:

password_hash('password', PASSWORD_ARGON2ID);

Zie ook: Argon2 Password Hash Enhancements

Komma aan het einde van functie-calls

Elke programmeertaal gaat anders om met Variadic functies: een functie met een onbepaald aantal parameters. PHP 7.2 en ouder gaan hier – bij het aanroepen van functies – als volgt mee om:

getNumberOfClients( $company, $year )

Het is niet toegestaan om een komma te plaatsen achter $year: dit zou een Syntax-error terugkoppelen. Andere programmeertalen zijn flexibeler en ook PHP 7.3 gaat hier soepeler mee om:

getNumberOfClients( $company, $year, )

Een fijne verbetering voor ontwikkelaars, omdat ontwikkelaars dit niet meer hoeven aan te passen elke keer dat een functie verandert van het aantal parameters. Deze verandering geldt enkel voor komma’s bij het aanroepen van functies. Bij het declareren van functies mag er nog steeds geen komma aan het einde worden geplaatst!

Meer nieuwe features

Natuurlijk zijn er meer nieuwe features in PHP 7.3. Alles over de verschillende nieuwe features en bugfixes vind je op PHP.net.

Deprecated in PHP 7.3

Er zijn natuurlijk ook features en functionaliteiten die in PHP 7.3 “deprecated” zijn. De features die nu deprecated zijn worden niet later dan in PHP 8.0 volledig uit de code verwijderd. Het is belangrijk dat WordPress-ontwikkelaars deze lijst goed bekijken en de code van plugins en themes aanpassen, voordat deze functies verdwijnen. Als je PHP 7.3 gebruikt op je WordPress-website en een plugin die een PHP 5.6 functie aanroept die inmiddels deprecated is, geeft dat een foutmelding.

Case-Insensitive Constants

In oudere PHP-versies werden zowel “case-insensitive” en “case-sensitive” constants ondersteund. Case-insensitive constants zijn onderhevig aan inconsistenties en lastig te gebruiken. Vandaar dat in deze RFC werd voorgesteld om dit vanaf PHP 7.3 niet meer te ondersteunen.

image2wbmp()

De image2wbmp()-functie genereert een WBMP-versie van een afbeelding. Sinds PHP 5.0 is deze functie identiek aan imagewbmp(), dus wordt deze functie deprecated vanaf deze PHP-versie. Als je in PHP 7.3 gebruikmaakt van image2wbmp() zul je een deprecation-waarschuwing terugkrijgen.

Wat betekent PHP 7.3 voor WordPress-gebruikers?

Volgens de statistieken op WordPress.org draait slechts een klein deel van de WordPress-websites op een PHP-versie hoger dan 7.0. Met meer dan 35% is PHP 5.6 nog altijd één van de meest gebruikte PHP-versies. PHP 7.3 is nauwelijks te zien in de grafiek, maar heeft een aandeel van 0,1 procent van de WordPress-websites.

PHP-versions-WordPress

Het is zonde én zorgelijk dat veel WordPress-gebruikers (en hostingpartijen) de nieuwere PHP-versies niet gebruiken, want PHP 7.3 brengt veel verbeteringen met zich mee. Vooral op het gebied van snelheid valt met PHP 7 veel te winnen. Zo kan PHP 7 twee keer zo veel request per seconde uitvoeren dan PHP 5.6. Bovendien is PHP 5.2 400% langzamer dan PHP 7.

Uit bovenstaande figuur blijkt dat 59% van alle WordPress-websites draait op PHP 5.6 of ouder. Eerder schreven we dat PHP 5.6 niet meer werd ondersteund sinds 1 januari 2019. Oudere PHP versies worden al langer niet meer ondersteund. Het zou kunnen dat PHP.net nog een beveiligingsupdate doorvoert als er een kritieke fout wordt ontdekt, maar in principe is de ondersteuning van PHP 5.6 voorbij. Het is dus belangrijk dat WordPress-websites overstappen naar een recente versie van PHP, zoals PHP 7.3.

Hoe controleer ik de PHP versie van mijn WordPress-website?

Je kunt de PHP versie van je WordPress-website bekijken in het Savvii controlepaneel. In de overzichtstab pas je deze eenvoudig aan naar de laatste versie van PHP.

 

php7_admin_savvii

Host je niet bij ons, dan kun je op de volgende manieren achter de PHP-versie van je WordPress-website komen:

  • Aanroepen van de phpinfo() functie;
  • Webhosting controlepaneel bekijken.

Upgraden naar PHP 7.3 bij Savvii

Bij Savvii kun je natuurlijk upgraden naar PHP 7.3. Iedereen die nog op de oude versies, 5.6 en 7.0 staat heeft inmiddels bericht van ons gehad, en vind in het control panel een waarschuwing om up te daten.

Let op: de oude versies gaan we definitief eind januari van ons platform verwijderen. We zetten je site dan zelf over op een nieuwe versie, wat voor compatibilieitsproblemen kan zorgen. Ga dus zelf zo snel mogelijk aan de slag met het updaten van de PHP-versie van je website!

Zet je website eerst op de staging-omgeving. In deze omgeving kun je namelijk heel makkelijk, zonder dat je productiesite er last van heeft, de nieuwe versie testen. Werkt alles goed? Zet dan je productie website om naar de nieuwe PHP-versie. Na een paar minuten heeft ons systeem de wijziging doorgevoerd en draait je website op de nieuwe versie. Je kunt deze gids gebruiken om een staging-omgeving van je website te maken.

Wil je jouw website nog sneller maken, lees dan de meer dan 50 andere tips die we voor je hebben om je website sneller te maken.

Lees ook: PHP updates (najaar 2018)

Leave a reply