{"id":229171,"date":"2022-11-14T12:31:00","date_gmt":"2022-11-14T09:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229171"},"modified":"2022-11-14T12:33:45","modified_gmt":"2022-11-14T09:33:45","slug":"varfoer-bry-sig-om-automatisk-laddning-i-wordpress-del-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/varfoer-bry-sig-om-automatisk-laddning-i-wordpress-del-1\/","title":{"rendered":"Varf\u00f6r bry sig om automatisk laddning i WordPress, del 1"},"content":{"rendered":"\n<p>En av de enklaste sakerna som vi kan g\u00f6ra n\u00e4r vi arbetar med WordPress-plugins \u00e4r att sl\u00e4ppa <strong>require_once<\/strong> eller <strong>include_once-<\/strong> satser i hela v\u00e5r kod.<\/p>\n<p>Och varf\u00f6r inte? Det \u00e4r ett enkelt s\u00e4tt att ta in alla n\u00f6dv\u00e4ndiga filer eller beroenden f\u00f6r en viss klass, ha det l\u00e4tt att l\u00e4sa och inte beh\u00f6va oroa sig f\u00f6r att skapa enorma filer med kod. Det vill s\u00e4ga, det hj\u00e4lper oss att f\u00f6renkla det vi skriver s\u00e5 att vi kan f\u00e5 v\u00e5ra klasser [oftast eller helst] att g\u00f6ra det de g\u00f6r bra.<\/p>\n<p>Men om du har l\u00e4st den h\u00e4r sidan under det senaste \u00e5ret eller s\u00e5, vet du att jag \u00e4r ett fan av autoloading och det \u00e4r n\u00e5got som jag tror att alla som arbetar med PHP \u2013 oavsett om du anv\u00e4nder WordPress eller annan plattform \u2013 borde anv\u00e4nda sig av.<\/p>\n<p>Men det v\u00e4cker tv\u00e5 fr\u00e5gor, s\u00e4rskilt om du precis har b\u00f6rjat:<\/p>\n<ol>\n<li>Varf\u00f6r bry sig om autoloading n\u00e4r det finns andra s\u00e4tt att hantera laddningsberoenden?<\/li>\n<li>Hur fungerar autoloading mot kompilerade spr\u00e5k?<\/li>\n<\/ol>\n<p>S\u00e5 jag t\u00e4nkte att det skulle vara v\u00e4rt att svara p\u00e5 detta i de kommande inl\u00e4ggen.<\/p>\n<h2>Varf\u00f6r bry sig om autoloading?<\/h2>\n<p>Det korta \u00e4r detta:<\/p>\n<ol>\n<li><strong>require_once<\/strong> och <strong>include_once<\/strong> kan leda till kod som \u00e4r sv\u00e5r att fels\u00f6ka,<\/li>\n<li>det \u00e4r sv\u00e5rt att sp\u00e5ra kod.<\/li>\n<\/ol>\n<p>Men hur s\u00e5?<\/p>\n<h3>1 Fels\u00f6kning \u00e4r sv\u00e5rt<\/h3>\n<p>N\u00e4r du skriver kod, om n\u00e5got \u00e4r s\u00e4kert, \u00e4r det att det kommer att finnas n\u00e5got som inte fungerar som det \u00e4r t\u00e4nkt. Det ligger i naturen av vad vi g\u00f6r, eller hur?<\/p>\n<p>S\u00e5 n\u00e4r det \u00e4r dags att fels\u00f6ka kod har vi alla v\u00e5ra strategier.<\/p>\n<ul>\n<li>n\u00e5gra av oss v\u00e4ljer att anv\u00e4nda <strong>echo<\/strong> eller <strong>var_dump<\/strong> f\u00f6r att sp\u00e5ra kod,<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/debug-bar-console\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">anv\u00e4nda ett plugin<\/a> i WordPress,<\/li>\n<li>andra anv\u00e4nder en debugger.<\/li>\n<\/ul>\n<p>\u00c4ven om det h\u00e4r inl\u00e4gget inte handlar om hur man fels\u00f6ker \u00e4r det faktum att vi m\u00e5ste fels\u00f6ka. S\u00e5 om vi vet att vi kommer att beh\u00f6va g\u00f6ra det, borde vi inte g\u00f6ra det s\u00e5 l\u00e4tt f\u00f6r oss sj\u00e4lva som m\u00f6jligt?<\/p>\n<p>PHP \u00e4r ett dynamiskt skrivet spr\u00e5k, s\u00e5 det finns en hel del saker, i allm\u00e4nhet, som tas om hand f\u00f6r oss n\u00e4r vi skriver koden. Det vill s\u00e4ga vissa saker antas eller tvingas fram n\u00e4r koden k\u00f6rs.<\/p>\n<p>Anta till exempel att du arbetar med en str\u00e4ng och att du j\u00e4mf\u00f6r den med ett tal. Tolken kommer att g\u00f6ra vad den kan f\u00f6r att gissa vad det \u00e4r du g\u00f6r (t\u00e4nker du analysera str\u00e4ngen till ett heltal eller vice versa?) och sedan arbeta med det.<\/p>\n<p>Att enbart arbeta med variabler kan vara en \u00f6vning i precision eftersom vi vill att v\u00e5r kod ska l\u00e4sas som vi har f\u00f6r avsikt. Varf\u00f6r \u00f6verl\u00e5ta det till tolken att gissa vad det \u00e4r vi menar? Och om tolken m\u00e5ste g\u00f6ra extra arbete s\u00e5 g\u00f6r m\u00e4nniskor det verkligen.<\/p>\n<p>F\u00f6r det \u00e4ndam\u00e5let, om vi vet att buggar kommer att introduceras och vi vet att det finns s\u00e4tt att skriva renare kod, varf\u00f6r skulle vi inte g\u00f6ra det?<\/p>\n<h3>2 Sp\u00e5rning \u00e4r sv\u00e5rt (eller kanske sv\u00e5rare?)<\/h3>\n<p>Men detta ger fortfarande ingen anledning till varf\u00f6r vi ska f\u00f6rlita oss p\u00e5 n\u00e5got som en autoloader kontra inbyggda funktioner i spr\u00e5ket, eller hur?<\/p>\n<p>T\u00e4nk p\u00e5 detta: S\u00e4g att du letar igenom en fil som f\u00f6rs\u00f6ker hitta en bugg och du st\u00f6ter p\u00e5 en funktion som har n\u00e5gon kod, anv\u00e4nder <strong>include_once<\/strong> och sedan anv\u00e4nder n\u00e5gon annan kod.<\/p>\n<p>Det betyder att du m\u00e5ste l\u00e4sa koden, beh\u00e5lla den mentalt, hoppa in i en annan fil, f\u00f6rst\u00e5 den koden och sedan \u00e5terg\u00e5 till den ursprungliga filen. Och detta f\u00f6ruts\u00e4tter att den andra filen inte heller <strong>inneh\u00e5ller<\/strong> eller <strong>kr\u00e4ver<\/strong> andra filer.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165694-61e786c8874b7.jpg\" 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-165694-61e786c8874b7.jpg\" alt=\"Varf\u00f6r bry sig om automatisk laddning i WordPress, del 1\"><\/a><\/p>\n<p>Det kallas spagettikod av en anledning.<\/p>\n<p>Med det sagt kan du se den problematik som detta introducerar n\u00e4r du v\u00e4ljer att kapsla den h\u00e4r koden under resten av ditt program. Kort sagt, du har n\u00e4stlat inkluderingen av beroenden vilket i sig g\u00f6r det sv\u00e5rare att sp\u00e5ra var n\u00e5got kan g\u00e5 fel.<\/p>\n<p>Detta \u00e4r inte att s\u00e4ga att autoloading automatiskt fixar detta, men det \u00e4r att s\u00e4ga att det inte beh\u00f6ver vara s\u00e5 h\u00e4r. Ist\u00e4llet kan du skriva kod som instansierar klasser, anropar metoder och sedan exekverar kod utan att beh\u00f6va inkludera n\u00e5got manuellt.<\/p>\n<h3>Mer l\u00e4sbar, sp\u00e5rbar kod<\/h3>\n<p>N\u00e4r jag g\u00f6r detta tycker jag att det tvingar oss att skriva renare kod, utan tvekan mer underh\u00e5llbar kod. Det g\u00f6r det ocks\u00e5 l\u00e4ttare att skriva kod som vi l\u00e4ttare kan sp\u00e5ra, och det \u00e4r l\u00e4ttare att utnyttja med en debugger.<\/p>\n<p>Det vill s\u00e4ga, vi kan st\u00e4lla in brytpunkter p\u00e5 vissa st\u00e4llen i v\u00e5r kod, l\u00e5ta fels\u00f6karen automatiskt ta oss in i klassen som anropas och g\u00e5 tillbaka ut i funktionen som anropade den.<\/p>\n<p>Det betyder inte att det inte kan g\u00f6ras p\u00e5 n\u00e5got annat s\u00e4tt, men f\u00f6rdelarna \u00f6verv\u00e4ger vida alternativen. Och naturligtvis l\u00e4mnar detta fortfarande fr\u00e5gan om varf\u00f6r autoloading (eller n\u00e5gon inkludering av tredjepartsfiler) \u00f6verhuvudtaget beh\u00f6vs.<\/p>\n<p>Men det \u00e4r vad som kommer att tas upp i den andra delen av serien.<\/p>\n<h2>Annan l\u00e4sning<\/h2>\n<p>Mitt inl\u00e4gg om <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/namnutrymmen-och-autoladdning-i-wordpress\/\" title=\"Namespaces och Autoloading i WordPress\">Namespaces och Autoloading i WordPress<\/a>, samt <a href=\"https:\/\/github.com\/tommcfarlin\/simple-autoloader-for-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Simple Autoloader f\u00f6r WordPress,<\/a> \u00e4r tv\u00e5 andra resurser som jag uppenbarligen finner relaterade till just detta inl\u00e4gg. S\u00e5 om du har tid, kolla in dem (och tveka inte att \u00f6ppna ett problem eller en pull-f\u00f6rfr\u00e5gan p\u00e5 det enkla autoloader-projektet).<\/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>Jag har pratat om och skrivit om autoloading i WordPress tidigare, men jag tycker fortfarande att f\u00f6rdelarna med autoloading hj\u00e4lper till att skriva organiserad, sp\u00e5rbar kod.<\/p>\n","protected":false},"author":1,"featured_media":165695,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,901,724],"tags":[1173],"class_list":["post-229171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229171","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=229171"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/165695"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}