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