{"id":229185,"date":"2022-11-15T10:39:00","date_gmt":"2022-11-15T07:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229185"},"modified":"2022-11-15T10:43:18","modified_gmt":"2022-11-15T07:43:18","slug":"varfoer-bry-sig-om-automatisk-laddning-i-wordpress-del-3","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/varfoer-bry-sig-om-automatisk-laddning-i-wordpress-del-3\/","title":{"rendered":"Varf\u00f6r bry sig om automatisk laddning i WordPress, del 3"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/varfoer-bry-sig-om-automatisk-laddning-i-wordpress-del-2\/\" title=\"I f\u00f6rra inl\u00e4gget\">I f\u00f6rra inl\u00e4gget<\/a> sa jag att vi inte hade r\u00e5d med n\u00e5gra av samma lyx som statiskt skrivna, sammanst\u00e4llda spr\u00e5k har. Specifikt talade jag om id\u00e9n att inte beh\u00f6va hantera autoloaders.<\/p>\n<p>Ist\u00e4llet kan kompilerade spr\u00e5k ta alla filer som utg\u00f6r programmet, bearbeta dem och bunta ihop dem till en enda bin\u00e4r.<\/p>\n<p>Men f\u00f6r att g\u00f6ra det beh\u00f6ver det en specifik typ av program f\u00f6r att g\u00f6ra det.<\/p>\n<h2>Autoloading i WordPress: L\u00e4nkare och Autoloaders<\/h2>\n<p>Det vill s\u00e4ga att den anv\u00e4nder ett verktyg som kallas <a href=\"https:\/\/en.wikipedia.org\/wiki\/Linker_(computing)\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l\u00e4nk<\/a>. Jag kommer att t\u00e4cka det kort f\u00f6r en stund, men att se vilken roll det spelar i sammanhanget med kompilerade spr\u00e5k kan hj\u00e4lpa till att dra en analogi med hur autoladdning i WordPress (och PHP) fungerar.<\/p>\n<h3>Vad \u00e4r en l\u00e4nkare?<\/h3>\n<p>Beroende p\u00e5 vilket spr\u00e5k du arbetar med, s\u00e4rskilt med objektorienterade programmeringsspr\u00e5k, \u00e4r det troligt att koden kommer att spridas \u00f6ver flera filer.<\/p>\n<p>Vidare kommer var och en av dessa filer att paketeras i sina paket (vi h\u00e4nvisar till dessa som namnutrymmen som PHP, och de flesta kompilerade spr\u00e5k g\u00f6r detsamma ocks\u00e5). S\u00e5, f\u00f6r demonstrations\u00e4ndam\u00e5l, anta att filerna ing\u00e5r i deras namnrymder.<\/p>\n<p>Sedan, genom hela kodbasen, har du alla dessa filer som \u00e4r relaterade via namnutrymmen men spridda \u00f6ver separata filer.<\/p>\n<p>N\u00e4r det \u00e4r dags att kompilera allt detta till en enda, k\u00f6rbar bin\u00e4r, analyserar ett program som kallas l\u00e4nkar koden och g\u00f6r det magiskt f\u00f6r att hj\u00e4lpa till att skapa en enda, k\u00f6rbar bin\u00e4r (mot en samling filer som vi \u00e4r vana vid att se i PHP-baserade projekt).<\/p>\n<h3>Och autoloading?<\/h3>\n<p>S\u00e5 vad \u00e4r likheterna mellan autoloading och l\u00e4nkning? Som n\u00e4mnts ligger projekten som vi bygger i WordPress (och PHP) konsekvent i separata filer. Det vill s\u00e4ga, de kommer aldrig att kompileras till en fil.<\/p>\n<p>Jag skulle s\u00e4ga en g\u00e5ng i tiden (\u00e4ven om detta fortfarande h\u00e4nder) anv\u00e4nder vi <a href=\"https:\/\/php.net\/manual\/en\/function.include-once.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">include_once<\/a> eller <a href=\"https:\/\/php.net\/manual\/en\/function.require-once.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">require_once<\/a> f\u00f6r att f\u00e5 in alla beroenden som vi beh\u00f6ver. Men automatisk laddning f\u00f6rnekar behovet av att g\u00f6ra detta.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165652-61e7858e62d47.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-165652-61e7858e62d47.jpg\" alt=\"Varf\u00f6r bry sig om automatisk laddning i WordPress, del 3\"><\/a><\/p>\n<p>Skriva en autoloader manuellt (utan att anv\u00e4nda PSR4).<\/p>\n<p>Ist\u00e4llet kan en autoloader ta koden som vi har n\u00e4r vi, till exempel, instansierar en klass och sedan automatiskt ladda (d\u00e4rav dess namn) filen utan att beh\u00f6va inkludera filen manuellt.<\/p>\n<h3>Analogin<\/h3>\n<p>Medan en l\u00e4nkare kommer att analysera kodbasen f\u00f6r ett program och automatiskt s\u00e4tta ihop bin\u00e4ren, kommer en autoloader att beh\u00f6va n\u00e5gon typ av konfiguration f\u00f6r att l\u00e5ta den veta var klasserna \u00e4r, hur man lokaliserar en fil i filsystemet givet dess namnomr\u00e5de och klassnamn, och s\u00e5 vidare.<\/p>\n<p>Vidare finns det olika s\u00e4tt detta kan g\u00f6ras beroende p\u00e5 om du v\u00e4ljer att anv\u00e4nda n\u00e5got som <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a> eller en annan laddningsstrategi. Men det ligger utanf\u00f6r ramen f\u00f6r detta inl\u00e4gg.<\/p>\n<h2>Det \u00e4r allt<\/h2>\n<p>Tanken bakom allt detta \u00e4r att f\u00f6rst\u00e5 hur statiskt typade spr\u00e5k, som ofta \u2013 men inte alltid \u2013 \u00e4r kompilerade spr\u00e5k och hur dynamiskt typade \u2013 som ofta inte \u00e4r kompilerade (t\u00e4nk JavaScript, PHP, etc.) \u2013 kan fungera p\u00e5 liknande, om \u00e4n olika s\u00e4tt.<\/p>\n<p>Kortfattat:<\/p>\n<ul>\n<li>kompilerade spr\u00e5k anv\u00e4nder l\u00e4nkar,<\/li>\n<li>dynamiska spr\u00e5k anv\u00e4nder autoloaders.<\/li>\n<\/ul>\n<p>Och det \u00e4r allt som finns, egentligen.<\/p>\n<p>Men varf\u00f6r \u00e4r detta viktigt? F\u00f6r att f\u00f6rst\u00e5 f\u00f6rdelarna med automatisk laddning i WordPress och f\u00f6r att ha en grund f\u00f6r mer avancerade \u00e4mnen tycker jag att det \u00e4r viktigt att f\u00f6rst\u00e5 hur och varf\u00f6r vi g\u00f6r vissa saker vi g\u00f6r.<\/p>\n<p>Och om inte annat kan det hj\u00e4lpa oss att bli b\u00e4ttre utvecklare.<\/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>L\u00e4nkar skiljer sig inte helt fr\u00e5n autoloading i WordPress (och PHP). H\u00e4r \u00e4r hur de fungerar och varf\u00f6r det hj\u00e4lper att f\u00f6rst\u00e5 hur de fungerar.<\/p>\n","protected":false},"author":1,"featured_media":223872,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,724,868],"tags":[1173],"class_list":["post-229185","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\/229185","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=229185"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229185\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/223872"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}