{"id":228968,"date":"2022-11-08T12:09:00","date_gmt":"2022-11-08T09:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228968"},"modified":"2022-11-09T05:00:04","modified_gmt":"2022-11-09T02:00:04","slug":"att-undvika-class_exists-i-objektorienterad-wordpress-kod","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/att-undvika-class_exists-i-objektorienterad-wordpress-kod\/","title":{"rendered":"Att undvika class_exists i objektorienterad WordPress-kod"},"content":{"rendered":"\n<p>Om du skriver objektorienterad kod f\u00f6r WordPress (vanligtvis inom ramen f\u00f6r plugins) kommer du sannolikt att st\u00f6ta p\u00e5 en class_exists-kontroll innan du initierar en klass. Men vi b\u00f6r b\u00f6rja undvika class_exists i mycket av v\u00e5r kod vid det h\u00e4r laget (med n\u00e5gra f\u00e5 undantag som jag kommer att beskriva nedan).<\/p>\n<p>Beroende p\u00e5 vilken version av PHP du anv\u00e4nder \u00e4r detta vettigt. Eller det gjorde det en g\u00e5ng. Fr\u00e5n och med PHP 5.3.0 \u00e4r detta inte n\u00f6dv\u00e4ndigt. Ist\u00e4llet \u00e4r det b\u00e4ttre att anv\u00e4nda namnutrymmen.<\/p>\n<h2>Att undvika klass_finns<\/h2>\n<p>Du kan se alla krav f\u00f6r olika versioner av WordPress p\u00e5 den <a href=\"https:\/\/codex.wordpress.org\/Template:Server_requirements\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">h\u00e4r sidan<\/a>, s\u00e5 om du arbetar med \u00e4ldre versioner av WordPress kan hela class_exists-kontrollen vara v\u00e4rt det.<\/p>\n<p>\u00c4nd\u00e5 <a href=\"https:\/\/wordpress.org\/about\/requirements\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">finns det en viktig anm\u00e4rkning<\/a> :<\/p>\n<blockquote>\n<p>Obs: Om du befinner dig i en \u00e4ldre milj\u00f6 d\u00e4r du bara har \u00e4ldre PHP- eller MySQL-versioner, fungerar WordPress \u00e4ven med PHP 5.2.4+ och MySQL 5.0+, men dessa versioner har n\u00e5tt officiellt End Of Life och <strong>kan d\u00e4rf\u00f6r uts\u00e4tta din webbplats f\u00f6r s\u00e4kerhetss\u00e5rbarheter<\/strong>.<\/p>\n<\/blockquote>\n<p>Men f\u00f6r de flesta av oss st\u00f6der moderna v\u00e4rdmilj\u00f6er \u00e5tminstone PHP 5.3.0, om inte h\u00f6gre, och p\u00e5 grund av det beh\u00f6ver vi inte anv\u00e4nda class_exists.<\/p>\n<p>Som sagt, det \u00e4r inte ovanligt att se n\u00e5got <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-00-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5nt h\u00e4r<\/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>Eller <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-01-class-exists-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/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>F\u00f6r flera \u00e5r sedan skulle jag ocks\u00e5 skriva s\u00e5dan h\u00e4r kod. Ibland var det gr\u00e4nssnitt med en redan existerande kodbas. Andra g\u00e5nger berodde det p\u00e5 att jag inte visste b\u00e4ttre. Grejen \u00e4r att detta har blivit n\u00e5got som vi ser i WordPress-baserad kod n\u00e4r vi inte beh\u00f6ver anv\u00e4nda det.<\/p>\n<p>Jag skulle faktiskt h\u00e4vda att vi inte borde anv\u00e4nda det l\u00e4ngre.<\/p>\n<p>Men ju mer kod du skriver och ju mer kod du l\u00e4ser, desto mer l\u00e4r du dig, eller hur? Det \u00e4r en del av hela anledningen till namnutrymmen och autoloading.<\/p>\n<\/p>\n<p>S\u00e5 hur skulle koden ovan skrivas?<\/p>\n<p>Kanske <a href=\"https:\/\/gist.github.com\/tommcfarlin\/445ea17547797672a2b8bdfc4fd607da#file-02-namespace-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TomMcFarlin;\n\nclass My_Unique_Class {\n  \/\/ class implementation\n}\n<\/code><\/pre>\n<p>\u00c4nd\u00e5 v\u00e4cker detta fr\u00e5gan f\u00f6r vissa: Hur hj\u00e4lper namnutrymmen ist\u00e4llet f\u00f6r att anv\u00e4nda class_exists?<\/p>\n<p>Helst, om samma klass finns inom ett namnomr\u00e5de, s\u00e5 finns det ett problem med namnomr\u00e5det. Kom ih\u00e5g att <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/namnutrymmen-och-autoladdning-i-wordpress\/\" title=\"du kan t\u00e4nka dig ett namnutrymme\">du kan t\u00e4nka dig ett namnutrymme<\/a> som ett paket som best\u00e5r av unika delar. Och eftersom de \u00e4r unika borde det aldrig finnas en annan pj\u00e4s eller, i den h\u00e4r klassen, en annan klass precis som den.<\/p>\n<p>F\u00f6r detta \u00e4ndam\u00e5l, ist\u00e4llet f\u00f6r att anv\u00e4nda klass_exists-kontroller, sikta p\u00e5 att anv\u00e4nda namnutrymmen. Naturligtvis s\u00e4ger jag inte g\u00e5 tillbaka och refaktorera all din kod \u2013 jag har inte gjort det \u2013 men det betyder inte att koden jag skriver eller granskar inkluderar anv\u00e4ndningen av eller rekommendationer f\u00f6r.<\/p>\n<p>Det \u00e4r en enkel f\u00f6r\u00e4ndring som kan r\u00e4cka l\u00e5ngt n\u00e4r det g\u00e4ller att h\u00e5lla koden l\u00e4ttare att l\u00e4sa, fylld med f\u00e4rre villkor (ett inl\u00e4gg f\u00f6r en annan g\u00e5ng) och att h\u00e5lla den mycket mer organiserad.<\/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>Vi b\u00f6r b\u00f6rja undvika class_exists i mycket av v\u00e5r kod vid det h\u00e4r laget (med n\u00e5gra f\u00e5 undantag som jag kommer att beskriva senare).<\/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":[848,724,868],"tags":[1173,1173],"class_list":["post-228968","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228968","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=228968"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228968\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/166297"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}