{"id":230535,"date":"2022-12-02T16:34:00","date_gmt":"2022-12-02T13:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230535"},"modified":"2022-11-09T22:50:38","modified_gmt":"2022-11-09T19:50:38","slug":"utilisation-de-types-de-retour-nullable-en-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/utilisation-de-types-de-retour-nullable-en-php\/","title":{"rendered":"Utilisation de types de retour Nullable en PHP"},"content":{"rendered":"\n<p>&quot;L&rsquo;une des fonctionnalit\u00e9s les plus int\u00e9ressantes que PHP offre est l&rsquo;indication de type sp\u00e9cifiquement pour ceux qui viennent d&rsquo;un arri\u00e8re-plan de programmation orient\u00e9e objet.<\/p>\n<p>Du <strong><a href=\"https:\/\/secure.php.net\/manual\/en\/functions.arguments.php#functions.arguments.type-declaration\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">manuel PHP<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Les d\u00e9clarations de type permettent aux fonctions d&rsquo;exiger que les param\u00e8tres soient d&rsquo;un certain type au moment de l&rsquo;appel. Si la valeur donn\u00e9e est d&rsquo;un type incorrect, alors une erreur est g\u00e9n\u00e9r\u00e9e: en PHP 5, ce sera une erreur fatale r\u00e9cup\u00e9rable, tandis que PHP 7 l\u00e8vera une exception <a href=\"https:\/\/php.net\/manual\/en\/class.typeerror.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TypeError<\/a>.<\/p>\n<\/blockquote>\n<p>La raison pour laquelle cela est important est qu&rsquo;il donne aux personnes qui vont utiliser votre code &#8211; en particulier celles qui \u00e9criront du code par rapport \u00e0 votre code &#8211; quels types de param\u00e8tres un constructeur ou une fonction donn\u00e9 acceptera.<\/p>\n<p>Mais il y a plus que cela car les indications de type sont \u00e9galement applicables au type de donn\u00e9es qu&rsquo;une fonction peut renvoyer.<\/p>\n<h2>Types de retour Nullable<\/h2>\n<p>Pour commencer, disons que vous avez une fonction cens\u00e9e renvoyer un objet quelconque. Dans cet exemple, disons que nous avons un <code>Post<\/code>et que le poteau est repr\u00e9sent\u00e9 par un mod\u00e8le. Naturellement, le mod\u00e8le sera de type post donc la signature de classe ressemblera <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-00-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nclass Post {\n  \/\/ Attributes, Constructor, and Functions here.\n}\n<\/code><\/pre>\n<p>Supposons maintenant que vous ayez une classe secondaire qui va renvoyer une instance de la publication. Lors de l&rsquo;utilisation d&rsquo;un indice de type pour la fonction, la signature ressemblerait <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-01-postmanager-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci\u00a0:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nclass PostManager {\n\n  private $post;\n\n  \/\/ Constructor and other Functions here.\n\n  public function getPost(): Post\n  {\n    return $this-&gt;post;\n  }\n\n}\n<\/code><\/pre>\n<p>Le fait est que la m\u00e9thode peut renvoyer un message ou <code>null<\/code>si le mod\u00e8le n&rsquo;a jamais \u00e9t\u00e9 instanci\u00e9, pass\u00e9 dans une classe donn\u00e9e ou n&rsquo;existe tout simplement pas pour une raison quelconque, nous devons en tenir compte.<\/p>\n<p>Exemple concret\u00a0: si vous avez travaill\u00e9 en profondeur sur WordPress pendant un certain temps, vous savez que les fonctions peuvent renvoyer plusieurs choses (comme une instance de <code>WP_Error<\/code>ou un tableau). Mais dans le cas le plus pur orient\u00e9 objet dont je parle ci-dessus, nous examinons une fonction qui peut renvoyer <code>null<\/code>ou peut renvoyer une instance de <code>Post<\/code>.<\/p>\n<p>Et pour l&rsquo;indiquer, vous pouvez param\u00e9trer <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-02-postmanager-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la m\u00e9thode comme ceci :<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nclass PostManager {\n\n  private $post;\n\n  \/\/ Constructor and other Functions here.\n\n  public function getPost(): ?Post\n  {\n    if ($this-&gt;post === null) {\n      return null;\n    }\n\n    return $this-&gt;post;\n  }\n}\n<\/code><\/pre>\n<p>En bref, ajouter le simple point d&rsquo;interrogation avant le type d&rsquo;objet indique &quot;Cette m\u00e9thode peut renvoyer null ou une instance de <code>Post<\/code>.&quot;<\/p>\n<p>Ou, plus pr\u00e9cis\u00e9ment du manuel PHP\u00a0:<\/p>\n<blockquote>\n<p>Les d\u00e9clarations de type pour les param\u00e8tres et les valeurs de retour peuvent d\u00e9sormais \u00eatre marqu\u00e9es comme nullables en pr\u00e9fixant le nom du type avec un point d&rsquo;interrogation. Cela signifie qu&rsquo;en plus du type sp\u00e9cifi\u00e9, <strong><code>NULL<\/code><\/strong>peut \u00eatre respectivement pass\u00e9 en argument ou renvoy\u00e9 en tant que valeur.<\/p>\n<\/blockquote>\n<p>Donc, oui, c&rsquo;est un peu long pour expliquer un concept simple. Mais je trouve que l&rsquo;utilisation d&rsquo;exemples concrets est souvent plus utile que de simplement en parler dans l&rsquo;abstrait.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les indications de type sont \u00e9galement applicables au type de donn\u00e9es qu&rsquo;une fonction peut renvoyer, y compris les types de retour nullables.<\/p>\n","protected":false},"author":1,"featured_media":163336,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,717,801,841],"tags":[1167],"class_list":["post-230535","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-developpeur","category-php-3","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230535","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=230535"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230535\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/163336"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230535"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230535"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}