xref: /web-php/releases/8.0/it.php (revision c093fb53)
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