{"id":230008,"date":"2022-12-02T16:01:00","date_gmt":"2022-12-02T13:01:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230008"},"modified":"2022-11-09T19:41:21","modified_gmt":"2022-11-09T16:41:21","slug":"uzywanie-typow-zwracanych-z-wartoscia-null-w-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/uzywanie-typow-zwracanych-z-wartoscia-null-w-php\/","title":{"rendered":"U\u017cywanie typ\u00f3w zwracanych z warto\u015bci\u0105 null w PHP"},"content":{"rendered":"\n<p>\u201eJedn\u0105 z najprzyjemniejszych funkcji, jakie oferuje PHP, jest podpowiadanie typu specjalnie dla tych, kt\u00f3rzy wywodz\u0105 si\u0119 z programowania obiektowego.<\/p>\n<p>Z <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\">podr\u0119cznika PHP<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Deklaracje typu umo\u017cliwiaj\u0105 funkcjom wymaganie, aby parametry by\u0142y okre\u015blonego typu w czasie wywo\u0142ania. Je\u015bli podana warto\u015b\u0107 jest nieprawid\u0142owego typu, generowany jest b\u0142\u0105d: w PHP 5 b\u0119dzie to b\u0142\u0105d krytyczny, kt\u00f3ry mo\u017cna naprawi\u0107, podczas gdy PHP 7 zg\u0142osi wyj\u0105tek <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>Powodem, dla kt\u00f3rego jest to wa\u017cne, jest to, \u017ce daje ludziom, kt\u00f3rzy b\u0119d\u0105 u\u017cywa\u0107 twojego kodu \u2013 w szczeg\u00f3lno\u015bci tym, kt\u00f3rzy b\u0119d\u0105 pisa\u0107 kod w oparciu o tw\u00f3j kod \u2013 jakie typy parametr\u00f3w b\u0119dzie akceptowany przez dany konstruktor lub funkcja.<\/p>\n<p>Ale to nie wszystko, poniewa\u017c wskaz\u00f3wki dotycz\u0105ce typu maj\u0105 r\u00f3wnie\u017c zastosowanie do typu danych, kt\u00f3re funkcja mo\u017ce zwr\u00f3ci\u0107.<\/p>\n<h2>Typy zwrot\u00f3w z mo\u017cliwo\u015bci\u0105 anulowania<\/h2>\n<p>Na pocz\u0105tek za\u0142\u00f3\u017cmy, \u017ce masz funkcj\u0119, kt\u00f3ra ma zwr\u00f3ci\u0107 jaki\u015b obiekt. W tym przyk\u0142adzie za\u0142\u00f3\u017cmy, \u017ce mamy a, <code>Post<\/code>a s\u0142upek jest reprezentowany przez model. Oczywi\u015bcie model b\u0119dzie typu post, wi\u0119c podpis klasy b\u0119dzie wygl\u0105da\u0142 mniej wi\u0119cej <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-00-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/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>Za\u0142\u00f3\u017cmy teraz, \u017ce masz klas\u0119 drugorz\u0119dn\u0105, kt\u00f3ra b\u0119dzie zwraca\u0107 instancj\u0119 wpisu. Kiedy u\u017cywasz podpowiedzi typu dla funkcji, podpis b\u0119dzie wygl\u0105da\u0142 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-01-postmanager-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mniej wi\u0119cej tak:<\/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>Chodzi o to, \u017ce metoda mo\u017ce zwr\u00f3ci\u0107 post lub mo\u017ce zwr\u00f3ci\u0107 <code>null<\/code>, je\u015bli model nigdy nie zosta\u0142 utworzony, przekazany do danej klasy lub po prostu nie istnieje z jakiego\u015b powodu, to musimy to uwzgl\u0119dni\u0107.<\/p>\n<p>Przyk\u0142ad: je\u015bli pracowa\u0142e\u015b dog\u0142\u0119bnie w WordPressie przez d\u0142u\u017cszy czas, wiesz, \u017ce funkcje mog\u0105 zwraca\u0107 wiele rzeczy (takich jak instancja <code>WP_Error<\/code>lub tablica). Ale w najczystszym przypadku zorientowanym obiektowo, o kt\u00f3rym m\u00f3wi\u0119 powy\u017cej, patrzymy na funkcj\u0119, kt\u00f3ra mo\u017ce zwr\u00f3ci\u0107 <code>null<\/code>lub mo\u017ce zwr\u00f3ci\u0107 instancj\u0119 <code>Post<\/code>.<\/p>\n<p>Aby to wskaza\u0107, mo\u017cesz skonfigurowa\u0107 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/abfec39e0a65e272d7856d88a7ae2fd7#file-02-postmanager-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">metod\u0119 w nast\u0119puj\u0105cy spos\u00f3b:<\/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>Kr\u00f3tko m\u00f3wi\u0105c, dodanie prostego znaku zapytania przed typem obiektu m\u00f3wi \u201eTa metoda mo\u017ce zwr\u00f3ci\u0107 warto\u015b\u0107 null lub instancj\u0119 <code>Post<\/code>&quot;.<\/p>\n<p>A dok\u0142adniej z podr\u0119cznika PHP:<\/p>\n<blockquote>\n<p>Deklaracje typu dla parametr\u00f3w i warto\u015bci zwracanych mo\u017cna teraz oznaczy\u0107 jako dopuszczaj\u0105ce warto\u015b\u0107 null, poprzedzaj\u0105c nazw\u0119 typu znakiem zapytania. Oznacza to, \u017ce opr\u00f3cz okre\u015blonego typu <strong><code>NULL<\/code><\/strong>mo\u017ce by\u0107 przekazany jako argument lub odpowiednio zwr\u00f3cony jako warto\u015b\u0107.<\/p>\n<\/blockquote>\n<p>Tak, to jest troch\u0119 d\u0142ugi post wyja\u015bniaj\u0105cy prost\u0105 koncepcj\u0119. Ale uwa\u017cam, \u017ce u\u017cywanie konkretnych przyk\u0142ad\u00f3w jest cz\u0119sto bardziej pomocne ni\u017c zwyk\u0142e m\u00f3wienie o tym w abstrakcie.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wskaz\u00f3wki dotycz\u0105ce typ\u00f3w maj\u0105 r\u00f3wnie\u017c zastosowanie do typu danych, kt\u00f3re funkcja mo\u017ce zwr\u00f3ci\u0107, w tym typ\u00f3w zwracanych dopuszczaj\u0105cych warto\u015b\u0107 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":[721,919,805,845],"tags":[1169],"class_list":["post-230008","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-php-7","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=230008"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230008\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/163336"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}