{"id":230515,"date":"2022-12-12T14:11:00","date_gmt":"2022-12-12T11:11:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230515"},"modified":"2022-12-07T11:14:11","modified_gmt":"2022-12-07T08:14:11","slug":"haemtar-namnavgraensade-egenskaper-i-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/haemtar-namnavgraensade-egenskaper-i-php\/","title":{"rendered":"H\u00e4mtar namnavgr\u00e4nsade egenskaper i PHP"},"content":{"rendered":"\n<p>N\u00e4r du skriver tillr\u00e4ckligt med kod som kommunicerar med tredjeparts-API:er, kommer du mer \u00e4n troligt att hitta dig sj\u00e4lv i att kommunicera med ett XML-baserat API.<\/p>\n<p>Och s\u00e4g vad du vill om det: Vissa gillar det, andra inte. Men de finns, och de kommer d\u00e4rf\u00f6r att bli en n\u00f6dv\u00e4ndig del av din utveckling n\u00e5gon g\u00e5ng.<\/p>\n<p>Om API:et \u00e4r v\u00e4ldesignat kommer det sannolikt att anv\u00e4nda namnutrymmen f\u00f6r olika typer av f\u00f6rfr\u00e5gningar och svar. Och n\u00e4r du skriver klienten f\u00f6r n\u00e4mnda API, kommer du sannolikt att beh\u00f6va g\u00e5 till v\u00e4ga f\u00f6r att h\u00e4mta namnavgr\u00e4nsade egenskaper.<\/p>\n<p>Det \u00e4r l\u00e4tt att g\u00f6ra det, men det \u00e4r inte direkt uppenbart. S\u00e5 i det h\u00e4r inl\u00e4gget ska jag g\u00e5 igenom ett exempel p\u00e5 hur man g\u00f6r just det.<\/p>\n<p>F\u00f6r det h\u00e4r exemplet, anta att jag ringer ett XML-baserat API. F\u00f6r att g\u00f6ra det anv\u00e4nder jag <strong><a href=\"https:\/\/github.com\/spatie\/array-to-xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Array-To-XML-biblioteket fr\u00e5n Spatie<\/a><\/strong> (vilket \u00e4r extremt bekv\u00e4mt).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161843-61e72bb95137b.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-161843-61e72bb95137b.png\" alt=\"H\u00e4mtar namnavgr\u00e4nsade egenskaper i PHP\" ><\/a><\/p>\n<p>F\u00f6r att st\u00e4lla in beg\u00e4ran skapar jag den med hj\u00e4lp av en array <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/8b97e2c98600cc15ea514416ab6e96ae#file-00-request-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/\/ Setup the XML to connect to the API endpoint.\n$namespaceExampleGetIDs = [\n    'Version' =&gt; $this-&gt;version,\n    'ApiKey' =&gt; $this-&gt;getPrivateKey(),\n    'acmePasscode' =&gt; $this-&gt;getPasscode(),\n    'Call' =&gt; [\n        '_attributes' =&gt; ['Method' =&gt; 'Namesepace.Example.GetIDs'],\n        'Date' =&gt; $this-&gt;getTimestamp(),\n    ],\n];\n$xml = ArrayToXml::convert($namespaceExampleGetIDs, 'Acme', false);\n<\/code><\/pre>\n<p>Sedan kommer jag att anv\u00e4nda API-klienten (som har abstraherats f\u00f6r att h\u00e5lla detta inl\u00e4gg s\u00e5 kortfattat som m\u00f6jligt) f\u00f6r att g\u00f6ra beg\u00e4ran fr\u00e5n API:n. D\u00e4rifr\u00e5n kan vi ta inneh\u00e5llet i svaret och g\u00f6ra det arbete som kr\u00e4vs (i det h\u00e4r fallet kommer det att upprepas genom egenskaperna f\u00f6r svaret).<\/p>\n<p>Och det \u00e4r h\u00e4r att h\u00e4mta namnutrymmesegenskaper kommer in i bilden. Om vi \u200b\u200bantar att vi beh\u00f6ver f\u00e5 \u00e5tkomst till en enskild egendom, eller en egenskap f\u00f6r en egendom, g\u00f6r du s\u00e5 h\u00e4r <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/8b97e2c98600cc15ea514416ab6e96ae#file-01-response-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4r den har ett namnomr\u00e5de:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/\/ Now make a request to the server.\n$response = $this-&gt;makePostRequest($xml);\n$xmlResponse = new SimpleXMLElement($response-&gt;getBody()-&gt;getContents());\n\n\/\/ Iterate through all of the event IDs to get the information about them.\n$events = [];\nforeach ($xmlResponse-&gt;{'Namesepace.Example.GetIDs'}-&gt;EventID as $eventId) {\n    \/\/ Work with the $eventId however necessary...\n}\n<\/code><\/pre>\n<p>Kort sagt fungerar klammerparenteserna som &quot; <strong><a href=\"https:\/\/php.net\/manual\/en\/language.variables.variable.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">variable variabler<\/a><\/strong> &quot; och ger oss tillg\u00e5ng till ett objekts dynamiska natur.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161843-61e72bbe3fdf1.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-161843-61e72bbe3fdf1.png\" alt=\"H\u00e4mtar namnavgr\u00e4nsade egenskaper i PHP\" ><\/a><\/p>\n<p>Fr\u00e5n manualen:<\/p>\n<blockquote>\n<p>Ibland \u00e4r det bekv\u00e4mt att kunna ha variabel variabelnamn. Det vill s\u00e4ga ett variabelnamn som kan st\u00e4llas in och anv\u00e4ndas dynamiskt.<\/p>\n<\/blockquote>\n<p>Och eftersom det \u00e4r anv\u00e4ndbart att st\u00e4lla in dem dynamiskt, \u00e4r det naturligtvis bra att h\u00e4mta dem dynamiskt.<\/p>\n<p>S\u00e5 n\u00e4sta g\u00e5ng du arbetar med ett XML-baserat API (eller kanske vilket API som helst), notera att du kan st\u00e4lla in dig p\u00e5 att h\u00e4mta namnavgr\u00e4nsade egenskaper f\u00f6r objektet via variabelvariabler.<\/p>\n<p>Det \u00e4r vettigt, eller hur?<\/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>N\u00e4r du skriver en klient f\u00f6r ett API kan du beh\u00f6va g\u00e5 till v\u00e4ga f\u00f6r att h\u00e4mta namnavgr\u00e4nsade egenskaper.<\/p>\n","protected":false},"author":1,"featured_media":236089,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[901,807,724],"tags":[1173],"class_list":["post-230515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koda","category-php-9","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230515","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=230515"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230515\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/236089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}