xref: /web-php/releases/8.0/nl.php (revision c093fb53)
1<?php
2$_SERVER['BASE_PAGE'] = 'releases/8.0/nl.php';
3include_once __DIR__ . '/common.php';
4
5releases\php80\common_header(
6    'PHP 8.0 is een omvangrijke update van de PHP programmeertaal. ' .
7    'Het bevat veel nieuwe mogelijkheden en optimalisaties, waaronder ' .
8    'argument naamgeving, unie types, attributen, promotie van constructor eigenschappen, ' .
9    'expressie vergelijking, null-veilige operator, JIT, en ' .
10    'verbeteringen aan het type systeem, foute afhandeling, en consistentie.');
11
12?>
13<section class="php8-section php8-section_dark php8-section_header center">
14  <div class="page-tools">
15    <div class="change-language">
16        <?php releases\php80\language_chooser('nl'); ?>
17    </div>
18  </div>
19  <div class="php8-section__content">
20    <div class="php8-logo">
21      <img src="/images/php8/logo_php8.svg" alt="php8" height="126" width="343">
22    </div>
23    <div class="php8-title">Beschikbaar!</div>
24    <div class="php8-subtitle">
25      PHP 8.0 is een omvangrijke update van de PHP programmeertaal.<br class="display-none-md"> Het bevat
26      veel nieuwe mogelijkheden en optimalisaties, waaronder argument naamgeving, unie types, attributen,
27      promotie van constructor eigenschappen, expressie vergelijking, null-veilige operator, JIT, en
28      verbeteringen aan het type systeem, foute afhandeling, en consistentie.
29    </div>
30    <div class="php8-button-wrapper center">
31      <a class="php8-button php8-button_light" href="/downloads">Update naar PHP 8!</a>
32    </div>
33  </div>
34</section>
35
36<section class="php8-section center">
37  <div class="php8-compare">
38    <h2 class="php8-h2" id="named-arguments">
39      Argument naamgeving
40      <a class="php8-rfc" href="https://wiki.php.net/rfc/named_params">RFC</a>
41    </h2>
42    <div class="php8-compare__main">
43      <div class="php8-compare__block example-contents">
44        <div class="php8-compare__label">PHP 7</div>
45        <div class="php8-code phpcode">
46            <?php highlight_php_trimmed(
47                'htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, \'UTF-8\', false);',
48            );?>
49        </div>
50
51
52      </div>
53      <div class="php8-compare__arrow"></div>
54      <div class="php8-compare__block example-contents">
55        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
56        <div class="php8-code phpcode">
57            <?php highlight_php_trimmed(
58                'htmlspecialchars($string, double_encode: false);',
59            );?>
60        </div>
61      </div>
62    </div>
63    <div class="php8-compare__content">
64      <ul>
65        <li>Geef enkel vereiste parameters op, sla optionele parameters over.</li>
66        <li>Argumenten hebben een onafhankelijke volgorde en documenteren zichzelf.</li>
67      </ul>
68    </div>
69  </div>
70
71  <div class="php8-compare">
72    <h2 class="php8-h2" id="attributes">
73      Attributen
74      <a class="php8-rfc" href="https://wiki.php.net/rfc/attributes_v2">RFC</a> <a class="php8-rfc" href="/manual/en/language.attributes.php">Doc</a>
75    </h2>
76    <div class="php8-compare__main">
77      <div class="php8-compare__block example-contents">
78        <div class="php8-compare__label">PHP 7</div>
79        <div class="php8-code phpcode">
80            <?php highlight_php_trimmed(
81                'class PostsController
82{
83    /**
84     * @Route("/api/posts/{id}", methods={"GET"})
85     */
86    public function get($id) { /* ... */ }
87}',
88            );?>
89        </div>
90      </div>
91      <div class="php8-compare__arrow"></div>
92      <div class="php8-compare__block example-contents">
93        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
94        <div class="php8-code phpcode">
95            <?php highlight_php_trimmed(
96                'class PostsController
97{
98    #[Route("/api/posts/{id}", methods: ["GET"])]
99    public function get($id) { /* ... */ }
100}',
101            );?>
102        </div>
103      </div>
104    </div>
105    <div class="php8-compare__content">
106      <p>In plaats van met PHPDoc annotaties kan je nu gestructureerde metadata gebruiken in PHP's eigen syntaxis.</p>
107    </div>
108  </div>
109
110  <div class="php8-compare">
111    <h2 class="php8-h2" id="constructor-property-promotion">
112      Promotie van constructor eigenschappen
113      <a class="php8-rfc" href="https://wiki.php.net/rfc/constructor_promotion">RFC</a> <a class="php8-rfc" href="/manual/en/language.oop5.decon.php#language.oop5.decon.constructor.promotion">Doc</a>
114    </h2>
115    <div class="php8-compare__main">
116      <div class="php8-compare__block example-contents">
117        <div class="php8-compare__label">PHP 7</div>
118        <div class="php8-code phpcode">
119            <?php highlight_php_trimmed(
120                'class Point {
121  public float $x;
122  public float $y;
123  public float $z;
124
125  public function __construct(
126    float $x = 0.0,
127    float $y = 0.0,
128    float $z = 0.0
129  ) {
130    $this->x = $x;
131    $this->y = $y;
132    $this->z = $z;
133  }
134}',
135            );?>
136        </div>
137      </div>
138      <div class="php8-compare__arrow"></div>
139      <div class="php8-compare__block example-contents">
140        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
141        <div class="php8-code phpcode">
142            <?php highlight_php_trimmed(
143                'class Point {
144  public function __construct(
145    public float $x = 0.0,
146    public float $y = 0.0,
147    public float $z = 0.0,
148  ) {}
149}',
150            );?>
151        </div>
152      </div>
153    </div>
154    <div class="php8-compare__content">
155      <p>Minder standaardcode nodig om eigenschappen te definiëren en initialiseren.</p>
156    </div>
157  </div>
158
159  <div class="php8-compare">
160    <h2 class="php8-h2" id="union-types">
161      Unie types
162      <a class="php8-rfc" href="https://wiki.php.net/rfc/union_types_v2">RFC</a> <a class="php8-rfc" href="/manual/en/language.types.declarations.php#language.types.declarations.composite.union">Doc</a>
163    </h2>
164    <div class="php8-compare__main">
165      <div class="php8-compare__block example-contents">
166        <div class="php8-compare__label">PHP 7</div>
167        <div class="php8-code phpcode">
168            <?php highlight_php_trimmed(
169                'class Number {
170  /** @var int|float */
171  private $number;
172
173  /**
174   * @param float|int $number
175   */
176  public function __construct($number) {
177    $this->number = $number;
178  }
179}
180
181new Number(\'NaN\'); // Ok',
182            );?>
183        </div>
184      </div>
185      <div class="php8-compare__arrow"></div>
186      <div class="php8-compare__block example-contents">
187        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
188        <div class="php8-code phpcode">
189            <?php highlight_php_trimmed(
190                'class Number {
191  public function __construct(
192    private int|float $number
193  ) {}
194}
195
196new Number(\'NaN\'); // TypeError',
197            );?>
198        </div>
199      </div>
200    </div>
201    <div class="php8-compare__content">
202      <p>In plaats van met PHPDoc annotaties kan je de mogelijke types via unie types declareren zodat
203        deze ook gevalideerd worden tijdens de runtime.</p>
204    </div>
205  </div>
206
207  <div class="php8-compare">
208    <h2 class="php8-h2" id="match-expression">
209      Expressie vergelijking
210      <a class="php8-rfc" href="https://wiki.php.net/rfc/match_expression_v2">RFC</a> <a class="php8-rfc" href="/manual/en/control-structures.match.php">Doc</a>
211    </h2>
212    <div class="php8-compare__main">
213      <div class="php8-compare__block example-contents">
214        <div class="php8-compare__label">PHP 7</div>
215        <div class="php8-code phpcode">
216            <?php highlight_php_trimmed(
217                'switch (8.0) {
218  case \'8.0\':
219    $result = "Oh no!";
220    break;
221  case 8.0:
222    $result = "This is what I expected";
223    break;
224}
225echo $result;
226//> Oh no!',
227            );?>
228        </div>
229      </div>
230      <div class="php8-compare__arrow"></div>
231      <div class="php8-compare__block example-contents">
232        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
233        <div class="php8-code phpcode">
234            <?php highlight_php_trimmed(
235                'echo match (8.0) {
236  \'8.0\' => "Oh no!",
237  8.0 => "This is what I expected",
238};
239//> This is what I expected',
240            );?>
241        </div>
242      </div>
243    </div>
244    <div class="php8-compare__content">
245      <p>De nieuwe match is gelijkaardig aan switch en heeft volgende eigenschappen:</p>
246      <ul>
247        <li>Match is een expressie, dit wil zeggen dat je het in een variabele kan bewaren of teruggeven.</li>
248        <li>Match aftakkingen zijn expressies van één enkele lijn en bevatten geen break statements.</li>
249        <li>Match vergelijkingen zijn strikt.</li>
250      </ul>
251    </div>
252  </div>
253
254  <div class="php8-compare">
255    <h2 class="php8-h2" id="nullsafe-operator">
256      Null-veilige operator
257      <a class="php8-rfc" href="https://wiki.php.net/rfc/nullsafe_operator">RFC</a>
258    </h2>
259    <div class="php8-compare__main">
260      <div class="php8-compare__block example-contents">
261        <div class="php8-compare__label">PHP 7</div>
262        <div class="php8-code phpcode">
263            <?php highlight_php_trimmed(
264                '$country =  null;
265
266if ($session !== null) {
267  $user = $session->user;
268
269  if ($user !== null) {
270    $address = $user->getAddress();
271
272    if ($address !== null) {
273      $country = $address->country;
274    }
275  }
276}',
277            );?>
278        </div>
279      </div>
280      <div class="php8-compare__arrow"></div>
281      <div class="php8-compare__block example-contents">
282        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
283        <div class="php8-code phpcode">
284            <?php highlight_php_trimmed(
285                '$country = $session?->user?->getAddress()?->country;',
286            );?>
287        </div>
288      </div>
289    </div>
290    <div class="php8-compare__content">
291      <p>In plaats van een controle op null uit te voeren kan je nu een ketting van oproepen vormen met de null-veilige operator.
292        Wanneer één expressie in de ketting faalt, zal de rest van de ketting niet uitgevoerd worden en is het resultaat van
293        de hele ketting null.</p>
294    </div>
295  </div>
296
297  <div class="php8-compare">
298    <h2 class="php8-h2" id="saner-string-to-number-comparisons">
299      Verstandigere tekst met nummer vergelijkingen
300      <a class="php8-rfc" href="https://wiki.php.net/rfc/string_to_number_comparison">RFC</a>
301    </h2>
302    <div class="php8-compare__main">
303      <div class="php8-compare__block example-contents">
304        <div class="php8-compare__label">PHP 7</div>
305        <div class="php8-code phpcode">
306            <?php highlight_php_trimmed(
307                '0 == \'foobar\' // true',
308            );?>
309        </div>
310      </div>
311      <div class="php8-compare__arrow"></div>
312      <div class="php8-compare__block example-contents">
313        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
314        <div class="php8-code phpcode">
315            <?php highlight_php_trimmed(
316                '0 == \'foobar\' // false',
317            );?>
318        </div>
319      </div>
320    </div>
321    <div class="php8-compare__content">
322      <p>Wanneer PHP 8 een vergelijking uitvoert tegen een numerieke tekst zal er een numerieke vergelijking uitgevoerd
323        worden. Anders zal het nummer naar een tekst omgevormd worden en er een tekstuele vergelijking uitgevoerd worden.</p>
324    </div>
325  </div>
326
327  <div class="php8-compare">
328    <h2 class="php8-h2" id="consistent-type-errors-for-internal-functions">
329      Consistente type fouten voor interne functies
330      <a class="php8-rfc" href="https://wiki.php.net/rfc/consistent_type_errors">RFC</a>
331    </h2>
332    <div class="php8-compare__main">
333      <div class="php8-compare__block example-contents">
334        <div class="php8-compare__label">PHP 7</div>
335        <div class="php8-code phpcode">
336            <?php highlight_php_trimmed(
337                'strlen([]); // Warning: strlen() expects parameter 1 to be string, array given
338
339array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0',
340            );?>
341        </div>
342      </div>
343      <div class="php8-compare__arrow"></div>
344      <div class="php8-compare__block example-contents">
345        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
346        <div class="php8-code phpcode">
347            <?php highlight_php_trimmed(
348                'strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given
349
350array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0',
351            );?>
352        </div>
353      </div>
354    </div>
355    <div class="php8-compare__content">
356      <p>De meeste interne functies gooien nu een Error exception als de validatie van parameters faalt.</p>
357    </div>
358  </div>
359</section>
360
361<section class="php8-section php8-section_light">
362  <h2 class="php8-h2">Just-In-Time compilatie</h2>
363  <p>
364    PHP 8 introduceert twee systemen voor JIT compilatie. De tracerende JIT is veelbelovend en presteert ongeveer 3 keer beter
365    bij synthetische metingen en kan sommige langlopende applicaties 1.5–2 keer verbeteren. Prestaties van typische web applicaties
366    ligt in lijn met PHP 7.4.
367  </p>
368  <h3 class="php8-h3">
369    Relatieve JIT bijdrage aan de prestaties van PHP 8
370  </h3>
371  <p>
372    <img src="/images/php8/scheme.svg" width="900" alt="Just-In-Time compilatie">
373  </p>
374
375  <div class="php8-columns">
376    <div class="php8-column">
377      <h2 class="php8-h2 php8-h2_margin-top">Type systeem en verbeteringen van de fout afhandeling</h2>
378      <ul>
379        <li>
380          Strikte type controles bij rekenkundige/bitsgewijze operatoren
381          <a href="https://wiki.php.net/rfc/arithmetic_operator_type_checks">RFC</a>
382        </li>
383        <li>
384          Validatie voor abstracte trait methodes <a href="https://wiki.php.net/rfc/abstract_trait_method_validation">RFC</a>
385        </li>
386        <li>
387          Correcte signatures bij magic methods <a href="https://wiki.php.net/rfc/magic-methods-signature">RFC</a>
388        </li>
389        <li>
390          Herindeling van de engine warnings <a href="https://wiki.php.net/rfc/engine_warnings">RFC</a>
391        </li>
392        <li>
393          Fatal error bij incompatibele method signatures <a href="https://wiki.php.net/rfc/lsp_errors">RFC</a>
394        </li>
395        <li>
396          De @ operator werkt niet meer bij het onderdrukken van fatale fouten.
397        </li>
398        <li>
399          Overerving bij private methods <a href="https://wiki.php.net/rfc/inheritance_private_methods">RFC</a>
400        </li>
401        <li>
402          Mixed type <a href="https://wiki.php.net/rfc/mixed_type_v2">RFC</a>
403        </li>
404        <li>
405          Static return type <a href="https://wiki.php.net/rfc/static_return_type">RFC</a>
406        </li>
407        <li>
408          Types voor interne functies
409          <a href="https://externals.io/message/106522">Email draadje</a>
410        </li>
411        <li>
412          Opaque objects in plaats van resources voor
413            <a href="https://php.watch/versions/8.0/resource-CurlHandle">Curl</a>,
414            <a href="https://php.watch/versions/8.0/gdimage">Gd</a>,
415            <a href="https://php.watch/versions/8.0/sockets-sockets-addressinfo">Sockets</a>,
416            <a href="https://php.watch/versions/8.0/OpenSSL-resource">OpenSSL</a>,
417            <a href="https://php.watch/versions/8.0/xmlwriter-resource">XMLWriter</a>, and
418            <a href="https://php.watch/versions/8.0/xmlwriter-resource">XML</a>
419            extensies
420        </li>
421      </ul>
422    </div>
423    <div class="php8-column">
424      <h2 class="php8-h2 php8-h2_margin-top">Andere syntaxis aanpassingen en verbeteringen</h2>
425      <ul>
426        <li>
427          Sta toe om een komma te plaatsen bij het laatste parameter in een lijst <a href="https://wiki.php.net/rfc/trailing_comma_in_parameter_list">RFC</a>
428          en bij de use in closures <a href="https://wiki.php.net/rfc/trailing_comma_in_closure_use_list">RFC</a>
429        </li>
430        <li>
431          Catches die niets vangen <a href="https://wiki.php.net/rfc/non-capturing_catches">RFC</a>
432        </li>
433        <li>
434          Variabele Syntaxis Aanpassingen <a href="https://wiki.php.net/rfc/variable_syntax_tweaks">RFC</a>
435        </li>
436        <li>
437          Namespaced namen worden als één enkel token afgehandeld <a href="https://wiki.php.net/rfc/namespaced_names_as_token">RFC</a>
438        </li>
439        <li>
440          Throw is nu een expressie <a href="https://wiki.php.net/rfc/throw_expression">RFC</a>
441        </li>
442        <li>
443          ::class werkt bij objecten <a href="https://wiki.php.net/rfc/class_name_literal_on_object">RFC</a>
444        </li>
445      </ul>
446
447      <h2 class="php8-h2 php8-h2_margin-top">Nieuwe Classes, Interfaces, en Functies</h2>
448      <ul>
449        <li>
450          <a href="https://wiki.php.net/rfc/weak_maps">Weak Map</a> class
451        </li>
452        <li>
453          <a href="https://wiki.php.net/rfc/stringable">Stringable</a> interface
454        </li>
455        <li>
456          <a href="https://wiki.php.net/rfc/str_contains">str_contains()</a>,
457          <a href="https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions">str_starts_with()</a>,
458          <a href="https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions">str_ends_with()</a>
459        </li>
460        <li>
461          <a href="https://github.com/php/php-src/pull/4769">fdiv()</a>
462        </li>
463        <li>
464          <a href="https://wiki.php.net/rfc/get_debug_type">get_debug_type()</a>
465        </li>
466        <li>
467          <a href="https://github.com/php/php-src/pull/5427">get_resource_id()</a>
468        </li>
469        <li>
470          <a href="https://wiki.php.net/rfc/token_as_object">token_get_all()</a> object implementatie
471        </li>
472        <li>
473          <a href="https://wiki.php.net/rfc/dom_living_standard_api">New DOM Traversal and Manipulation APIs</a>
474        </li>
475      </ul>
476    </div>
477  </div>
478</section>
479
480<section class="php8-section php8-section_dark php8-section_footer php8-footer">
481  <div class="php8-section__content">
482    <h2 class="php8-h2 center">
483      Betere prestaties, betere syntaxis, verbeterd type systeem.
484    </h2>
485    <div class="php8-button-wrapper center">
486      <a class="php8-button php8-button_light" href="/downloads">Update naar PHP 8!</a>
487    </div>
488    <div class="php8-footer__content">
489      <p>
490        Ga naar de <a href="http://www.php.net/downloads">downloads</a> pagina om de PHP 8 code te verkrijgen.
491        Uitvoerbare bestanden voor Windows kan je vinden op de <a href="http://windows.php.net/download">PHP voor Windows</a> website.
492        De volledige lijst met wijzigingen is vastgelegd in een <a href="http://www.php.net/ChangeLog-8.php">ChangeLog</a>.
493      </p>
494      <p>
495        De <a href="/manual/en/migration80.php">migratie gids</a> is beschikbaar in de PHP Handleiding. Gebruik
496        deze om een gedetailleerde lijst te krijgen van nieuwe opties en neerwaarts incompatibele aanpassingen.
497      </p>
498    </div>
499  </div>
500</section>
501
502
503
504
505<?php site_footer();
506