{"id":230783,"date":"2022-12-04T09:42:00","date_gmt":"2022-12-04T06:42:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230783"},"modified":"2022-12-04T16:40:41","modified_gmt":"2022-12-04T13:40:41","slug":"wordpressin-virhelokien-lukeminen-ja-ymmaertaeminen-osa-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpressin-virhelokien-lukeminen-ja-ymmaertaeminen-osa-2\/","title":{"rendered":"WordPressin virhelokien lukeminen ja ymm\u00e4rt\u00e4minen, osa 2"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/wordpressin-virhelokien-lukeminen-ja-ymmaertaeminen-osa-1\/\" title=\"Viime kerralla\">Viime kerralla<\/a><\/strong> k\u00e4vimme l\u00e4pi seuraavat:<\/p>\n<ol>\n<li>virheenkorjausvakioiden m\u00e4\u00e4ritt\u00e4minen,<\/li>\n<li>virhelokitiedoston paikantaminen,<\/li>\n<li>ymm\u00e4rt\u00e4\u00e4 kuinka lukea lokitiedostoa,<\/li>\n<li>pinoj\u00e4lkien ymm\u00e4rt\u00e4minen<\/li>\n<li>ymm\u00e4rt\u00e4m\u00e4\u00e4n pinon lukemisen<\/li>\n<\/ol>\n<p>Niin hienoa kuin se onkin, on silti t\u00e4rke\u00e4\u00e4 ymm\u00e4rt\u00e4\u00e4, kuinka tietoja kirjoitetaan virhelokiin ohjelmallisesta n\u00e4k\u00f6kulmasta. Tarkoittaen; Yksi asia on, jos ty\u00f6si aiheuttaa virheit\u00e4, varoituksia tai huomautuksia.<\/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=\"WordPressin virhelokien lukeminen ja ymm\u00e4rt\u00e4minen, osa 2\"><\/a><\/p>\n<p>Se on toinen asia, jos haluat ymm\u00e4rt\u00e4\u00e4, kuinka tiedostoon kirjoitetaan tietoja manuaalista tutkimusta ja virheenkorjausta varten.<\/p>\n<p>Jatkamme t\u00e4ss\u00e4 viestiss\u00e4 juuri niin, jotta voimme ymm\u00e4rt\u00e4\u00e4 paremmin WordPress-virhelokeja.<\/p>\n<h2>WordPressin virhelokien ymm\u00e4rt\u00e4minen, osa 2<\/h2>\n<p>Mit\u00e4 j\u00e4rke\u00e4 on kirjoittaa virhelokiin? Tarkoitan, onko se edes osa virheenkorjausprosessia?<\/p>\n<p>Edellisest\u00e4 <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/wordpressin-virhelokien-lukeminen-ja-ymmaertaeminen-osa-1\/\" title=\"postauksesta\">postauksesta<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Mutta ent\u00e4 tilanne, jossa haluamme j\u00e4tt\u00e4\u00e4 jotain pois saadaksemme k\u00e4sityksen siit\u00e4, mit\u00e4 WordPress tai PHP n\u00e4kee? Siit\u00e4 on my\u00f6s hy\u00f6ty\u00e4.<\/p>\n<\/blockquote>\n<p>Kun ohjelmoijat ajattelevat virheenkorjausta, monet heist\u00e4 ajattelevat todellisen virheenkorjausohjelman (eli ohjelmiston) k\u00e4ytt\u00e4mist\u00e4, keskeytyskohtien asettamista ja koodin l\u00e4pik\u00e4ymist\u00e4 n\u00e4hd\u00e4kseen muuttujien arvon ohjelman suorittaessa.<\/p>\n<p>Aiomme p\u00e4\u00e4st\u00e4 siihen pisteeseen, mutta ennen kuin teet niin, katsotaanpa, kuinka voimme kirjoittaa virhelokiin itse saadaksemme k\u00e4sityksen ty\u00f6mme suoriutumisesta.<\/p>\n<p>Loppujen lopuksi on yksi asia, jos ty\u00f6mme heittelee varoituksia, virheit\u00e4 ja huomautuksia. Se on toinen, jos on tietoa, jonka haluamme n\u00e4hd\u00e4. Ja virhelokiin kirjoittaminen tulee esiin.<\/p>\n<h3>PHP-toimintojen ymm\u00e4rt\u00e4minen<\/h3>\n<p>Virhelokiin kirjoittamista varten on t\u00e4rke\u00e4\u00e4 ymm\u00e4rt\u00e4\u00e4 kaksi PHP-toimintoa:<\/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\">error_log<\/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>Mit\u00e4 tulee error_log-funktioon, huomaa, ett\u00e4 sen tarkoitus on:<\/p>\n<blockquote>\n<p>L\u00e4het\u00e4 virheilmoitus m\u00e4\u00e4ritettyihin virheenk\u00e4sittelyrutiineihin<\/p>\n<\/blockquote>\n<p>Useimmissa tapauksissa t\u00e4m\u00e4 on asetettu kirjoittamaan lokitiedostoon WordPressin ja PHP:n oletuskokoonpanon kautta. Mutta siin\u00e4 on paljon muutakin, koska haluamme usein tulostaa muuttujien, taulukoiden, objektien ja niin edelleen arvot.<\/p>\n<p><strong>T\u00e4t\u00e4 varten komentoa print_r<\/strong> on voitava k\u00e4ytt\u00e4\u00e4 yhdess\u00e4 <strong>error_login<\/strong> kanssa. <strong>print_r<\/strong> tekee seuraavaa:<\/p>\n<blockquote>\n<p>Tulostaa ihmisen luettavissa olevan tiedon muuttujasta<\/p>\n<\/blockquote>\n<p>Ja jos luet oppaan, huomaat, ett\u00e4 tarvitaan kaksi argumenttia, joista toinen tulee asettaa arvoon <strong>tosi<\/strong>, jos haluat, ett\u00e4 funktion tulos tulostetaan lokitiedostoon.<\/p>\n<p>Tarkemmin sanottuna, kuten k\u00e4ytt\u00f6ohjeessa sanotaan:<\/p>\n<blockquote>\n<p>Jos haluat kaapata <strong>print_r() -tuloksen<\/strong>, k\u00e4yt\u00e4 <code>return<\/code>parametria. Kun t\u00e4m\u00e4 parametri on asetettu arvoon <strong><code>TRUE<\/code><\/strong>, <strong>print_r()<\/strong> palauttaa tiedot sen sijaan, ett\u00e4 tulostaa ne.<\/p>\n<\/blockquote>\n<p>Joten yleinen ajatus taulukon arvon kirjoittamisesta, esimerkiksi $exampleArray, n\u00e4ytt\u00e4isi suunnilleen <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\">t\u00e4lt\u00e4<\/a><\/strong> :<\/p>\n<pre><code>&lt;?php\n\nerror_log(print_r($exampleArray, true));<\/code><\/pre>\n<p>Mutta ent\u00e4 WordPressin yhteydess\u00e4?<\/p>\n<h3>Arvojen kirjoittaminen virhekirjautumiseen WordPressiss\u00e4<\/h3>\n<p>Joten yll\u00e4 oleva hahmotellaan tarvitsemamme PHP:n sis\u00e4\u00e4nrakennetut toiminnot, mutta milt\u00e4 t\u00e4m\u00e4 n\u00e4ytt\u00e4\u00e4 WordPress-kehityksen yhteydess\u00e4.<\/p>\n<p>Oletetaan t\u00e4m\u00e4n tekemiseksi, ett\u00e4 olemme ottaneet k\u00e4ytt\u00f6\u00f6n rekisterimallin <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/rekisterimallin-kaeyttaeminen-wordpressissae\/\" title=\"version\">version<\/a><\/strong>. Mallin toteutuksessa meill\u00e4 on my\u00f6s menetelm\u00e4 nimelt\u00e4 <strong>start<\/strong>, jota voimme kutsua, kun kaikki objektimme on lis\u00e4tty rekisteriin.<\/p>\n<p>Se voi n\u00e4ytt\u00e4\u00e4 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-14-start-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4:<\/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>Nyt, mit\u00e4 tulee t\u00e4yt\u00e4nt\u00f6\u00f6npanoon, t\u00e4m\u00e4 on yksinkertaista. Mutta ent\u00e4 jos haluamme n\u00e4hd\u00e4, mit\u00e4 objekteja kutsutaan silmukan jokaisen iteraation kautta.<\/p>\n<p>T\u00e4m\u00e4n taustalla on ajatus, ett\u00e4 voimme iteroida tallennettuja objekteja ja kutsua niit\u00e4 jokaiselle menetelm\u00e4lle. T\u00e4m\u00e4 perustuu ajatukseen, ett\u00e4 jokaisella objektilla on k\u00e4ytett\u00e4viss\u00e4 menetelm\u00e4 (joka voidaan pakottaa <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/olio-ohjelmointi-kaeyttoeliittymien-ymmaertaeminen\/\" title=\"k\u00e4ytt\u00f6liittym\u00e4ll\u00e4\">k\u00e4ytt\u00f6liittym\u00e4ll\u00e4<\/a><\/strong> ).<\/p>\n<p>Ensinn\u00e4kin t\u00e4m\u00e4 her\u00e4tt\u00e4\u00e4 kysymyksen: miksi voimme haluta tehd\u00e4 niin? WordPressin tapahtumanhallintaj\u00e4rjestelm\u00e4n luonteen vuoksi haluamme ehk\u00e4 varmistaa, ett\u00e4 jokainen objekti, jonka odotamme k\u00e4ynnistyv\u00e4n, k\u00e4ynnistyy.<\/p>\n<p>Toiseksi, kuinka voimme n\u00e4hd\u00e4, mit\u00e4 objekteja kutsutaan? T\u00e4ss\u00e4 tulee esiin kirjoitus virhelokiin. Yll\u00e4 kuvailtuja menetelmi\u00e4 k\u00e4ytt\u00e4m\u00e4ll\u00e4 yksi tapa tehd\u00e4 se olisi tehd\u00e4 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-15-view-stored-objects-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraava<\/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>T\u00e4m\u00e4 johtaa seuraavan tulosteen:<\/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=\"WordPressin virhelokien lukeminen ja ymm\u00e4rt\u00e4minen, osa 2\"><\/a><\/p>\n<p>T\u00e4\u00e4ll\u00e4 voit n\u00e4hd\u00e4 kohteen; se on nimiavaruus, sen ominaisuusarvot (mukaan lukien ovatko ominaisuudet yksityisi\u00e4, suojattuja, julkisia ja niin edelleen).<\/p>\n<p>Sielt\u00e4 voit sitten tehd\u00e4 hieman virheenkorjausta, jos tulos on sellainen, jota et odottanut, tai voit ehk\u00e4 k\u00e4ytt\u00e4\u00e4 t\u00e4t\u00e4 varmistaaksesi, ett\u00e4 koodisi tekee mit\u00e4 odotit.<\/p>\n<p>T\u00e4m\u00e4 on kuitenkin vain yksi esimerkki. Voit kuitenkin tyhjent\u00e4\u00e4 <strong>$storage<\/strong> &#8211; muuttujan arvot ennen kuin edes iteroit silmukan l\u00e4pi. T\u00e4m\u00e4 valinta on todella sinun ja mit\u00e4 haluat saavuttaa.<\/p>\n<h2>Asennettujen laajennusten k\u00e4ytt\u00e4minen<\/h2>\n<p>T\u00e4ss\u00e4 vaiheessa olemme k\u00e4sitelleet koodin virheenkorjauksen perusn\u00e4k\u00f6kohdat virhelokien avulla.<\/p>\n<p>Nyt meid\u00e4n on kuitenkin kiinnitett\u00e4v\u00e4 huomiomme laajennuksiin, joista keskusteltiin muutama viesti sitten. Sen j\u00e4lkeen pyrimme lopulta kehitt\u00e4m\u00e4\u00e4n Xdebugiin.<\/p>\n<p>Mutta seuraavaksi tarkastelemme ty\u00f6kaluja, jotka ovat k\u00e4ytett\u00e4viss\u00e4mme itse WordPressiss\u00e4.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se on toinen asia, jos haluat ymm\u00e4rt\u00e4\u00e4, kuinka tietoja voidaan kirjoittaa tiedostoon manuaalisesti tutkimusta ja virheenkorjausta varten. Jatkamme t\u00e4ss\u00e4 viestiss\u00e4 juuri niin, jotta voimme ymm\u00e4rt\u00e4\u00e4 paremmin WordPress-virhelokeja.<\/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":[719,895,843],"tags":[1166],"class_list":["post-230783","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-opetusohjelmia","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=230783"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230783\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/162974"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230783"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230783"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}