{"id":228867,"date":"2022-11-01T11:25:00","date_gmt":"2022-11-01T08:25:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228867"},"modified":"2022-11-09T04:35:34","modified_gmt":"2022-11-09T01:35:34","slug":"wordpressi-pistikprogrammide-konstruktorid-ei-tohiks-konkse-maeaeratleda","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-pistikprogrammide-konstruktorid-ei-tohiks-konkse-maeaeratleda\/","title":{"rendered":"WordPressi pistikprogrammide konstruktorid ei tohiks konkse m\u00e4\u00e4ratleda"},"content":{"rendered":"\n<p>Tundub, et WordPressi pistikprogrammide konstruktorid on \u00fcha enam aruteluteema selle \u00fcle, mida nad peaksid m\u00e4\u00e4ratlema. Ma olen sellest varem r\u00e4\u00e4kinud, aga see on okei, kui sellist teemat aeg-ajalt uuesti \u00fcle vaadata, eks?<\/p>\n<p>L\u00f5ppude l\u00f5puks on asju, mida me \u00f5pime, ja asju, mida me muudame, kui omandame rohkem kogemusi.<\/p>\n<p>Pole sugugi haruldane n\u00e4ha pistikprogramme, mis m\u00e4\u00e4ratlevad konksud ja muud k\u00e4itumist, kuid ma ei ole selle l\u00e4henemisviisi f\u00e4nn. Selle asemel arvan, et konksu registreerimise k\u00e4sitlemine peaks toimuma oma funktsioonis v\u00f5i, veelgi drastilisemalt, klasside komplekti poolt.<\/p>\n<p>Kuid enne sellesse laskumist tahan selgitada, mis peaks WordPressi pistikprogrammide konstruktoris k\u00e4ima, miks see peaks konstruktoris k\u00e4ima ja kuidas seda pistikprogrammidega t\u00f6\u00f6tades k\u00e4sitleda.<\/p>\n<h2>WordPressi pistikprogrammide konstruktorid<\/h2>\n<p>Algusest peale arvan, et konstruktoreid tuleks kasutada \u00fche asja jaoks:<\/p>\n<ul>\n<li>Objekti oleku initsialiseerimine.<\/li>\n<\/ul>\n<p>See, mis m\u00e4\u00e4rab objekti algoleku, v\u00f5ib s\u00f5ltuda sellest, kas see on loodud &quot;nullist&quot; v\u00f5i laaditakse see eelmise komplekti teabega (nt seansi j\u00e4rjestamine). Kuidas ma seda n\u00e4en:<\/p>\n<ul>\n<li>atribuudid on nimis\u00f5nad, mis kirjeldavad objekti,<\/li>\n<li>funktsioonid on tegus\u00f5nad, mis kirjeldavad, mida objekt saab teha.<\/li>\n<\/ul>\n<p>Funktsioonid teevad loomulikult seda t\u00f6\u00f6d, mida objekt on v\u00f5imeline tegema. Nad v\u00f5ivad kutsumisel muuta objekti olekut v\u00f5i t\u00f6\u00f6tada funktsioonidesse edastatud argumentidega.<\/p>\n<h3>Mis peaks konstruktoris k\u00e4ima?<\/h3>\n<p>Kui objekt on konstrueeritud, tuleks see lihtsalt seadistada nii, et selle atribuudid on seatud ja selle funktsioonid on t\u00f6\u00f6ks valmis.<\/p>\n<p>Kui konstruktoris on midagi, mis ei m\u00f5juta objekti algolekut, ei tohiks see seal olla.<\/p>\n<h3>Miks peaksid atribuudid konstruktoris olema?<\/h3>\n<p>V\u00f5ib-olla on parem viis selle k\u00fcsimuse esitamiseks:<\/p>\n<p>Miks ei v\u00f5iks konstruktoris defineerida konksud?<\/p>\n<p>WordPressi konksude s\u00fcsteem on osa <a href=\"https:\/\/en.wikipedia.org\/wiki\/Event-driven_programming\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00fcndmustep\u00f5hisest disainimustrist<\/a> (mille f\u00e4nn ma olen), kuid konksude registreerimine ei kirjelda objekti olekut. Selle asemel loob see k\u00f5ige fundamentaalsemal tasemel suhte objekti ja WordPressiga.<\/p>\n<p>Objekti algolek ei pea teadma WordPressi kohta, \u00fchtegi selle funktsiooni ei pea WordPressiga siduma ega WordPressiga t\u00f6\u00f6tlema.<\/p>\n<p>Pidage meeles, et atribuudid l\u00e4htestatakse konstruktoris. WordPress ei ole atribuut. See on s\u00f5ltuvus. S\u00f5ltuvuse loomine t\u00e4hendab toimingu sooritamist, mis on verbi definitsioon.<\/p>\n<p>Seega tuleks kogu konksu registreerimine teha funktsioonis.<\/p>\n<h3>Kuidas me saame konksu registreerimisega hakkama?<\/h3>\n<p>See on \u00fcks neist teemadest, mis v\u00f5ib olla postitus v\u00f5i postituste seeria.<\/p>\n<ul>\n<li>WordPressiga on v\u00f5imalik luua klass, mis haldab objektide ja konksude registrit.<\/li>\n<li>Konksu registreerimist on v\u00f5imalik m\u00e4\u00e4ratleda ka klassi funktsiooni sees.<\/li>\n<li><a href=\"https:\/\/carlalexander.ca\/dependency-inversion-principle-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Samuti saame s\u00f5ltuvuse inversiooniga<\/a> teha mitmeid asju .<\/li>\n<\/ul>\n<p>K\u00f5ik \u00fclaltoodud on asjad, mis ei kuulu selle postituse ulatusse, kuid lihtsuse huvides n\u00e4itan n\u00e4idet selle kohta, kuidas klass saab oma funktsioone WordPressis <a href=\"https:\/\/gist.github.com\/tommcfarlin\/30521dcf0c493283327bf9162c7b9a35#file-01-javascript-asset-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">init-funktsioonis<\/a> registreerida :<\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeAdmin;\nuse AcmeAdminInterfaces;\n\nclass JavaScript_Assets implements InterfacesAsset {\n\n    private $assets_dir;\n\n    private $js_dir;\n\n    public function __construct() {\n\n        $this-&gt;assets_dir = trailingslashit(\n            plugin_dir_url( __FILE__ ). 'assets'\n        );\n\n        $this-&gt;js_dir = trailingslashit( $this-&gt;assets_dir. 'js' );\n    }\n\n    public function init() {\n\n        add_action(\n            'admin_enqueue_scripts',\n            array( $this, 'enqueue') );\n    }\n\n    public function enqueue() {\n\n        wp_enqueue_script(\n            'toggle-admin-notices',\n            $this-&gt;js_dir. 'admin.js',\n            array( 'jquery' ),\n            false\n        );\n    }\n}\n<\/code><\/pre>\n<p>Nii saame objekti instantseerida, testida, kasutada jne, kuid me ei pea tegelema WordPressiga seonduvaga ilma <strong>init<\/strong> &#8211; funktsiooni selges\u00f5naliselt v\u00e4lja kutsumata.<\/p>\n<p>Kui see on kutsutud, tekib s\u00f5ltuvus, on vaja WordPressi ja asjad l\u00e4hevad keerulisemaks.<\/p>\n<h2>Oh, ja see testimisasi<\/h2>\n<p>Ma tahan mainida veel \u00fchte punkti, mis j\u00e4\u00e4b veidi selle postituse ulatuse ja sisu v\u00e4ljapoole, kuid on siiski asjakohane: klassi testimisel peaksime suutma:<\/p>\n<ol>\n<li>luua klassi eksemplar,<\/li>\n<li>selle loogika testimine funktsioonide kutsumisega,<\/li>\n<li>selle parameetrite edastamine ja selle tagastusv\u00e4\u00e4rtuste hindamine.<\/li>\n<\/ol>\n<p>Ja me peaksime suutma seda teha nii palju kui v\u00f5imalik isoleeritult. Kui konksud on konstruktoris m\u00e4\u00e4ratletud, loob see kohese s\u00f5ltuvuse WordPressist, mida ei tohiks vaja minna.<\/p>\n<p>WordPress ei kirjelda objekti olekut. See on s\u00f5ltuvus objektist.<\/p>\n<p>Igatahes, ma \u00fcritan \u00f6elda, et WordPressi pistikprogrammide konstruktorid ei peaks tegelema konksude registreerimisega, kuna konksud ei kirjelda selle olekut. Need on seotud millegagi, mida klass teeb ja takistavad meil objekti isoleeritult testida.<\/p>\n<p>Nii et neil on oma koht, kuid see pole konstruktoris.<\/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>WordPressi pistikprogrammide konstruktorid ei peaks tegelema konksude registreerimisega, kuna konksud ei kirjelda selle olekut.<\/p>\n","protected":false},"author":1,"featured_media":223852,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,842,802,812,863],"tags":[1165,1165],"class_list":["post-228867","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-opetused","category-php-4","category-pistikprogrammid","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=228867"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228867\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/223852"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}