{"id":230098,"date":"2022-12-02T16:16:00","date_gmt":"2022-12-02T13:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230098"},"modified":"2022-11-09T20:05:21","modified_gmt":"2022-11-09T17:05:21","slug":"nullable-tagastustueuepide-kasutamine-php-s","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/nullable-tagastustueuepide-kasutamine-php-s\/","title":{"rendered":"Nullable tagastust\u00fc\u00fcpide kasutamine PHP-s"},"content":{"rendered":"\n<p>&quot;\u00dcks kenamaid funktsioone, mida PHP pakub, on t\u00fc\u00fcbivihjed spetsiaalselt neile, kes on p\u00e4rit objektorienteeritud programmeerimise taustast.<\/p>\n<p>PHP <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\">juhendist<\/a><\/strong> :<\/p>\n<blockquote>\n<p>T\u00fc\u00fcbideklaratsioonid v\u00f5imaldavad funktsioonidel n\u00f5uda, et parameetrid oleksid k\u00f5ne ajal teatud t\u00fc\u00fcpi. Kui antud v\u00e4\u00e4rtus on vale t\u00fc\u00fcpi, siis genereeritakse viga: PHP 5 puhul on see taastatav fataalne viga, PHP 7 korral aga <a href=\"https:\/\/php.net\/manual\/en\/class.typeerror.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TypeError<\/a> erandi.<\/p>\n<\/blockquote>\n<p>P\u00f5hjus, miks see on oluline, seisneb selles, et see annab inimestele, kes hakkavad teie koodi kasutama \u2013 t\u00e4psemalt neile, kes kirjutavad koodi vastu koodi \u2013, milliseid parameetreid antud konstruktor v\u00f5i funktsioon aktsepteerib.<\/p>\n<p>Kuid siin on midagi enamat, sest t\u00fc\u00fcbivihjed kehtivad ka andmet\u00fc\u00fcbi kohta, mida funktsioon saab tagastada.<\/p>\n<h2>Nulleeritud tagastust\u00fc\u00fcbid<\/h2>\n<p>Alustuseks oletame, et teil on funktsioon, mis peaks tagastama mingisuguse objekti. Selles n\u00e4ites oletame, et meil on a <code>Post<\/code>ja postitust esindab mudel. Loomulikult on mudel post-t\u00fc\u00fcpi, nii et klassi allkiri n\u00e4eb v\u00e4lja umbes <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-00-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/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>Oletame n\u00fc\u00fcd, et teil on teisej\u00e4rguline klass, mis tagastab postituse eksemplari. Funktsiooni t\u00fc\u00fcbivihje kasutamisel n\u00e4eks allkiri v\u00e4lja <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-01-postmanager-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">umbes selline:<\/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>Asi on selles, et meetod v\u00f5ib tagastada postituse v\u00f5i <code>null<\/code>kui mudelit pole kunagi instantseeritud, antud klassi edasi antud v\u00f5i seda lihtsalt mingil p\u00f5hjusel ei eksisteeri, siis peame sellega arvestama.<\/p>\n<p>N\u00e4ide: kui olete WordPressiga m\u00f5nda aega p\u00f5hjalikult t\u00f6\u00f6tanud, siis teate, et funktsioonid v\u00f5ivad tagastada mitu asja (nt eksemplari <code>WP_Error<\/code>v\u00f5i massiivi). Kuid k\u00f5ige puhtamal objektorienteeritud juhul, millest ma eespool r\u00e4\u00e4gin, vaatleme funktsiooni, mis v\u00f5ib tagastada <code>null<\/code>v\u00f5i tagastada eksemplari <code>Post<\/code>.<\/p>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-02-postmanager-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Selle m\u00e4rkimiseks saate meetodi<\/a><\/strong> seadistada j\u00e4rgmiselt:<\/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>L\u00fchidalt, lihtsa k\u00fcsim\u00e4rgi lisamine objektit\u00fc\u00fcbi ette \u00fctleb: &quot;See meetod v\u00f5ib tagastada null v\u00f5i eksemplari <code>Post<\/code>.&quot;<\/p>\n<p>V\u00f5i t\u00e4psemalt PHP k\u00e4siraamatust:<\/p>\n<blockquote>\n<p>Parameetrite ja tagastusv\u00e4\u00e4rtuste t\u00fc\u00fcbideklaratsioonid saab n\u00fc\u00fcd m\u00e4rgistada t\u00fchjaks, lisades t\u00fc\u00fcbinime ette k\u00fcsim\u00e4rgi. See t\u00e4hendab, et lisaks m\u00e4\u00e4ratud t\u00fc\u00fcbile <strong><code>NULL<\/code><\/strong>saab edastada vastavalt argumendina v\u00f5i tagastada v\u00e4\u00e4rtusena.<\/p>\n<\/blockquote>\n<p>Niisiis, jah, see on natuke pikk postitus, et selgitada otsest m\u00f5istet. Kuid ma leian, et konkreetsete n\u00e4idete kasutamine on sageli kasulikum kui sellest lihtsalt abstraktne r\u00e4\u00e4kimine.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00fc\u00fcbivihjed kehtivad ka andmet\u00fc\u00fcbi kohta, mida funktsioon v\u00f5ib tagastada, sealhulgas nullitavaid tagastust\u00fc\u00fcpe.<\/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":[718,916,842,802],"tags":[1165],"class_list":["post-230098","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-muud","category-opetused","category-php-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230098","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=230098"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230098\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/163336"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}