xref: /web-php/releases/8.0/fr.php (revision c093fb53)
1<?php
2$_SERVER['BASE_PAGE'] = 'releases/8.0/en.php';
3include_once __DIR__ . '/common.php';
4
5releases\php80\common_header(
6    "PHP 8.0 est une mise à jour majeure du langage PHP. " .
7    "Elle contient beaucoup de nouvelle fonctionnalités et d'optimisations, " .
8    "incluant les arguments nommés, les types d'union, attributs, " .
9    "promotion de propriétés de constructeur, l'expression match, " .
10    "l'opérateur nullsafe, JIT (Compilation à la Volée), " .
11    "et des améliorations dans le système de typage, " .
12    "la gestion d'erreur, et de cohérence.");
13
14?>
15<section class="php8-section php8-section_dark php8-section_header center">
16  <div class="page-tools">
17    <div class="change-language">
18        <?php releases\php80\language_chooser('fr'); ?>
19    </div>
20  </div>
21  <div class="php8-section__content">
22    <div class="php8-logo">
23      <img src="/images/php8/logo_php8.svg" alt="php8" height="126" width="343">
24    </div>
25    <div class="php8-title">Released!</div>
26    <div class="php8-subtitle">
27      PHP 8.0 est une mise à jour majeure du langage PHP.<br class="display-none-md">
28      Elle contient beaucoup de nouvelles fonctionnalités et d'optimisations, incluant les arguments nommés,
29      les types d'union, attributs, promotion de propriété de constructeur, l'expression match, l'opérateur
30      nullsafe, JIT (Compilation à la Volée), et des améliorations dans le système de typage, la gestion
31      d'erreur, et de cohérence.
32    </div>
33    <div class="php8-button-wrapper center">
34      <a class="php8-button php8-button_light" href="/downloads">Migrez à PHP 8 maintenant!</a>
35    </div>
36  </div>
37</section>
38
39<section class="php8-section center">
40  <div class="php8-compare">
41    <h2 class="php8-h2" id="named-arguments">
42      Arguments nommés
43      <a class="php8-rfc" href="https://wiki.php.net/rfc/named_params">RFC</a>
44    </h2>
45    <div class="php8-compare__main">
46      <div class="php8-compare__block example-contents">
47        <div class="php8-compare__label">PHP 7</div>
48        <div class="php8-code phpcode">
49            <?php highlight_php_trimmed(
50                'htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, \'UTF-8\', false);',
51            );?>
52        </div>
53
54
55      </div>
56      <div class="php8-compare__arrow"></div>
57      <div class="php8-compare__block example-contents">
58        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
59        <div class="php8-code phpcode">
60            <?php highlight_php_trimmed(
61                'htmlspecialchars($string, double_encode: false);',
62            );?>
63        </div>
64      </div>
65    </div>
66    <div class="php8-compare__content">
67      <ul>
68        <li>Spécifiez uniquement les paramètres requis, omettant ceux optionnels.</li>
69        <li>Les arguments sont indépendants de l'ordre et auto-documentés.</li>
70      </ul>
71    </div>
72  </div>
73
74  <div class="php8-compare">
75    <h2 class="php8-h2" id="attributes">
76      Attributs
77      <a class="php8-rfc" href="https://wiki.php.net/rfc/attributes_v2">RFC</a> <a class="php8-rfc" href="/manual/fr/language.attributes.php">Doc</a>
78    </h2>
79    <div class="php8-compare__main">
80      <div class="php8-compare__block example-contents">
81        <div class="php8-compare__label">PHP 7</div>
82        <div class="php8-code phpcode">
83            <?php highlight_php_trimmed(
84                '/**
85* @Route("/api/posts/{id}", methods={"GET", "HEAD"})
86*/
87class User
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                '#[Route("/api/posts/{id}", methods: ["GET", "HEAD"])]
98class User
99{',
100            );?>
101        </div>
102      </div>
103    </div>
104    <div class="php8-compare__content">
105      <p>Au lieux d'annotations PHPDoc, vous pouvez désormais utiliser les métadonnées structurés avec la syntaxe native de PHP.</p>
106    </div>
107  </div>
108
109  <div class="php8-compare">
110    <h2 class="php8-h2" id="constructor-property-promotion">
111      Promotion de propriétés de constructeur
112      <a class="php8-rfc" href="https://wiki.php.net/rfc/constructor_promotion">RFC</a> <a class="php8-rfc" href="/manual/fr/language.oop5.decon.php#language.oop5.decon.constructor.promotion">Doc</a>
113    </h2>
114    <div class="php8-compare__main">
115      <div class="php8-compare__block example-contents">
116        <div class="php8-compare__label">PHP 7</div>
117        <div class="php8-code phpcode">
118            <?php highlight_php_trimmed(
119                'class Point {
120  public float $x;
121  public float $y;
122  public float $z;
123
124  public function __construct(
125    float $x = 0.0,
126    float $y = 0.0,
127    float $z = 0.0
128  ) {
129    $this->x = $x;
130    $this->y = $y;
131    $this->z = $z;
132  }
133}',
134            );?>
135        </div>
136      </div>
137      <div class="php8-compare__arrow"></div>
138      <div class="php8-compare__block example-contents">
139        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
140        <div class="php8-code phpcode">
141            <?php highlight_php_trimmed(
142                'class Point {
143  public function __construct(
144    public float $x = 0.0,
145    public float $y = 0.0,
146    public float $z = 0.0,
147  ) {}
148}',
149            );?>
150        </div>
151      </div>
152    </div>
153    <div class="php8-compare__content">
154      <p>Moins de code redondant pour définir et initialiser les propriétés.</p>
155    </div>
156  </div>
157
158  <div class="php8-compare">
159    <h2 class="php8-h2" id="union-types">
160      Types d'union
161      <a class="php8-rfc" href="https://wiki.php.net/rfc/union_types_v2">RFC</a> <a class="php8-rfc" href="/manual/fr/language.types.declarations.php#language.types.declarations.composite.union">Doc</a>
162    </h2>
163    <div class="php8-compare__main">
164      <div class="php8-compare__block example-contents">
165        <div class="php8-compare__label">PHP 7</div>
166        <div class="php8-code phpcode">
167            <?php highlight_php_trimmed(
168                'class Number {
169  /** @var int|float */
170  private $number;
171
172  /**
173   * @param float|int $number
174   */
175  public function __construct($number) {
176    $this->number = $number;
177  }
178}
179
180new Number(\'NaN\'); // Ok',
181            );?>
182        </div>
183      </div>
184      <div class="php8-compare__arrow"></div>
185      <div class="php8-compare__block example-contents">
186        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
187        <div class="php8-code phpcode">
188            <?php highlight_php_trimmed(
189                'class Number {
190  public function __construct(
191    private int|float $number
192  ) {}
193}
194
195new Number(\'NaN\'); // TypeError',
196            );?>
197        </div>
198      </div>
199    </div>
200    <div class="php8-compare__content">
201      <p>
202          Au lieu d'annotation PHPDoc pour une combinaison de type, vous pouvez utiliser les déclarations de types
203          d'union native qui sont validées lors de l'exécution.
204      </p>
205    </div>
206  </div>
207
208  <div class="php8-compare">
209    <h2 class="php8-h2" id="match-expression">
210      Expression match
211      <a class="php8-rfc" href="https://wiki.php.net/rfc/match_expression_v2">RFC</a> <a class="php8-rfc" href="/manual/fr/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 nouvelle instruction match est similaire à switch et a les fonctionnalités suivantes :</p>
247      <ul>
248        <li>Match est une expression, signifiant que son résultat peut être enregistré dans une variable ou retourné.</li>
249        <li>Les branches de match supportent uniquement les expressions d'une seule ligne, et n'a pas besoin d'une déclaration break;.</li>
250        <li>Match fait des comparaisons strictes.</li>
251      </ul>
252    </div>
253  </div>
254
255  <div class="php8-compare">
256    <h2 class="php8-h2" id="nullsafe-operator">
257      Opérateur 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>
293          Au lieu de faire des vérifications conditionnelles de null, vous pouvez utiliser une chaîne d'appel
294          avec le nouvel opérateur nullsafe. Qui lorsque l'évaluation d'un élément de la chaîne échoue, l'exécution
295          de la chaîne complète est terminée et la chaîne entière évalue à null.
296      </p>
297    </div>
298  </div>
299
300  <div class="php8-compare">
301    <h2 class="php8-h2" id="saner-string-to-number-comparisons">
302      Comparaisons entre les chaînes de caractères et les nombres plus saines
303      <a class="php8-rfc" href="https://wiki.php.net/rfc/string_to_number_comparison">RFC</a>
304    </h2>
305    <div class="php8-compare__main">
306      <div class="php8-compare__block example-contents">
307        <div class="php8-compare__label">PHP 7</div>
308        <div class="php8-code phpcode">
309            <?php highlight_php_trimmed(
310                '0 == \'foobar\' // true',
311            );?>
312        </div>
313      </div>
314      <div class="php8-compare__arrow"></div>
315      <div class="php8-compare__block example-contents">
316        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
317        <div class="php8-code phpcode">
318            <?php highlight_php_trimmed(
319                '0 == \'foobar\' // false',
320            );?>
321        </div>
322      </div>
323    </div>
324    <div class="php8-compare__content">
325      <p>
326          Lors de la comparaison avec une chaîne numérique, PHP 8 utilise une comparaison de nombre.
327          Sinon, il convertit le nombre à une chaîne de caractères et utilise une comparaison de chaîne de caractères.
328      </p>
329    </div>
330  </div>
331
332  <div class="php8-compare">
333    <h2 class="php8-h2" id="consistent-type-errors-for-internal-functions">
334      Erreurs de type cohérent pour les fonctions internes
335      <a class="php8-rfc" href="https://wiki.php.net/rfc/consistent_type_errors">RFC</a>
336    </h2>
337    <div class="php8-compare__main">
338      <div class="php8-compare__block example-contents">
339        <div class="php8-compare__label">PHP 7</div>
340        <div class="php8-code phpcode">
341            <?php highlight_php_trimmed(
342                'strlen([]); // Warning: strlen() expects parameter 1 to be string, array given
343
344array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0',
345            );?>
346        </div>
347      </div>
348      <div class="php8-compare__arrow"></div>
349      <div class="php8-compare__block example-contents">
350        <div class="php8-compare__label php8-compare__label_new">PHP 8</div>
351        <div class="php8-code phpcode">
352            <?php highlight_php_trimmed(
353                'strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given
354
355array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0',
356            );?>
357        </div>
358      </div>
359    </div>
360    <div class="php8-compare__content">
361      <p>La plupart des fonctions internes lancent désormais une exception Error si la validation du paramètre échoue.</p>
362    </div>
363  </div>
364</section>
365
366<section class="php8-section php8-section_light">
367  <h2 class="php8-h2">Compilation Juste-à-Temps (JIT)</h2>
368  <p>
369    PHP 8 introduit deux moteurs de compilation JIT (juste à temps/compilation à la volée).
370    Le Tracing JIT, le plus prometteur des deux, montre environ 3 fois plus de performances sur des benchmarks
371    synthétiques et 1,5-2 fois plus de performances sur certaines applications à longue durée d'exécution.
372    Généralement les performances des applications sont identiques à PHP 7.4.
373  </p>
374  <h3 class="php8-h3">
375    Contribution relative du JIT à la performance de PHP 8
376  </h3>
377  <p>
378    <img src="/images/php8/scheme.svg" width="900" alt="Just-In-Time compilation">
379  </p>
380
381  <div class="php8-columns">
382    <div class="php8-column">
383      <h2 class="php8-h2 php8-h2_margin-top">Amélioration du système de typage et de la gestion d'erreur</h2>
384      <ul>
385        <li>
386            Vérification de type plus sévère pour les opérateurs arithmétiques et bit à bit
387          <a href="https://wiki.php.net/rfc/arithmetic_operator_type_checks">RFC</a>
388        </li>
389        <li>
390            Validation de méthode abstraite des traits <a href="https://wiki.php.net/rfc/abstract_trait_method_validation">RFC</a>
391        </li>
392        <li>
393            Signature valide des méthodes magiques <a href="https://wiki.php.net/rfc/magic-methods-signature">RFC</a>
394        </li>
395        <li>
396            Reclassifications des avertissements du moteur <a href="https://wiki.php.net/rfc/engine_warnings">RFC</a>
397        </li>
398        <li>
399            Erreur fatale pour des signatures de méthodes incompatibles <a href="https://wiki.php.net/rfc/lsp_errors">RFC</a>
400        </li>
401        <li>
402            L'opérateur @ ne silence plus les erreurs fatales.
403        </li>
404        <li>
405            Héritages avec les méthodes privées <a href="https://wiki.php.net/rfc/inheritance_private_methods">RFC</a>
406        </li>
407        <li>
408            Type mixed <a href="https://wiki.php.net/rfc/mixed_type_v2">RFC</a>
409        </li>
410        <li>
411            Type de retour static <a href="https://wiki.php.net/rfc/static_return_type">RFC</a>
412        </li>
413        <li>
414            Types pour les fonctions internes
415          <a href="https://externals.io/message/106522">Discussion e-mail</a>
416        </li>
417        <li>
418            Objets opaques au lieu de ressources pour les extensions
419            <a href="https://php.watch/versions/8.0/resource-CurlHandle">Curl</a>,
420            <a href="https://php.watch/versions/8.0/gdimage">Gd</a>,
421            <a href="https://php.watch/versions/8.0/sockets-sockets-addressinfo">Sockets</a>,
422            <a href="https://php.watch/versions/8.0/OpenSSL-resource">OpenSSL</a>,
423            <a href="https://php.watch/versions/8.0/xmlwriter-resource">XMLWriter</a>, et
424            <a href="https://php.watch/versions/8.0/xmlwriter-resource">XML</a>
425        </li>
426      </ul>
427    </div>
428    <div class="php8-column">
429      <h2 class="php8-h2 php8-h2_margin-top">Autres ajustements de syntaxe et améliorations</h2>
430      <ul>
431        <li>
432            Autorisation des virgules trainantes dans les listes de paramètres <a href="https://wiki.php.net/rfc/trailing_comma_in_parameter_list">RFC</a>
433            et dans les listes des use d'une fermeture <a href="https://wiki.php.net/rfc/trailing_comma_in_closure_use_list">RFC</a>
434        </li>
435        <li>
436          Les catchs non capturant <a href="https://wiki.php.net/rfc/non-capturing_catches">RFC</a>
437        </li>
438        <li>
439            Ajustement de la Syntaxe des Variables <a href="https://wiki.php.net/rfc/variable_syntax_tweaks">RFC</a>
440        </li>
441        <li>
442            Traite les noms des espaces de nom comme un seul token <a href="https://wiki.php.net/rfc/namespaced_names_as_token">RFC</a>
443        </li>
444        <li>
445            Throw est désormais une expression <a href="https://wiki.php.net/rfc/throw_expression">RFC</a>
446        </li>
447        <li>
448            Autorisation de ::class sur les objets <a href="https://wiki.php.net/rfc/class_name_literal_on_object">RFC</a>
449        </li>
450      </ul>
451
452      <h2 class="php8-h2 php8-h2_margin-top">Nouvelles Classes, Interfaces, et Fonctions</h2>
453      <ul>
454        <li>
455          Classe <a href="https://wiki.php.net/rfc/weak_maps">Weak Map</a>
456        </li>
457        <li>
458          Interface <a href="https://wiki.php.net/rfc/stringable">Stringable</a>
459        </li>
460        <li>
461          <a href="https://wiki.php.net/rfc/str_contains">str_contains()</a>,
462          <a href="https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions">str_starts_with()</a>,
463          <a href="https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions">str_ends_with()</a>
464        </li>
465        <li>
466          <a href="https://github.com/php/php-src/pull/4769">fdiv()</a>
467        </li>
468        <li>
469          <a href="https://wiki.php.net/rfc/get_debug_type">get_debug_type()</a>
470        </li>
471        <li>
472          <a href="https://github.com/php/php-src/pull/5427">get_resource_id()</a>
473        </li>
474        <li>
475          Implémentation objet de <a href="https://wiki.php.net/rfc/token_as_object">token_get_all()</a>
476        </li>
477        <li>
478          <a href="https://wiki.php.net/rfc/dom_living_standard_api">Nouvelles APIs pour traverser et manipuler le DOM</a>
479        </li>
480      </ul>
481    </div>
482  </div>
483</section>
484
485<section class="php8-section php8-section_dark php8-section_footer php8-footer">
486  <div class="php8-section__content">
487    <h2 class="php8-h2 center">
488      Meilleures performances, meilleure syntaxe, amélioration de la sécurité de type.
489    </h2>
490    <div class="php8-button-wrapper center">
491      <a class="php8-button php8-button_light" href="/downloads">Migrez à PHP 8 maintenant!</a>
492    </div>
493    <div class="php8-footer__content">
494      <p>
495        Pour le téléchargement des sources de PHP 8 veuillez visiter la page de <a href="http://www.php.net/downloads">téléchargement</a>.
496        Les binaires Windows peuvent être trouvés sur le site de <a href="http://windows.php.net/download">PHP pour Windows</a>.
497        La liste des changements est notée dans le <a href="http://www.php.net/ChangeLog-8.php">ChangeLog</a>.
498      </p>
499      <p>
500        Le <a href="/manual/fr/migration80.php">guide de migration</a> est disponible dans le manuel PHP.
501        Veuillez le consulter pour une liste détaillée des nouvelles fonctionnalités et changements non rétrocompatibles.
502      </p>
503    </div>
504  </div>
505</section>
506
507
508
509
510<?php site_footer();
511