1<?php 2$_SERVER['BASE_PAGE'] = 'releases/8.0/it.php'; 3include_once __DIR__ . '/common.php'; 4 5releases\php80\common_header( 6 'PHP 8.0 è una nuova versione major del linguaggio PHP. ' . 7 'Contiene molte nuove funzionalità ed ottimizzazioni quali ' . 8 'i named arguments, la definizione di tipi unione, gli attributi, la promozione a proprietà degli argomenti del costruttore, ' . 9 'l\'espressione match, l\'operatore nullsafe, la compilazione JIT e ' . 10 'miglioramenti al sistema dei tipi, alla gestione degli errori e alla consistenza.'); 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('it'); ?> 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">Released!</div> 24 <div class="php8-subtitle"> 25 PHP 8.0 è una nuova versione major del linguaggio PHP.<br class="display-none-md"> 26 Contiene molte nuove funzionalità ed ottimizzazioni quali i named arguments, 27 la definizione di tipi unione, gli attributi, la promozione a proprietà degli argomenti del costruttore, 28 l'espressione match, l'operatore nullsafe, la compilazione JIT e 29 miglioramenti al sistema dei tipi, alla gestione degli errori e alla consistenza. 30 </div> 31 <div class="php8-button-wrapper center"> 32 <a class="php8-button php8-button_light" href="/downloads">Aggiorna a PHP 8!</a> 33 </div> 34 </div> 35</section> 36 37<section class="php8-section center"> 38 <div class="php8-compare"> 39 <h2 class="php8-h2" id="named-arguments"> 40 Named arguments 41 <a class="php8-rfc" href="https://wiki.php.net/rfc/named_params">RFC</a> 42 </h2> 43 <div class="php8-compare__main"> 44 <div class="php8-compare__block example-contents"> 45 <div class="php8-compare__label">PHP 7</div> 46 <div class="php8-code phpcode"> 47 <?php highlight_php_trimmed( 48 'htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, \'UTF-8\', false);', 49 );?> 50 </div> 51 52 53 </div> 54 <div class="php8-compare__arrow"></div> 55 <div class="php8-compare__block example-contents"> 56 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 57 <div class="php8-code phpcode"> 58 <?php highlight_php_trimmed( 59 'htmlspecialchars($string, double_encode: false);', 60 );?> 61 </div> 62 </div> 63 </div> 64 <div class="php8-compare__content"> 65 <ul> 66 <li>Indica solamente i parametri richiesti, saltando quelli opzionali.</li> 67 <li>Gli argomenti sono indipendenti dall'ordine e auto-documentati.</li> 68 </ul> 69 </div> 70 </div> 71 72 <div class="php8-compare"> 73 <h2 class="php8-h2" id="attributes"> 74 Attributi 75 <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> 76 </h2> 77 <div class="php8-compare__main"> 78 <div class="php8-compare__block example-contents"> 79 <div class="php8-compare__label">PHP 7</div> 80 <div class="php8-code phpcode"> 81 <?php highlight_php_trimmed( 82 'class PostsController 83{ 84 /** 85 * @Route("/api/posts/{id}", methods={"GET"}) 86 */ 87 public function get($id) { /* ... */ } 88}', 89 );?> 90 </div> 91 </div> 92 <div class="php8-compare__arrow"></div> 93 <div class="php8-compare__block example-contents"> 94 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 95 <div class="php8-code phpcode"> 96 <?php highlight_php_trimmed( 97 'class PostsController 98{ 99 #[Route("/api/posts/{id}", methods: ["GET"])] 100 public function get($id) { /* ... */ } 101}', 102 );?> 103 </div> 104 </div> 105 </div> 106 <div class="php8-compare__content"> 107 <p>Invece delle annotazioni PHPDoc, ora puoi usare metadati strutturati nella sintassi nativa PHP.</p> 108 </div> 109 </div> 110 111 <div class="php8-compare"> 112 <h2 class="php8-h2" id="constructor-property-promotion"> 113 Promozione a proprietà degli argomenti del costruttore 114 <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> 115 </h2> 116 <div class="php8-compare__main"> 117 <div class="php8-compare__block example-contents"> 118 <div class="php8-compare__label">PHP 7</div> 119 <div class="php8-code phpcode"> 120 <?php highlight_php_trimmed( 121 'class Point { 122 public float $x; 123 public float $y; 124 public float $z; 125 126 public function __construct( 127 float $x = 0.0, 128 float $y = 0.0, 129 float $z = 0.0 130 ) { 131 $this->x = $x; 132 $this->y = $y; 133 $this->z = $z; 134 } 135}', 136 );?> 137 </div> 138 </div> 139 <div class="php8-compare__arrow"></div> 140 <div class="php8-compare__block example-contents"> 141 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 142 <div class="php8-code phpcode"> 143 <?php highlight_php_trimmed( 144 'class Point { 145 public function __construct( 146 public float $x = 0.0, 147 public float $y = 0.0, 148 public float $z = 0.0, 149 ) {} 150}', 151 );?> 152 </div> 153 </div> 154 </div> 155 <div class="php8-compare__content"> 156 <p>Meno ripetizioni di codice per definire ed inizializzare le proprietà.</p> 157 </div> 158 </div> 159 160 <div class="php8-compare"> 161 <h2 class="php8-h2" id="union-types"> 162 Tipi unione 163 <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> 164 </h2> 165 <div class="php8-compare__main"> 166 <div class="php8-compare__block example-contents"> 167 <div class="php8-compare__label">PHP 7</div> 168 <div class="php8-code phpcode"> 169 <?php highlight_php_trimmed( 170 'class Number { 171 /** @var int|float */ 172 private $number; 173 174 /** 175 * @param float|int $number 176 */ 177 public function __construct($number) { 178 $this->number = $number; 179 } 180} 181 182new Number(\'NaN\'); // Ok', 183 );?> 184 </div> 185 </div> 186 <div class="php8-compare__arrow"></div> 187 <div class="php8-compare__block example-contents"> 188 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 189 <div class="php8-code phpcode"> 190 <?php highlight_php_trimmed( 191 'class Number { 192 public function __construct( 193 private int|float $number 194 ) {} 195} 196 197new Number(\'NaN\'); // TypeError', 198 );?> 199 </div> 200 </div> 201 </div> 202 <div class="php8-compare__content"> 203 <p>Invece di indicare una combinazione di tipi con le annotazioni PHPDoc, puoi usare una dichiarazione nativa 204 di tipo unione che viene validato durante l'esecuzione.</p> 205 </div> 206 </div> 207 208 <div class="php8-compare"> 209 <h2 class="php8-h2" id="match-expression"> 210 Espressione match 211 <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> 212 </h2> 213 <div class="php8-compare__main"> 214 <div class="php8-compare__block example-contents"> 215 <div class="php8-compare__label">PHP 7</div> 216 <div class="php8-code phpcode"> 217 <?php highlight_php_trimmed( 218 'switch (8.0) { 219 case \'8.0\': 220 $result = "Oh no!"; 221 break; 222 case 8.0: 223 $result = "This is what I expected"; 224 break; 225} 226echo $result; 227//> Oh no!', 228 );?> 229 </div> 230 </div> 231 <div class="php8-compare__arrow"></div> 232 <div class="php8-compare__block example-contents"> 233 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 234 <div class="php8-code phpcode"> 235 <?php highlight_php_trimmed( 236 'echo match (8.0) { 237 \'8.0\' => "Oh no!", 238 8.0 => "This is what I expected", 239}; 240//> This is what I expected', 241 );?> 242 </div> 243 </div> 244 </div> 245 <div class="php8-compare__content"> 246 <p>La nuova espressione match è simile allo switch e ha le seguenti funzionalità:</p> 247 <ul> 248 <li>Match è un'espressione, ovvero il suo risultato può essere salvato in una variabile o ritornato.</li> 249 <li>I rami del match supportano solo espressioni a singola linea e non necessitano di un'espressione break;.</li> 250 <li>Match esegue comparazioni strict.</li> 251 </ul> 252 </div> 253 </div> 254 255 <div class="php8-compare"> 256 <h2 class="php8-h2" id="nullsafe-operator"> 257 Operatore nullsafe 258 <a class="php8-rfc" href="https://wiki.php.net/rfc/nullsafe_operator">RFC</a> 259 </h2> 260 <div class="php8-compare__main"> 261 <div class="php8-compare__block example-contents"> 262 <div class="php8-compare__label">PHP 7</div> 263 <div class="php8-code phpcode"> 264 <?php highlight_php_trimmed( 265 '$country = null; 266 267if ($session !== null) { 268 $user = $session->user; 269 270 if ($user !== null) { 271 $address = $user->getAddress(); 272 273 if ($address !== null) { 274 $country = $address->country; 275 } 276 } 277}', 278 );?> 279 </div> 280 </div> 281 <div class="php8-compare__arrow"></div> 282 <div class="php8-compare__block example-contents"> 283 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 284 <div class="php8-code phpcode"> 285 <?php highlight_php_trimmed( 286 '$country = $session?->user?->getAddress()?->country;', 287 );?> 288 </div> 289 </div> 290 </div> 291 <div class="php8-compare__content"> 292 <p>Invece di controllare la presenza di un null, puoi ora usare una catena di chiamate con il nuovo operatore nullsafe. Quando 293 la valutazione di un elemento della catena fallisce, l'esecuzione della catena si interrompe e l'intera catena 294 restituisce il valore null.</p> 295 </div> 296 </div> 297 298 <div class="php8-compare"> 299 <h2 class="php8-h2" id="saner-string-to-number-comparisons"> 300 Comparazioni più coerenti di stringhe e numeri 301 <a class="php8-rfc" href="https://wiki.php.net/rfc/string_to_number_comparison">RFC</a> 302 </h2> 303 <div class="php8-compare__main"> 304 <div class="php8-compare__block example-contents"> 305 <div class="php8-compare__label">PHP 7</div> 306 <div class="php8-code phpcode"> 307 <?php highlight_php_trimmed( 308 '0 == \'foobar\' // true', 309 );?> 310 </div> 311 </div> 312 <div class="php8-compare__arrow"></div> 313 <div class="php8-compare__block example-contents"> 314 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 315 <div class="php8-code phpcode"> 316 <?php highlight_php_trimmed( 317 '0 == \'foobar\' // false', 318 );?> 319 </div> 320 </div> 321 </div> 322 <div class="php8-compare__content"> 323 <p>Nella comparazione di una stringa numerica, PHP 8 usa la comparazione numerica. Altrimenti, converte il numero 324 in una stringa e usa la comparazione tra stringhe.</p> 325 </div> 326 </div> 327 328 <div class="php8-compare"> 329 <h2 class="php8-h2" id="consistent-type-errors-for-internal-functions"> 330 Tipi di errori consistenti per le funzioni native 331 <a class="php8-rfc" href="https://wiki.php.net/rfc/consistent_type_errors">RFC</a> 332 </h2> 333 <div class="php8-compare__main"> 334 <div class="php8-compare__block example-contents"> 335 <div class="php8-compare__label">PHP 7</div> 336 <div class="php8-code phpcode"> 337 <?php highlight_php_trimmed( 338 'strlen([]); // Warning: strlen() expects parameter 1 to be string, array given 339 340array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0', 341 );?> 342 </div> 343 </div> 344 <div class="php8-compare__arrow"></div> 345 <div class="php8-compare__block example-contents"> 346 <div class="php8-compare__label php8-compare__label_new">PHP 8</div> 347 <div class="php8-code phpcode"> 348 <?php highlight_php_trimmed( 349 'strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given 350 351array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0', 352 );?> 353 </div> 354 </div> 355 </div> 356 <div class="php8-compare__content"> 357 <p>La maggior parte delle funzioni native ora lanciano una eccezione Error se la validazione degli argomenti fallisce.</p> 358 </div> 359 </div> 360</section> 361 362<section class="php8-section php8-section_light"> 363 <h2 class="php8-h2">Compilazione Just-In-Time</h2> 364 <p> 365 PHP 8 intrduce due motori di compilazione JIT. Tracing JIT, il più promettente dei due, mostra delle prestazioni 3 366 volte superiori nei benchmarks sintetici e 1.5–2 volte superiori per alcuni specifici processi applicativi a lunga esecuzione. 367 Le prestazioni delle tipiche applicazioni web sono al pari con PHP 7.4. 368 </p> 369 <h3 class="php8-h3"> 370 Miglioramenti delle performance in PHP 8 grazie a JIT 371 </h3> 372 <p> 373 <img src="/images/php8/scheme.svg" width="900" alt="Just-In-Time compilation"> 374 </p> 375 376 <div class="php8-columns"> 377 <div class="php8-column"> 378 <h2 class="php8-h2 php8-h2_margin-top">Sistema dei tipi e miglioramenti alla gestione degli errori</h2> 379 <ul> 380 <li> 381 Controlli più stringenti per gli operatori aritmetici e bitwise 382 <a href="https://wiki.php.net/rfc/arithmetic_operator_type_checks">RFC</a> 383 </li> 384 <li> 385 Validazione dei metodi astratti nei trait <a href="https://wiki.php.net/rfc/abstract_trait_method_validation">RFC</a> 386 </li> 387 <li> 388 Firme corrette nei metodi magici <a href="https://wiki.php.net/rfc/magic-methods-signature">RFC</a> 389 </li> 390 <li> 391 Riclassificazione degli errori <a href="https://wiki.php.net/rfc/engine_warnings">RFC</a> 392 </li> 393 <li> 394 Errori fatali per firme di metodi non compatibili <a href="https://wiki.php.net/rfc/lsp_errors">RFC</a> 395 </li> 396 <li> 397 L'operatore @ non silenzia più gli errori fatali. 398 </li> 399 <li> 400 Ereditarietà e metodi privati <a href="https://wiki.php.net/rfc/inheritance_private_methods">RFC</a> 401 </li> 402 <li> 403 Tipo mixed <a href="https://wiki.php.net/rfc/mixed_type_v2">RFC</a> 404 </li> 405 <li> 406 Tipo di ritorno static <a href="https://wiki.php.net/rfc/static_return_type">RFC</a> 407 </li> 408 <li> 409 Tipi per le funzioni native 410 <a href="https://externals.io/message/106522">Email thread</a> 411 </li> 412 <li> 413 Oggetti opachi invece che risorse per le estensioni 414 <a href="https://php.watch/versions/8.0/resource-CurlHandle">Curl</a>, 415 <a href="https://php.watch/versions/8.0/gdimage">Gd</a>, 416 <a href="https://php.watch/versions/8.0/sockets-sockets-addressinfo">Sockets</a>, 417 <a href="https://php.watch/versions/8.0/OpenSSL-resource">OpenSSL</a>, 418 <a href="https://php.watch/versions/8.0/xmlwriter-resource">XMLWriter</a>, e 419 <a href="https://php.watch/versions/8.0/xmlwriter-resource">XML</a> 420 </li> 421 </ul> 422 </div> 423 <div class="php8-column"> 424 <h2 class="php8-h2 php8-h2_margin-top">Altre ritocchi e migliorie di sintassi </h2> 425 <ul> 426 <li> 427 Permessa una virgola finale nella lista dei parametri <a href="https://wiki.php.net/rfc/trailing_comma_in_parameter_list">RFC</a> 428 e nell'espressione use per le closure <a href="https://wiki.php.net/rfc/trailing_comma_in_closure_use_list">RFC</a> 429 </li> 430 <li> 431 Catch senza argomento <a href="https://wiki.php.net/rfc/non-capturing_catches">RFC</a> 432 </li> 433 <li> 434 Correzioni alla sintassi di variabile <a href="https://wiki.php.net/rfc/variable_syntax_tweaks">RFC</a> 435 </li> 436 <li> 437 Trattamento dei nomi di namespace come un singolo token <a href="https://wiki.php.net/rfc/namespaced_names_as_token">RFC</a> 438 </li> 439 <li> 440 Throw è ora un'espressione <a href="https://wiki.php.net/rfc/throw_expression">RFC</a> 441 </li> 442 <li> 443 Permesso l'utilizzo di ::class sugli oggetti <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">Nuove classi, interfacce e funzioni</h2> 448 <ul> 449 <li> 450 Classe <a href="https://wiki.php.net/rfc/weak_maps">Weak Map</a> 451 </li> 452 <li> 453 Interfaccia <a href="https://wiki.php.net/rfc/stringable">Stringable</a> 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 Classe <a href="https://wiki.php.net/rfc/token_as_object">PhpToken</a> come alternativa a token_get_all() 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 Performance migliorate, migliore sintassi, e migliore sicurezza dei tipi. 484 </h2> 485 <div class="php8-button-wrapper center"> 486 <a class="php8-button php8-button_light" href="/downloads">Aggiorna a PHP 8!</a> 487 </div> 488 <div class="php8-footer__content"> 489 <p> 490 Per scaricare il codice sorgente visita di PHP 8 visita la pagina di <a href="http://www.php.net/downloads">download</a>. 491 I binari eseguibili per Windows possono essere trovati sul sito <a href="http://windows.php.net/download">PHP for Windows</a>. 492 Una lista dei cambiamenti è registrata nel <a href="http://www.php.net/ChangeLog-8.php">ChangeLog</a>. 493 </p> 494 <p> 495 La <a href="/manual/en/migration80.php">guida alla migrazione</a> è disponibile nel manuale PHP. 496 Consultatelo per una lista completa delle nuove funzionalità e dei cambiamenti non retrocompatibili. 497 </p> 498 </div> 499 </div> 500</section> 501 502<?php site_footer(); 503