PHP 8.2 wordt verwacht in november van dit jaar, met als meest recente stabiele versie PHP 8.1.5. Hoewel het nog vroeg in het proces is, zijn er gemengde reacties met betrekking tot PHP 8.2 en de compatibiliteit met WordPress core, plugin en thema’s.
Maar weten wat je kunt verwachten kan je helpen om je voor te bereiden op de nieuwste PHP-versie. Door te leren over de nieuwe functies en de functies die verouderd raken, kun je begrijpen hoe de update de ontwikkeling kan beïnvloeden. Deze kennis kan je ook helpen om je voor te bereiden op de uiteindelijke release.
In dit bericht zullen we de meest recente PHP-versies samenvatten. Vervolgens bespreken we wat er nieuw is in PHP 8.2 en bespreken we het releaseschema. Laten we beginnen!
Een Overzicht Van PHP-Versies
PHP is de primaire programmeertaal van WordPress. Het speelt een cruciale rol in het omzetten van gegevens uit je database naar HTML-webpagina’s voor de bezoekers van je site.
Als website-eigenaar of ontwikkelaar ben je waarschijnlijk al bekend met het belang van het up-to-date houden van je WordPress-kern, thema’s en plugins. Het is echter ook cruciaal om je PHP up-to-date te houden.
Momenteel raadt WordPress aan om ten minste PHP 7.4 te gebruiken. Oudere versies van PHP ontvangen niet langer actieve ondersteuning voor beveiligingsupdates en bugfixes. Daarom kan het upgraden naar de nieuwste stabiele versie van PHP resulteren in betere sitebeveiliging, verbeterde prestaties en hogere niveaus van ondersteuning (we benadrukken stabiel omdat een deel van de 60.000+ plugins van WordPress nog niet volledig compatibel is met PHP 8.0, dus het is een goed idee om deze updates met enige voorzichtigheid te benaderen).
PHP 7.4 introduceerde getypeerde eigenschappen, een underscore numeriek scheidingsteken, en diverse verbeteringen. Sindsdien zijn er een paar meer iteraties van PHP uitgebracht.
PHP 8.0, uitgebracht in november 2020, bracht een aantal essentiële functies. Naast syntax- en prestatieverbeteringen, omvatte de release:
- Genoemde parameters
- Overeenkomst syntaxis
- Unie types
- Constructor Eigenschap Promotie
- JIT (wat invloed heeft op hoe PHP broncode uitvoert)
Een jaar later kwam PHP 8.1, de nieuwste grote PHP-versie. Deze update bevat belangrijke functies, zoals:
- Doorsnedetypes
- Alleen-lezen eigenschappen
- Opsommingstypen
- Vezels
- Type ‘nooit retourneren’
Het bijhouden van de nieuwste versies van PHP kan de prestaties en beveiliging van je website verbeteren. Het is echter belangrijk om te weten welke veranderingen je kunt verwachten voordat je een upgrade uitvoert. Als je geïnteresseerd bent in het testen van de huidige staat van PHP 8.2, kun je dit doen via GitHub.
Wat Is Nieuw In PHP 8.2
PHP 8.2 wordt verwacht tegen het einde van 2022 uitgebracht te worden. Hier is het huidige uitgaverooster, met Algemene Beschikbaarheid (GA) gepland voor 24 november 2022:
- 9 juni: Alpha 1
- 23 juni: Alpha 2
- 7 juli: Alpha 3
- 19 juli: Functiebevriezing
- 21 juli: Beta 1
- 4 augustus: Beta 2
- 18 augustus: Beta 3
- 1 september: Releasekandidaat 1
- 15 september: Releasekandidaat 2
- 29 september: Releasekandidaat 3
- 13 oktober: Releasekandidaat 4
- 27 oktober: Releasekandidaat 5
- 10 november: Releasekandidaat 6
- 24 november: GA
Volgens de officiële documentatie op de PHP-website zouden er een aantal nieuwe functies en afgekeurde functies moeten zijn. Laten we eens naar enkele ervan kijken!
Typen Disjunctieve Normaalvorm (DNF)
PHP 8.2 zal een nieuwe Disjunctive Normal Form (DNF) types functie introduceren. DNF is een gestandaardiseerde manier om booleaanse expressies te organiseren — specifiek, in een OR-serie van ANDs. Wanneer DNF wordt toegepast op typeverklaringen, biedt het een gestandaardiseerde manier om gecombineerde Unie- en Snijpunttypen te schrijven die de parser kan verwerken.
Nieuwe mysqli_execute_query Functie en mysqli::execute_query Methode
Het uitvoeren van geparametriseerde MySQLi-query’s zal gemakkelijker zijn in PHP 8.2, dankzij de nieuwe mysqli_execute_query($sql, $params) functie en mysqli::execute_query methode.
Dit zal de complexiteit van het gebruik van geparametriseerde queries verder verminderen, waardoor het voor ontwikkelaars makkelijker wordt om af te stappen van mysqli_query() alsook gevaarlijke/riskante escaping van gebruikerswaarden.
Eigenschappen Van Enum Ophalen In const Expressies
Volgens de RFC, “Deze RFC stelt voor om het gebruik van ->/?-> mogelijk te maken om eigenschappen van enums op te halen in constante expressies. De belangrijkste motivatie voor deze wijziging is om het ophalen van de naam- en waarde-eigenschappen mogelijk te maken op plaatsen waar enum-objecten niet zijn toegestaan, zoals array-sleutels.”
Nieuwe Willekeurige Extensie
PHP 8.2 introduceert een nieuwe PHP-extensie genaamd random. Het organiseert en consolideert bestaande PHP-functionaliteit met betrekking tot het genereren van willekeurige getallen. Het introduceert ook een reeks PHP-klasstructuren en uitzonderingsklassen om gedetailleerde opties te bieden voor willekeurige-getalgeneratoren en uitzonderingsafhandeling.
De random-extensie is gebundeld met PHP en er is geen configuratieoptie tijdens compileren of runtime om de random extensie uit te schakelen. De random extensie zal altijd beschikbaar zijn in PHP 8.2 en later.
Nieuwe curl_upkeep Functie
PHP 8.2 voegt een nieuwe functie toe aan de Curl-extensie genaamd curl_upkeep. De functie curl_upkeep roept curl_easy_upkeep() aan in libcurl, dat de onderliggende C-bibliotheek is die de PHP Curl-extensie gebruikt.
De curl_upkeep() functie doet het werk dat een Curl-verbinding in stand houdt. Maar niet elk verbindings type dat Curl ondersteunt, ondersteunt het in stand houden van verbindingen. Momenteel wordt dit alleen ondersteund door HTTP/2-verbindingen.
Nieuwe ini_parse_quantity functie
ini_parse_quantity is een nieuwe functie die toegevoegd zal worden aan PHP in PHP 8.2. Het parseert elke datagrootte die door PHP INI-waarden herkend wordt (zoals 56K, 256M, of 1G), en geeft vervolgens de datagrootte terug in bytes. Het kan nuttig zijn bij het parsen van bestaande of opgegeven INI-waarden in een PHP-applicatie. Het herkent echter geen IEC-suffixen voor datagroottes zoals MB, MiB, of GB, en het is niet geschikt om standaard datagrootte-waarden naar bytes te converteren.
Nieuwe memory_reset_peak_usage Functie
PHP 8.2 zal een nieuwe functie bevatten genaamd memory_reset_peak_usage. Deze zal de piekgeheugengebruik dat teruggegeven wordt door de memory_get_peak_usage functie resetten.
Deze functie zal nuttig zijn voor situaties waarbij een actie meerdere keren wordt aangeroepen en de piek van het geheugengebruik van elke iteratie wordt geregistreerd. Ontwikkelaars kunnen deze nieuwe functie gebruiken om het piekgeheugengebruik op elk gewenst moment tijdens de levensduur van het verzoek te resetten.
Alleen-lezen Klassen
Geïntroduceerd in PHP 8.1, worden readonly-eigenschappen uitgebreid in PHP 8.2 om syntactische suiker toe te voegen zodat alle klasse-eigenschappen in één keer readonly zijn:
readonly class Post
{
public function __construct(
public string $title,
public Author $author,
public string $body,
public DateTime $publishedAt,
) {}
} Dit voorkomt dat dynamische eigenschappen aan klassen worden toegevoegd.
Null, True en False Standalone Types
In PHP 8.2 zal het retourtype van false beschikbaar zijn als een zelfstandig type in plaats van strikt een unietype voor wanneer er een fout optreedt, wat nu al mogelijk is:
function alwaysFalse(): false
{
return false;
} Hetzelfde geldt voor het null-type. Bijvoorbeeld, als een zelfstandig type, in tegenstelling tot voorheen, zal NullPost::getAuthor() alleen null kunnen teruggeven.
PHP 8.2 staat nu ook true als een zelfstandig type toe.
Afkeuren van Dynamische Eigenschappen
Dynamische eigenschappen worden afgeschaft in PHP 8.2, wat resulteert in een ErrorException door PHP 9.0. Deze eigenschappen worden ingesteld op een object:
class Post
{
public string $title;
}
// …
$post->name = 'Naam'; Dynamische eigenschappen bieden flexibiliteit bij het creëren van klassen (bijvoorbeeld waarde-objecten) zonder een strikte class declaratie. Hun afschaffing zal waarschijnlijk een probleem zijn voor ontwikkelaars die afhankelijk zijn van dynamische eigenschappen omdat het hen meer richting statische analyse duwt. Om deze reden zijn sommige ontwikkelaars bezorgd over deze verandering met PHP 8.2.
Echter, klassen die __get en __set gebruiken zullen nog steeds dynamische eigenschappen ondersteunen, net als objecten van stdClass.
Ontwikkelaars kunnen alternatief gebruikmaken van het nieuwe #[AllowDynamicProperties]-attribuut, dat in de globale namespace is gedeclareerd, op klassen voor die eigenschappen:
#[AllowDynamicProperties]
class User() {}
$user = new User();
$user->foo = 'bar'; Hoewel het niet aanbevolen is, is een andere optie om waarschuwingen voor deprecatie uit te schakelen.
Nieuwe /n Modificator
PHP 8.2 zal ondersteuning bieden voor de /n (geen vangst) modifier in de preg_* functiefamilie. Wanneer gebruikt, zullen groepen met()meta-tekens niet vangen, behalve de groepen die benoemd zijn. In wezen is het resultaat hetzelfde als elke groep markeren als niet-vangend.
De reden achter deze verandering is dat de modifier complexe reguliere expressies voor meerdere groepen vereenvoudigt. In plaats van elke groep als niet-vastleggend te markeren, kunnen ontwikkelaars alle groepen als niet-vastleggend markeren. Vervolgens kunnen ze specifieke groepen selecteren en benoemen die moeten vastleggen.
Parameters Afschermen In Terugsporingen
Veel ontwikkelaars gebruiken diensten die stacktraces en productiefouten uit codebases bijhouden. Deze diensten kunnen gebruikers informeren als en wanneer er iets misgaat. Het traceren van callstacks is bijvoorbeeld nuttig bij het debuggen van een applicatie.
Echter, soms kunnen stack traces gevoelige informatie bevatten, zoals gebruikersnamen en wachtwoorden. PHP 8.2 zal een #[SensitiveParameter] attribuut bevatten dat zal voorkomen dat deze informatie in stack traces wordt opgenomen wanneer er iets mis gaat:
function test(
$foo,
#[SensitiveParameter] $bar,
$baz
) {
throw new Exception('Fout');
}
test('foo', 'bar', 'baz'); PHP 8.2 zal de gevoelige parameters gebruiken om privé-informatie uit stacktraces te redigeren, waardoor ze veiliger worden. Deze parameters zorgen ervoor dat de gegevens niet in foutenlogs terechtkomen. Let op dat dit attribuut alleen beschikbaar zal zijn voor gebruik op parameters.
Afschaffen ${} Stringinterpolatie
Er zijn meerdere manieren om variabelen in strings in te sluiten met PHP. Echter, PHP 8.2 zal twee methoden afschaffen. De eerste is het gebruik van ${} in strings:
"Hallo ${world}"; De tweede manier is gebruik te maken van ${} (variabele variabelen):
"Hallo ${(world)}"; Dit zal waarschijnlijk geen significant probleem zijn voor ontwikkelaars, aangezien de twee populairste methoden voor stringinterpolatie nog steeds zullen werken.
Afschrijven Gedeeltelijk Ondersteunde Aanroepbare Functies
Een andere verouderde wijziging zal zijn met deels ondersteunde callables. Er zijn meerdere manieren om een callable in PHP te creëren. Deze kan worden aangeroepen met of zonder parameters met de $callable() syntax, de user_call_func(/a_array), of door een functie te gebruiken met een callback.
De afgekeurde aanroepbare patronen omvatten het volgende:
$callable = "self::method"; $callable = "parent::method"; $callable = "static::method"; $callable = ["self", "method"]; $callable = ["parent", "method"]; $callable = ["static", "method"]; $callable = ["MyClass", "MyParentClass::myMethod"]; $callable = [new MyClass(), "MyOtherClass::myMethod"];
Vanaf PHP 8.2 zal het aanroepen van een van de bovenstaande resulteren in de volgende deprecation notice:
class Test {
public static function myMethod(): void {
echo "Called";
} public static function call(): void {
$callable = 'self::myMethod';
call_user_func($callable);
}
} $callable = Test::call(); // "Called";
Echter, het doorgeven van deze aanroepbare functies aan de is_callable functie of het gebruik ervan met de aanroepbare parameter types zal de verouderingsmelding niet genereren. Om de verouderingsmelding te voorkomen, kunnen ontwikkelaars in plaats daarvan de sleutelwoorden parent, self en static in aanroepbare code omzetten naar hun respectievelijke klassenamen met behulp van de::class magische methode.
Een deel van de reden achter de verandering is om callables te kunnen gebruiken voor getypeerde eigenschappen. Het maakt ze minder afhankelijk van de context.
MySQLi Kan Niet Langer Gecompileerd Worden Met libmysql
In het verleden ondersteunde PHP twee bibliotheken voor het verbinden van MySQL-databases: mysqlnd en libmysql. Vanaf PHP 5.4 is de eerstgenoemde de standaardbibliotheek. Het is echter mogelijk geweest om MySQLi te compileren via extensies.
Vanaf PHP 8.2 wordt het compileren van een MySQLi-extensie met libmysql niet meer ondersteund. Een poging om dit te doen zal resulteren in een configuratiefout:
./configure --with-mysqli=FOO
Koppelen van mysqli aan externe bibliotheek wordt niet langer ondersteund
Dit zal waarschijnlijk geen significante fouten veroorzaken voor ontwikkelaars. Echter, de twee grootste functies ondersteund door libmysql die niet beschikbaar zijn met mysqlnd, zijn ondersteuning voor automatisch opnieuw verbinden en authenticatie via LDAP en SASL.
Houd Je WordPress PHP-versie Up-to-date
Als ontwikkelaar is het essentieel om je code te testen tegen komende versies van PHP. In dit geval moeten ontwikkelaars beginnen met het testen van hun code tegen PHP 8.2 zo snel mogelijk om te zorgen dat je code geen websites van gebruikers beschadigt wanneer zij updaten.

De Perfecte Ontwikkelomgeving
We zorgen ervoor dat je website snel, veilig en altijd beschikbaar is zodat je bezoekers je vertrouwen. Plannen beginnen bij $1.99/maand.
Kies Je Plan