{"id":230826,"date":"2022-12-02T16:43:00","date_gmt":"2022-12-02T13:43:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230826"},"modified":"2022-11-10T00:10:33","modified_gmt":"2022-11-09T21:10:33","slug":"utilizzo-di-tipi-restituiti-nullable-in-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/utilizzo-di-tipi-restituiti-nullable-in-php\/","title":{"rendered":"Utilizzo di tipi restituiti Nullable in PHP"},"content":{"rendered":"\n<p>&#8220;Una delle caratteristiche pi\u00f9 interessanti offerte da PHP \u00e8 il suggerimento di tipo specifico per coloro che provengono da un background di programmazione orientato agli oggetti.<\/p>\n<p>Dal <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\">manuale PHP<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Le dichiarazioni di tipo consentono alle funzioni di richiedere che i parametri siano di un determinato tipo al momento della chiamata. Se il valore fornito \u00e8 di tipo errato, viene generato un errore: in PHP 5, questo sar\u00e0 un errore fatale recuperabile, mentre PHP 7 generer\u00e0 un&#8217;eccezione <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>Il motivo per cui questo \u00e8 importante \u00e8 perch\u00e9 fornisce alle persone che utilizzeranno il tuo codice, in particolare coloro che scriveranno codice sul tuo codice, quali tipi di parametri accetter\u00e0 un determinato costruttore o funzione.<\/p>\n<p>Ma c&#8217;\u00e8 di pi\u00f9 perch\u00e9 gli hint di tipo sono applicabili anche al tipo di dati che una funzione pu\u00f2 restituire.<\/p>\n<h2>Tipi di restituzione annullabili<\/h2>\n<p>Per cominciare, supponiamo che tu abbia una funzione che dovrebbe restituire un oggetto di qualche tipo. In questo esempio, supponiamo di avere a <code>Post<\/code>e il post \u00e8 rappresentato da un modello. Naturalmente, il modello sar\u00e0 di tipo post, quindi la firma della classe sar\u00e0 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-00-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">simile a questa<\/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>Ora supponiamo che tu abbia una classe secondaria che restituir\u00e0 un&#8217;istanza del post. Quando si utilizza un suggerimento di tipo per la funzione, la firma sarebbe <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-01-postmanager-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">simile a questa:<\/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>Il fatto \u00e8 che il metodo pu\u00f2 restituire un post o pu\u00f2 restituire <code>null<\/code>se il modello non \u00e8 mai stato istanziato, passato a una determinata classe o semplicemente non esiste per qualche motivo, quindi dobbiamo tenerne conto.<\/p>\n<p>Caso in questione: se hai lavorato in modo approfondito su WordPress per un certo periodo di tempo, allora sai che le funzioni possono restituire pi\u00f9 cose (come un&#8217;istanza di <code>WP_Error<\/code>o un array). Ma nel caso pi\u00f9 puro orientato agli oggetti di cui sto parlando sopra, stiamo esaminando una funzione che potrebbe restituire <code>null<\/code>o restituire un&#8217;istanza di <code>Post<\/code>.<\/p>\n<p>E per indicare questo, puoi impostare <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-02-postmanager-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il metodo in questo modo:<\/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>In breve, aggiungendo il semplice punto interrogativo prima del tipo di oggetto si dice &quot;Questo metodo pu\u00f2 restituire null o un&#8217;istanza di <code>Post<\/code>.&quot;<\/p>\n<p>O, pi\u00f9 precisamente dal manuale PHP:<\/p>\n<blockquote>\n<p>Le dichiarazioni di tipo per parametri e valori restituiti possono ora essere contrassegnate come nullable anteponendo al nome del tipo un punto interrogativo. Ci\u00f2 significa che, oltre al tipo specificato, <strong><code>NULL<\/code><\/strong>pu\u00f2 essere passato rispettivamente come argomento o restituito come valore.<\/p>\n<\/blockquote>\n<p>Quindi, s\u00ec, questo \u00e8 un post un po&#8217; lungo per spiegare un concetto semplice. Ma trovo che usare esempi concreti sia spesso pi\u00f9 utile che parlarne semplicemente in astratto.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gli hint di tipo sono applicabili anche al tipo di dati che una funzione pu\u00f2 restituire, inclusi i tipi restituiti con valori Null.<\/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":[918,804,720,844],"tags":[1168],"class_list":["post-230826","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-php-6","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230826","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=230826"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230826\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/163336"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230826"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230826"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230826"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}