{"id":230096,"date":"2022-12-02T16:04:00","date_gmt":"2022-12-02T13:04:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230096"},"modified":"2022-11-09T20:04:28","modified_gmt":"2022-11-09T17:04:28","slug":"anvaenda-nullable-return-types-i-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/anvaenda-nullable-return-types-i-php\/","title":{"rendered":"Anv\u00e4nda Nullable Return Types i PHP"},"content":{"rendered":"\n<p>&quot;En av de trevligaste funktionerna som PHP erbjuder \u00e4r typtips specifikt f\u00f6r dem som kommer fr\u00e5n en objektorienterad programmeringsbakgrund.<\/p>\n<p>Fr\u00e5n <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\">PHP-manualen<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Typdeklarationer till\u00e5ter funktioner att kr\u00e4va att parametrar \u00e4r av en viss typ vid anropstid. Om det angivna v\u00e4rdet \u00e4r av felaktig typ, genereras ett fel: i PHP 5 kommer detta att vara ett \u00e5terst\u00e4llbart fatalt fel, medan PHP 7 kommer att ge ett <a href=\"https:\/\/php.net\/manual\/en\/class.typeerror.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TypeError-<\/a> undantag.<\/p>\n<\/blockquote>\n<p>Anledningen till att detta \u00e4r viktigt \u00e4r f\u00f6r att det ger m\u00e4nniskor som ska anv\u00e4nda din kod \u2013 speciellt de som ska skriva kod mot din kod \u2013 vilka typer av parametrar en given konstrukt\u00f6r eller funktion kommer att acceptera.<\/p>\n<p>Men det finns mer \u00e4n s\u00e5 eftersom typtips ocks\u00e5 \u00e4r till\u00e4mpliga p\u00e5 vilken typ av data en funktion kan returnera.<\/p>\n<h2>Nullbara returtyper<\/h2>\n<p>Till att b\u00f6rja med, l\u00e5t oss s\u00e4ga att du har en funktion som \u00e4r t\u00e4nkt att returnera ett objekt av n\u00e5got slag. I det h\u00e4r exemplet, l\u00e5t oss s\u00e4ga att vi har a <code>Post<\/code>och inl\u00e4gget representeras av en modell. Naturligtvis kommer modellen att vara av typen post s\u00e5 klasssignaturen kommer att se ut ungef\u00e4r <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-00-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/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>L\u00e5t oss nu s\u00e4ga att du har en sekund\u00e4r klass som kommer att returnera en instans av inl\u00e4gget. N\u00e4r du anv\u00e4nder en typtips f\u00f6r funktionen skulle signaturen se ut <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-01-postmanager-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ungef\u00e4r s\u00e5 h\u00e4r:<\/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>Saken \u00e4r den att metoden kan returnera ett inl\u00e4gg eller <code>null<\/code>om modellen aldrig instansierades, skickades till en given klass eller helt enkelt inte existerar av n\u00e5gon anledning, d\u00e5 m\u00e5ste vi ta h\u00e4nsyn till det.<\/p>\n<p>Exempel: Om du har arbetat p\u00e5 djupet i WordPress under en l\u00e4ngre tid, vet du att funktioner kan returnera flera saker (som en instans av <code>WP_Error<\/code>eller en array). Men i det renaste objektorienterade fallet som jag pratar om ovan, tittar vi p\u00e5 en funktion som kan returnera <code>null<\/code>eller kan returnera en instans av <code>Post<\/code>.<\/p>\n<p>Och f\u00f6r att indikera detta kan du st\u00e4lla in <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-02-postmanager-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">metoden s\u00e5 h\u00e4r:<\/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>Kort sagt, att l\u00e4gga till det enkla fr\u00e5getecknet f\u00f6re objekttypen s\u00e4ger &quot;Den h\u00e4r metoden kan returnera null eller en instans av <code>Post<\/code>.&quot;<\/p>\n<p>Eller, mer specifikt fr\u00e5n PHP-manualen:<\/p>\n<blockquote>\n<p>Typdeklarationer f\u00f6r parametrar och returv\u00e4rden kan nu markeras som nullbara genom att prefixet typnamnet med ett fr\u00e5getecken. Detta betyder att s\u00e5v\u00e4l som den angivna typen <strong><code>NULL<\/code><\/strong>kan skickas som ett argument, eller returneras som ett v\u00e4rde, respektive.<\/p>\n<\/blockquote>\n<p>S\u00e5, ja, det h\u00e4r \u00e4r ett lite l\u00e5ngt inl\u00e4gg f\u00f6r att f\u00f6rklara ett rakt begrepp. Men jag tycker att det ofta \u00e4r mer anv\u00e4ndbart att anv\u00e4nda konkreta exempel \u00e4n att bara prata om det abstrakt.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Typtips \u00e4r ocks\u00e5 till\u00e4mpliga p\u00e5 vilken typ av data en funktion kan returnera, inklusive nullbara returtyper.<\/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":[848,922,807,724],"tags":[1173],"class_list":["post-230096","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-oevrig","category-php-9","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230096","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230096"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230096\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/163336"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}