diff --git a/include/layout.inc b/include/layout.inc index 9a0ee67f5..291545301 100644 --- a/include/layout.inc +++ b/include/layout.inc @@ -710,6 +710,7 @@ function release_language_chooser($currentlang) { $LANGUAGES = array( 'en' => 'English', 'pt_BR' => 'Brazilian Portuguese', + 'nl' => 'Dutch', 'ru' => 'Russian', ); diff --git a/releases/8_0_x_nl.php b/releases/8_0_x_nl.php new file mode 100644 index 000000000..140821bd0 --- /dev/null +++ b/releases/8_0_x_nl.php @@ -0,0 +1,474 @@ + "php_8_0_x", + 'css' => array('php8.css'), + 'meta_tags' => array( + 'og:image' => $MYSITE . 'images/php8/php_8_released.png' + ) +)); +?> +
+
+
+ +
+
+
+ +
+
+ +
released!
+
+ PHP 8.0 is de nieuwste versie van de programmeertaal PHP.
Het zit vol met nieuwe + functionaliteit en optimalisaties zoals named arguments, union types, attributes, constructor property + promotion, match expression, nullsafe operator, een JIT en verbeteringen in het type system, de fout-afhandeling + en algehele consistentie. +
+ +
+
+ +
+
+

+ Named arguments + RFC +

+
+
+
PHP 7
+
+
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
+
+
+
+
+
PHP 8
+
+
htmlspecialchars($string, double_encode: false);
+
+
+
+
+
    +
  • Specificeer alleen nog maar vereiste parameters, en skip alle optionele.
  • +
  • Named arguments zijn volgorde-onafhankelijk en documenteren zichzelf.
  • +
+
+
+ +
+

+ Attributes + RFC +

+
+
+
PHP 7
+
+
/**
+* @Route("/api/posts/{id}", methods={"GET", "HEAD"})
+*/
+classUser
+{
+
+
+
+
+
PHP 8
+
+
#[Route("/api/posts/{id}", methods: ["GET", "HEAD"])]
+class User
+{
+
+
+
+
+

In plaats van PHPDoc commentaar kun je nu gestructureerde meta-data opnemen met deze nieuwe PHP syntax.

+
+
+ +
+

+ Constructor property promotion + RFC +

+
+
+
PHP 7
+
+
class Point {
+ public float $x;
+ public float $y;
+ public float $z;
+
+ public function __construct(
+     float $x = 0.0,
+     float $y = 0.0,
+     float $z = 0.0,
+ ) {
+     $this->x = $x;
+     $this->y = $y;
+     $this->z = $z;
+ }
+}
+
+
+
+
+
PHP 8
+
+
class Point {
+ public function __construct(
+     public float $x = 0.0,
+     public float $y = 0.0,
+     public float $z = 0.0,
+ ) {}
+}
+
+
+
+
+

Minder franje nodig voor het definiëren en initialiseren van objecten.

+
+
+ +
+

+ Union types + RFC +

+
+
+
PHP 7
+
+
class Number {
+ /** @var int|float */
+ private $number;
+
+ /**
+  * @param float|int $number
+  */
+ public function __construct($number) {
+     $this->number = $number;
+ }
+}
+
+new Number('NaN'); // Ok
+
+
+
+
+
PHP 8
+
+
class Number {
+ public function __construct(
+     private int|float $number
+ ) {}
+}
+
+new Number('NaN'); // TypeError
+
+
+
+
+

In plaats van PHPDoc commentaar voor een variabele met meerdere toegestane typen, kun je de nieuwe union type + declaraties gebruiken die door PHP gevalideerd worden.

+
+
+ +
+

+ Match expression + RFC +

+
+
+
PHP 7
+
+
switch (8.0) {
+ case '8.0':
+   $result = "Oh no!";
+   break;
+ case 8.0:
+   $result = "This is what I expected";
+   break;
+}
+echo $result;
+//> Oh no!
+
+
+
+
+
PHP 8
+
+
echo match (8.0) {
+ '8.0' => "Oh no!",
+ 8.0 => "This is what I expected",
+};
+//> This is what I expected
+
+
+
+
+

De nieuwe match lijkt op een switch, maar heeft de volgende afwijkende eigenschappen:

+
    +
  • Match is een expressie, wat betekent dat het resultaat opgeslagen kan worden in een variabele, of kan worden teruggestuurd.
  • +
  • Match blokken bestaan uit een enkele regel en hebben geen break; statement nodig.
  • +
  • Match vergelijkt altijd strict.
  • +
+
+
+ +
+

+ Nullsafe operator + RFC +

+
+
+
PHP 7
+
+
$country =  null;
+
+if ($session !== null) {
+ $user = $session->user;
+
+ if ($user !== null) {
+     $address = $user->getAddress();
+
+     if ($address !== null) {
+         $country = $address->country;
+     }
+ }
+}
+
+
+
+
+
PHP 8
+
+
$country = $session?->user?->getAddress()?->country;
+
+
+
+
+

In plaats van allemaal losse controles op nulls kun je nu elementen blijven chainen met de nieuwe nullsafe operator. Wanneer + het evalueren van één van de elementen faalt, faalt de hele chain direct en evalueert deze naar null.

+
+
+ +
+

+ Saner string to number comparisons + RFC +

+
+
+
PHP 7
+
+
0 == 'foobar' // true
+
+
+
+
+
PHP 8
+
+
0 == 'foobar' // false
+
+
+
+
+

Als je in PHP 8 iets met een string vergelijkt, is de vergelijking afhankelijk van de waarde van de string. Als deze + numeriek is wordt een numerieke vergelijking gebruikt, anders wordt het nummer naar string omgezet en worden deze als + strings vergeleken.

+
+
+ +
+

+ Consistent type errors for internal functions + RFC +

+
+
+
PHP 7
+
+
strlen([]); // Warning: strlen() expects parameter 1 to be string, array given
+
+array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0
+
+
+
+
+
PHP 8
+
+
strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given
+
+array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0
+
+
+
+
+

De meeste PHP functies gooien nu Fatal Error excepties wanneer de validatie van een parameter faalt.

+
+
+
+ +
+

Just-In-Time compilation

+

+ PHP 8 bevat twee nieuwe JIT compilers. De meest veelbelovende, Tracing JIT, heeft in synthetische tests een driemaal + betere performance en in een aantal specifieke lang-draaiende applicaties een 1.5 tot tweemaal beter performance. + Typische applicaties draaien minimaal even goed als op PHP 7.4. +

+

+ Just-In-Time compilation +

+ +

Andere syntax tweaks en verbeteringen

+
+
+
    +
  • + Trailing komma's zijn nu toegestaan in een lijst van parameters RFC + en closure use lijsten RFC. +
  • +
  • + Sta catch toe zonder variabelenaam RFC. +
  • +
  • + Fix een aantal inconsistenties in de syntax van variabelen RFC. +
  • +
+
+
+
    +
  • + Behandel namespaced namen als enkele token RFC. +
  • +
  • + Throw expressies RFC. +
  • +
  • + Maak ::class mogelijk op objecten RFC. +
  • +
+
+
+
+
+

Type systeem en verbeteringen in foutafhandeling

+
    +
  • + Logischere vergelijking tussen string en nummersRFC. +
  • +
  • + Striktere type checks voor rekenkundige/bitwise operators + RFC. +
  • +
  • + Abstracte trait methode validatie RFC. +
  • +
  • + Correcte beschrijving van magische methodes RFC +
  • +
  • + Herclassificeer engine fouten RFC. +
  • +
  • + Fatal error voor incompatibele methode beschrijvingen RFC. +
  • +
  • + De @ operator onderdrukt niet langer fatale fouten. +
  • +
  • + Overerving met private methoden RFC. +
  • +
  • + Mixed typen RFC. +
  • +
  • + Statische return type RFC. +
  • +
  • + Correcte types voor interne functies + RFC. +
  • +
  • + Curl gebruikt objecten in plaats van resources + RFC. +
  • +
+
+
+

Nieuwe classes, interfaces en functies

+ +
+
+
+ + + + + + +