{"id":228991,"date":"2022-11-08T17:59:00","date_gmt":"2022-11-08T14:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228991"},"modified":"2022-11-09T05:05:58","modified_gmt":"2022-11-09T02:05:58","slug":"grundlaeggande-kodningsstandarder-via-psr-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/grundlaeggande-kodningsstandarder-via-psr-1\/","title":{"rendered":"Grundl\u00e4ggande kodningsstandarder via PSR-1"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/anvaenda-psr-erna-versus-wordpress-kodningsstandarderna\/\" title=\"Ig\u00e5r\" >Ig\u00e5r<\/a> pratade jag kort om en motivering f\u00f6r att anv\u00e4nda <a href=\"http:\/\/www.php-fig.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSRs<\/a> kontra <a href=\"https:\/\/codex.wordpress.org\/WordPress_Coding_Standards\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress-kodningsstandarderna<\/a> och n\u00e4r och varf\u00f6r f\u00f6r b\u00e5da. Men det betyder inte att det inte \u00e4r utan dess f\u00f6rvirringspunkter, s\u00e4rskilt om du bara b\u00f6rjar med dem, eller hur?<\/p>\n<p>Med det menar jag: S\u00e4g att du har arbetat med WordPress-kodningsstandarderna i \u00e5ratal (eftersom jag kan relatera) och nu finns det en helt ny upps\u00e4ttning regler och riktlinjer att f\u00f6lja. Men det \u00e4r inte som en enkel fr\u00e5ga att \u00e4ndra lite blanksteg och byta namn p\u00e5 filer.<\/p>\n<p>Det finns andra punkter att f\u00f6lja, och var och en beskrivs i ett antal, helt bokstavligen (PSR-1, PSR-2, och s\u00e5 vidare), av hur n\u00e5got ska fungera.<\/p>\n<p>S\u00e5 n\u00e4r det g\u00e4ller bara de grundl\u00e4ggande kodningsstandarderna som beskrivs i PSR-1, vilka \u00e4r n\u00e5gra problematiska omr\u00e5den som vi kan st\u00f6ta p\u00e5 som WordPress-utvecklare?<\/p>\n<h2>Grundl\u00e4ggande kodningsstandarder (och biverkningar)<\/h2>\n<p>Jag har inga planer p\u00e5 att g\u00e5 igenom vart och ett av dokumenten och \u00e5terskapa vad vi redan kan l\u00e4ra oss genom att bara <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l\u00e4sa dem<\/a>, men jag tror att det finns n\u00e5got att s\u00e4ga f\u00f6r att ta n\u00e5got som m\u00e5nga av oss antingen g\u00f6r eller upplever och se hur detta kan f\u00f6r\u00e4ndras inom sammanhanget f\u00f6r WordPress.<\/p>\n<p>Ta <strong>biverkningar<\/strong> fr\u00e5n Basic Coding Standard (eller <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-1<\/a> ), till exempel:<\/p>\n<blockquote>\n<p>En fil SKA deklarera nya symboler (klasser, funktioner, konstanter, etc.) och inte orsaka n\u00e5gra andra biverkningar, eller s\u00e5 SKA den k\u00f6ra logik med biverkningar, men SKA INTE g\u00f6ra b\u00e5da.<\/p>\n<p>Frasen &quot;biverkningar&quot; betyder exekvering av logik som inte \u00e4r direkt relaterad till att deklarera klasser, funktioner, konstanter, etc., bara fr\u00e5n att inkludera filen.<\/p>\n<\/blockquote>\n<p>Personligen tycker jag att den andra frasen \u00e4r nyckeln till att f\u00f6rst\u00e5 och undvika biverkningar i v\u00e5r kod s\u00e5 mycket som m\u00f6jligt. Det vill s\u00e4ga, allt som v\u00e5ra klasser g\u00f6r ska vara frist\u00e5ende eller vara sammanh\u00e4ngande med n\u00e5got som kan ha injicerats p\u00e5 n\u00e5got s\u00e4tt.<\/p>\n<p>Oavsett vilket borde det inte vara s\u00e5 sv\u00e5rt att hitta kod som introducerar en bieffekt och rensa upp den. Jag ska faktiskt anv\u00e4nda mig sj\u00e4lv som ett exempel.<\/p>\n<p>Titta p\u00e5 denna speciella <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f9de10bd98d0ba3dd22c914b01fad140#file-00-toggle-admin-notices-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kodbit<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TAN;\nuse TANAdmin;\n\ninclude_once( 'admin\/class-toggle-admin-notices-node.php' );\ninclude_once( 'admin\/interfaces\/interface-asset.php' );\ninclude_once( 'admin\/class-javascript-assets.php' );\n\nadd_action( 'plugins_loaded', __NAMESPACE__. 'tan_start' );\n\/**\n * Initializes the JavaScript loader and the Administration Bar Node for\n * rendering the option to toggle admin notices.\n *\/\nfunction tan_start() {\n  \/\/ Code removed for brevity.\n}\n<\/code><\/pre>\n<p>Den h\u00e4r koden kommer direkt fr\u00e5n <a href=\"https:\/\/tommcfarlin.com\/wordpress-admin-notices\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Toggle Admin Notices<\/a>. Visst, det \u00e4r enkelt, och <a href=\"https:\/\/github.com\/tommcfarlin\/toggle-admin-notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">f\u00f6rvaret<\/a> visar en anteckning om hur man \u00e4ndrar det. Det visar \u00e4nd\u00e5 po\u00e4ngen, eller hur?<\/p>\n<p>Vad \u00e4r l\u00f6sningen? Detta kommer i form av Autoloading (som ocks\u00e5 t\u00e4cks av <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a> ). S\u00e5 t\u00e4nk om jag skulle refaktorera den, s\u00e5 den f\u00f6ljde PSR-1 ordentligt? Sedan kan ett s\u00e4tt att omstrukturera det <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f9de10bd98d0ba3dd22c914b01fad140#file-01-toggle-admin-notices-autoloading-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">se ut s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace TAN;\nuse TANAdmin;\n\ninclude_once 'inc\/autoload.php';\n\nadd_action( 'plugins_loaded', __NAMESPACE__. 'tan_start' );\n\/**\n * Initializes the JavaScript loader and the Administration Bar Node for\n * rendering the option to toggle admin notices.\n *\/\nfunction tan_start() {\n  \/\/ Code removed for brevity.\n}\n<\/code><\/pre>\n<p>\u00c4r detta ett bra exempel? Antagligen inte. Men det handlar om mer \u00e4n att bara inkludera filer. Inklusive dessa filer \u00e4r att f\u00e5 denna enda fil att introducera en m\u00e4ngd olika biverkningar.<\/p>\n<p>Det betyder att bara den h\u00e4r filen \u00e4r ansvarig f\u00f6r att g\u00f6ra mycket mer \u00e4n bara de fyra raderna kod. Se det som att det inneh\u00e5ller allt som andra filer implementerar. Det blir mer komplext d\u00e5.<\/p>\n<p>S\u00e5 ta den id\u00e9n och flytta den till ett mycket st\u00f6rre system s\u00e5 kan du se hur och varf\u00f6r detta skulle vara problematiskt.<\/p>\n<p>Naturligtvis finns det alternativa s\u00e4tt ocks\u00e5. Och detta \u00e4r bara ett exempel. Sj\u00e4lvf\u00f6raktande ocks\u00e5. Po\u00e4ngen handlar inte s\u00e5 mycket om att visa ett definitivt s\u00e4tt att g\u00f6ra detta utan att b\u00f6rja skapa tankar f\u00f6r hur vi designar, planerar, bygger och integrerar klasser.<\/p>\n<h3>Vad s\u00e4gs om vyer?<\/h3>\n<p>N\u00e4r det kommer till att skriva plugins, \u00e4r jag partisk med att behandla vad anv\u00e4ndare kommer att se som <strong>vyer.\u00a0<\/strong>Men det verkar finnas en hake h\u00e4r: Det anses vara en d\u00e5lig praxis att inkludera filer eftersom det introducerar biverkningar.<\/p>\n<p>S\u00e5 vi vill inte mata ut logik i v\u00e5ra klasser, utan vi vill ocks\u00e5 skilja presentation fr\u00e5n aff\u00e4rslogik.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166223-61e7906a0bf19.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166223-61e7906a0bf19.png\" alt=\"Grundl\u00e4ggande kodningsstandarder via PSR-1\" ><\/a><\/p>\n<p>Vad ska vi g\u00f6ra?<\/p>\n<blockquote>\n<p>Tvisten \u2026 \u00e4r att vi kommer att anv\u00e4nda objektorienterad programmering f\u00f6r att g\u00f6ra det. Vi kommer att designa en klass som genererar HTML med hj\u00e4lp av PHP-mall.<\/p>\n<\/blockquote>\n<p>Detta har behandlats p\u00e5 djupet <a href=\"https:\/\/carlalexander.ca\/designing-class-generate-wordpress-html-content\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">av n\u00e5gon annan<\/a>, och jag rekommenderar starkt att du l\u00e4ser just det inl\u00e4gget f\u00f6r att ta tanken p\u00e5 biverkningar, undvika dem och inf\u00f6rliva fasta metoder s\u00e5 mycket som m\u00f6jligt.<\/p>\n<h2>\u2026Och tillg\u00e5ngar och relaterade filer?<\/h2>\n<p>Jag vet: Tanken p\u00e5 att g\u00e5 bort fr\u00e5n biverkningar (l\u00e5t vara att identifiera dem) kan vara konstig i b\u00f6rjan, speciellt n\u00e4r du t\u00e4nker p\u00e5 vissa saker vi har gjort s\u00e5 l\u00e4nge.<\/p>\n<p>Och det kan v\u00e4cka fr\u00e5gor som: \u00c4r det fel att inkludera JavaScript-filer eller CSS-filer? Det \u00e4r nog ett \u00e4mne f\u00f6r ett annat inl\u00e4gg. Kom dock ih\u00e5g att det finns k\u00e4rn-API-funktioner som \u00e4r direkt relaterade till det, och de kan vara en del av en klass som \u00e4r strikt ansvarig f\u00f6r att g\u00f6ra det.<\/p>\n<p>Om en klasss syfte \u00e4r att g\u00f6ra exakt det och bara det och den anv\u00e4nder API-funktioner f\u00f6r att g\u00f6ra det, s\u00e5 skulle jag s\u00e4ga att det troligen \u00e4r okej.<\/p>\n<p>Men jag avviker fr\u00e5n det f\u00f6r nu (och kanske \u00e4r det ett \u00e4mne f\u00f6r kommentarerna eller, \u00e5terigen, ett annat inl\u00e4gg).<\/p>\n<p>H\u00e5ll ist\u00e4llet dina klasser smala och m\u00e5lmedvetna. De b\u00f6r g\u00f6ra som <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-1<\/a> s\u00e4ger och undvika att g\u00f6ra saker som att &quot;[deklarera] nya klasser, funktioner, konstanter, etc.&quot; och &quot;[utf\u00f6ra] logik med biverkningar.&quot;<\/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>H\u00e5ll dina klasser m\u00e5lmedvetna. Undvik saker som att &#8221;[deklarera] nya klasser, funktioner, konstanter, etc.&#8221; och &#8221;[utf\u00f6r] logik med biverkningar.&#8221;<\/p>\n","protected":false},"author":1,"featured_media":166224,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[724],"tags":[1173],"class_list":["post-228991","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228991","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=228991"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228991\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/166224"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}