{"id":230193,"date":"2022-12-04T09:44:00","date_gmt":"2022-12-04T06:44:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230193"},"modified":"2022-12-04T17:30:41","modified_gmt":"2022-12-04T14:30:41","slug":"laesa-och-foerstaa-wordpress-felloggar-del-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/laesa-och-foerstaa-wordpress-felloggar-del-2\/","title":{"rendered":"L\u00e4sa och f\u00f6rst\u00e5 WordPress-felloggar, del 2"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/laesa-och-foerstaa-wordpress-felloggar-del-1\/\" title=\"F\u00f6rra g\u00e5ngen\">F\u00f6rra g\u00e5ngen<\/a><\/strong> gick vi igenom f\u00f6ljande:<\/p>\n<ol>\n<li>konfigurera fels\u00f6kningskonstanter,<\/li>\n<li>hitta en felloggfil,<\/li>\n<li>f\u00f6rst\u00e5 hur man l\u00e4ser loggfilen,<\/li>\n<li>f\u00f6rst\u00e5 stacksp\u00e5r<\/li>\n<li>f\u00f6rst\u00e5 hur man l\u00e4ser stacken<\/li>\n<\/ol>\n<p>Hur trevligt det \u00e4n \u00e4r, det \u00e4r fortfarande viktigt att f\u00f6rst\u00e5 hur man skriver data till fellogg ur en programmatisk aspekt. Det vill s\u00e4ga; det \u00e4r en sak om ditt arbete ger fel, varningar eller meddelanden.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162973-61e747bcebed4.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-162973-61e747bcebed4.png\" alt=\"L\u00e4sa och f\u00f6rst\u00e5 WordPress-felloggar, del 2\"><\/a><\/p>\n<p>Det \u00e4r en annan sak om du vill f\u00f6rst\u00e5 hur man skriver information till filen f\u00f6r forskning och fels\u00f6kning manuellt.<\/p>\n<p>I det h\u00e4r inl\u00e4gget kommer vi att forts\u00e4tta att g\u00f6ra exakt det f\u00f6r att f\u00f6rb\u00e4ttra v\u00e5r f\u00f6rst\u00e5else f\u00f6r WordPress-felloggar.<\/p>\n<h2>F\u00f6rst\u00e5 WordPress-felloggar, del 2<\/h2>\n<p>Vad \u00e4r po\u00e4ngen med att skriva till felloggen? Jag menar, \u00e4r det ens en del av fels\u00f6kningsprocessen?<\/p>\n<p>Fr\u00e5n <strong><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/laesa-och-foerstaa-wordpress-felloggar-del-1\/\" title=\"f\u00f6rra inl\u00e4gget\">f\u00f6rra inl\u00e4gget<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Men hur \u00e4r det med fallet n\u00e4r vi vill dumpa n\u00e5got f\u00f6r att f\u00e5 insikt om vad WordPress eller PHP ser? Det \u00e4r ocks\u00e5 anv\u00e4ndbart.<\/p>\n<\/blockquote>\n<p>N\u00e4r programmerare t\u00e4nker p\u00e5 fels\u00f6kning, t\u00e4nker m\u00e5nga av dem p\u00e5 att anv\u00e4nda en verklig debugger (det vill s\u00e4ga en mjukvara), st\u00e4lla in brytpunkter och g\u00e5 igenom koden f\u00f6r att se v\u00e4rdet p\u00e5 variabler n\u00e4r programmet k\u00f6rs.<\/p>\n<p>Vi kommer att komma till den punkten men innan vi g\u00f6r det, l\u00e5t oss ta en titt p\u00e5 hur vi sj\u00e4lva kan skriva till felloggen f\u00f6r att ge oss insikt om hur v\u00e5rt arbete fungerar.<\/p>\n<p>N\u00e4r allt kommer omkring \u00e4r det en sak om v\u00e5rt arbete \u00e4r att kasta varningar, fel och meddelanden. Det \u00e4r en annan om det finns information som vi vill se. Och det \u00e4r d\u00e4r att skriva till felloggen kommer in i bilden.<\/p>\n<h3>F\u00f6rst\u00e5 PHP-funktioner<\/h3>\n<p>F\u00f6r att skriva till felloggen \u00e4r det viktigt att f\u00f6rst\u00e5 tv\u00e5 PHP-funktioner:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/secure.php.net\/manual\/en\/function.error-log.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">felloggen<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/secure.php.net\/manual\/en\/function.print-r.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">print_r<\/a><\/strong><\/li>\n<\/ol>\n<p>N\u00e4r det g\u00e4ller funktionen error_log, notera att dess syfte \u00e4r att:<\/p>\n<blockquote>\n<p>Skicka ett felmeddelande till de definierade felhanteringsrutinerna<\/p>\n<\/blockquote>\n<p>I de flesta fall \u00e4r detta konfigurerat f\u00f6r att skriva till loggfilen f\u00f6r oss via standardkonfigurationen f\u00f6r WordPress och PHP. Men det finns mer \u00e4n s\u00e5 eftersom vi ofta kommer att vilja mata ut v\u00e4rden f\u00f6r variabler, arrayer, objekt och s\u00e5 vidare.<\/p>\n<p>F\u00f6r detta \u00e4ndam\u00e5l m\u00e5ste du kunna anv\u00e4nda <strong>print_r<\/strong> tillsammans med <strong>error_log<\/strong>. <strong>print_r<\/strong> g\u00f6r f\u00f6ljande:<\/p>\n<blockquote>\n<p>Skriver ut l\u00e4sbar information om en variabel<\/p>\n<\/blockquote>\n<p>Och om du l\u00e4ser manualen kommer du att m\u00e4rka att det kr\u00e4vs tv\u00e5 argument, varav det andra ska vara satt till <strong>sant<\/strong> om du vill att resultatet av en funktion ska skrivas ut till loggfilen.<\/p>\n<p>Specifikt, som manualen s\u00e4ger:<\/p>\n<blockquote>\n<p>Om du vill f\u00e5nga utdata fr\u00e5n <strong>print_r()<\/strong>, anv\u00e4nd <code>return<\/code>parametern. N\u00e4r denna parameter \u00e4r inst\u00e4lld p\u00e5 <strong><code>TRUE<\/code><\/strong>kommer <strong>print_r()<\/strong> att returnera informationen ist\u00e4llet f\u00f6r att skriva ut den.<\/p>\n<\/blockquote>\n<p>S\u00e5 den allm\u00e4nna id\u00e9n att skriva v\u00e4rdet p\u00e5 en array, s\u00e4g $exampleArray, skulle se ut ungef\u00e4r <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-13-error-log-print-r-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\nerror_log(print_r($exampleArray, true));<\/code><\/pre>\n<p>Men hur \u00e4r det med WordPress?<\/p>\n<h3>Skriva v\u00e4rden till felloggen i WordPress<\/h3>\n<p>S\u00e5 ovanst\u00e5ende skisserar de funktioner som \u00e4r inbyggda i PHP som vi beh\u00f6ver, men hur ser detta ut i samband med WordPress-utveckling.<\/p>\n<p>F\u00f6r att g\u00f6ra detta, l\u00e5t oss s\u00e4ga att vi har implementerat en version av <strong><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/anvaenda-registermoenstret-i-wordpress\/\" title=\"Registry Pattern\">Registry Pattern<\/a><\/strong>. I v\u00e5r implementering av m\u00f6nstret har vi ocks\u00e5 en metod som heter <strong>start<\/strong> som vi kan anropa n\u00e4r alla v\u00e5ra objekt har lagts till i registret.<\/p>\n<p>Det kan se ut ungef\u00e4r <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-14-start-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/**\n * Starts all of the objects stored is the registry by calling\n * the `start` method that's available on each of the objects.\n *\/\npublic function start()\n{\n    foreach ($this-&gt;storage as $obj) {\n        $obj-&gt;start();\n    }\n}<\/code><\/pre>\n<p>Nu n\u00e4r det g\u00e4ller implementeringen \u00e4r detta okomplicerat. Men t\u00e4nk om vi vill se vilka objekt som anropas via varje iteration av loopen.<\/p>\n<p>Tanken bakom detta \u00e4r att vi kan iterera genom de lagrade objekten och anropa en metod f\u00f6r vart och ett av dem. Detta bygger p\u00e5 id\u00e9n att vart och ett av objekten har en metod tillg\u00e4nglig p\u00e5 vart och ett av dem (som kan genomdrivas av ett <strong><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/objektorienterad-programmering-foerstaa-graenssnitt\/\" title=\"gr\u00e4nssnitt\">gr\u00e4nssnitt<\/a><\/strong> ).<\/p>\n<p>F\u00f6r det f\u00f6rsta v\u00e4cker detta en fr\u00e5ga: Varf\u00f6r kan vi vilja g\u00f6ra det? P\u00e5 grund av naturen hos WordPress evenemangshanteringssystem vill vi kanske se till att varje objekt som vi f\u00f6rv\u00e4ntar oss att skjuta avfyrar.<\/p>\n<p>F\u00f6r det andra, hur kan vi se vilka objekt som anropas? Det \u00e4r h\u00e4r att skriva till felloggen kommer in i bilden. Med hj\u00e4lp av metoderna som vi har beskrivit ovan skulle ett s\u00e4tt att g\u00f6ra det vara att g\u00f6ra <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-15-view-stored-objects-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">f\u00f6ljande<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Starts all of the objects stored is the registry by calling\n * the `start` method that's available on each of the objects.\n *\/\npublic function start()\n{\n    foreach ($this-&gt;storage as $obj) {\n        error_log(print_r($obj, true));\n        $obj-&gt;start();\n    }\n}<\/code><\/pre>\n<p>Detta kommer att resultera i f\u00f6ljande utdata:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162973-61e747c0a5923.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-162973-61e747c0a5923.png\" alt=\"L\u00e4sa och f\u00f6rst\u00e5 WordPress-felloggar, del 2\"><\/a><\/p>\n<p>H\u00e4r kan du se objektet; det \u00e4r namnutrymme, det \u00e4r egenskapsv\u00e4rden (inklusive om fastigheterna \u00e4r privata, skyddade, offentliga och s\u00e5 vidare).<\/p>\n<p>D\u00e4rifr\u00e5n kan du sedan g\u00f6ra lite fels\u00f6kning om utdata \u00e4r vad du inte f\u00f6rv\u00e4ntade dig eller kanske du kan anv\u00e4nda detta f\u00f6r att verifiera att din kod g\u00f6r vad du f\u00f6rv\u00e4ntar dig.<\/p>\n<p>Detta \u00e4r dock bara ett exempel. Du kan dock dumpa v\u00e4rdena f\u00f6r <strong>$storage-<\/strong> variabeln innan du ens itererar genom loopen. Det valet \u00e4r verkligen upp till dig och vad du vill uppn\u00e5.<\/p>\n<h2>Anv\u00e4nda de installerade plugins<\/h2>\n<p>Vid det h\u00e4r laget har vi t\u00e4ckt de grundl\u00e4ggande aspekterna av fels\u00f6kning av kod genom att anv\u00e4nda felloggar.<\/p>\n<p>Nu m\u00e5ste vi dock v\u00e4nda v\u00e5r uppm\u00e4rksamhet mot plugins som diskuterades f\u00f6r n\u00e5gra inl\u00e4gg sedan. Efter det kommer vi s\u00e5 sm\u00e5ningom att arbeta oss upp till Xdebug.<\/p>\n<p>Men h\u00e4rn\u00e4st ska vi titta p\u00e5 de verktyg som \u00e4r tillg\u00e4ngliga f\u00f6r oss fr\u00e5n sj\u00e4lva WordPress.<\/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>Det \u00e4r en annan sak om du vill f\u00f6rst\u00e5 hur man manuellt skriver information till filen f\u00f6r forskning och fels\u00f6kning. I det h\u00e4r inl\u00e4gget kommer vi att forts\u00e4tta att g\u00f6ra exakt det f\u00f6r att f\u00f6rb\u00e4ttra v\u00e5r f\u00f6rst\u00e5else f\u00f6r WordPress-felloggar.<\/p>\n","protected":false},"author":1,"featured_media":162974,"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-230193","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\/230193","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=230193"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230193\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/162974"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}