{"id":229014,"date":"2022-11-08T12:48:00","date_gmt":"2022-11-08T09:48:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229014"},"modified":"2022-11-09T05:11:43","modified_gmt":"2022-11-09T02:11:43","slug":"unikanie-class_exists-w-zorientowanym-obiektowo-kodzie-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/unikanie-class_exists-w-zorientowanym-obiektowo-kodzie-wordpress\/","title":{"rendered":"Unikanie class_exists w zorientowanym obiektowo kodzie WordPress"},"content":{"rendered":"\n<p>Je\u015bli piszesz kod obiektowy dla WordPressa (zwykle w kontek\u015bcie wtyczek), prawdopodobnie natkniesz si\u0119 na sprawdzenie class_exists przed zainicjowaniem klasy. Ale w tym momencie powinni\u015bmy zacz\u0105\u0107 unika\u0107 class_exists w wi\u0119kszo\u015bci naszego kodu (z kilkoma wyj\u0105tkami, kt\u00f3re opisz\u0119 poni\u017cej).<\/p>\n<p>W zale\u017cno\u015bci od u\u017cywanej wersji PHP ma to sens. Albo kiedy\u015b tak by\u0142o. Od PHP 5.3.0 nie jest to konieczne. Zamiast tego lepiej jest u\u017cywa\u0107 przestrzeni nazw.<\/p>\n<h2>Unikanie class_exists<\/h2>\n<p>Na tej stronie mo\u017cesz zobaczy\u0107 wszystkie wymagania dla r\u00f3\u017cnych wersji WordPressa <a href=\"https:\/\/codex.wordpress.org\/Template:Server_requirements\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">,<\/a> wi\u0119c je\u015bli pracujesz ze starszymi wersjami WordPressa, warto sprawdzi\u0107 ca\u0142\u0105 klas\u0119 class_exists.<\/p>\n<p>Mimo <a href=\"https:\/\/wordpress.org\/about\/requirements\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">to jest wa\u017cna uwaga<\/a> :<\/p>\n<blockquote>\n<p>Uwaga: je\u015bli korzystasz ze starszego \u015brodowiska, w kt\u00f3rym masz tylko starsze wersje PHP lub MySQL, WordPress dzia\u0142a r\u00f3wnie\u017c z PHP 5.2.4+ i MySQL 5.0+, ale te wersje osi\u0105gn\u0119\u0142y oficjalny koniec \u017cycia i jako takie <strong>mog\u0105 narazi\u0107 Twoj\u0105 witryn\u0119 na luki w zabezpieczeniach<\/strong>.<\/p>\n<\/blockquote>\n<p>Jednak dla wi\u0119kszo\u015bci z nas nowoczesne \u015brodowiska hostingowe obs\u0142uguj\u0105 co najmniej PHP 5.3.0, je\u015bli nie wy\u017csze, dlatego nie musimy u\u017cywa\u0107 class_exists.<\/p>\n<p>To powiedziawszy, nierzadko mo\u017cna zobaczy\u0107 co\u015b <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-00-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">takiego<\/a> :<\/p>\n<pre><code>&lt;?php\n\nif (! class_exists( 'My_Unique_Class')) {\n class My_Unique_Class {\n   \/\/ class implementation\n }\n}\n<\/code><\/pre>\n<p>Lub <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-01-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/a> :<\/p>\n<pre><code>&lt;?php\n\nif (class_exists( 'My_Unique_Class')) {\n  return;\n}\n\nclass My_Unique_Class {\n   \/\/ class implementation\n}\n<\/code><\/pre>\n<p>Lata temu te\u017c pisa\u0142bym taki kod. Czasami by\u0142o to po\u0142\u0105czenie z wcze\u015bniej istniej\u0105c\u0105 baz\u0105 kodu. Innym razem to dlatego, \u017ce nie zna\u0142em nic lepszego. Chodzi o to, \u017ce sta\u0142o si\u0119 to czym\u015b, co widzimy w kodzie opartym na WordPressie, gdy nie musimy go u\u017cywa\u0107.<\/p>\n<p>W\u0142a\u015bciwie to twierdz\u0119, \u017ce nie powinni\u015bmy ju\u017c go u\u017cywa\u0107.<\/p>\n<p>Ale im wi\u0119cej kodu piszesz i im wi\u0119cej kodu czytasz, tym wi\u0119cej si\u0119 uczysz, prawda? To cz\u0119\u015b\u0107 ca\u0142ego powodu przestrzeni nazw i automatycznego \u0142adowania.<\/p>\n<\/p>\n<p>Jak wi\u0119c napisa\u0107 powy\u017cszy kod?<\/p>\n<p>Mo\u017ce <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-02-namespace-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TomMcFarlin;\n\nclass My_Unique_Class {\n  \/\/ class implementation\n}\n<\/code><\/pre>\n<p>Mimo to dla niekt\u00f3rych pojawia si\u0119 pytanie: w jaki spos\u00f3b przestrzenie nazw pomagaj\u0105 zamiast u\u017cywania class_exists?<\/p>\n<p>W idealnym przypadku, je\u015bli ta sama klasa istnieje w przestrzeni nazw, wyst\u0119puje problem z przestrzeni\u0105 nazw. Pami\u0119taj, \u017ce <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/przestrzenie-nazw-i-automatyczne-ladowanie-w-wordpress\/\" title=\"mo\u017cesz my\u015ble\u0107 o przestrzeni nazw\">mo\u017cesz my\u015ble\u0107 o przestrzeni nazw<\/a> jak o pakiecie sk\u0142adaj\u0105cym si\u0119 z unikalnych element\u00f3w. A poniewa\u017c s\u0105 wyj\u0105tkowe, nigdy nie powinno by\u0107 innego utworu ani, w tej klasie, innej, takiej jak ona.<\/p>\n<p>W tym celu, zamiast sprawdzania class_exists, staraj si\u0119 u\u017cywa\u0107 przestrzeni nazw. Oczywi\u015bcie nie m\u00f3wi\u0119, \u017ce wr\u00f3\u0107 i zrefaktoryzuj ca\u0142y sw\u00f3j kod \u2013 nie zrobi\u0142em tego \u2013 ale to nie znaczy, \u017ce kod, kt\u00f3ry pisz\u0119 lub recenzuj\u0119, zawiera u\u017cycie lub zalecenia.<\/p>\n<p>Jest to \u0142atwa zmiana, kt\u00f3ra mo\u017ce znacznie poprawi\u0107 czytelno\u015b\u0107 kodu, za\u015bmiecona mniejsz\u0105 liczb\u0105 warunk\u00f3w (post na inny czas) i znacznie lepiej zorganizowany.<\/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>W tym momencie powinni\u015bmy zacz\u0105\u0107 unika\u0107 class_exists w wi\u0119kszo\u015bci naszego kodu (z kilkoma wyj\u0105tkami, kt\u00f3re opisz\u0119 p\u00f3\u017aniej).<\/p>\n","protected":false},"author":1,"featured_media":166297,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,845,866],"tags":[1169],"class_list":["post-229014","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229014","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=229014"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229014\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/166297"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}