{"id":84,"date":"2020-11-10T12:15:18","date_gmt":"2020-11-10T12:15:18","guid":{"rendered":"http:\/\/jplatz.com.br\/syntax\/?p=84"},"modified":"2020-12-10T23:07:07","modified_gmt":"2020-12-10T23:07:07","slug":"php-array-anonimo-uma-tecnica-nao-tao-conhecida-assim","status":"publish","type":"post","link":"https:\/\/jplatz.com.br\/syntax\/2020\/11\/10\/php-array-anonimo-uma-tecnica-nao-tao-conhecida-assim\/","title":{"rendered":"PHP Array An\u00f4nimo, uma t\u00e9cnica n\u00e3o t\u00e3o conhecida assim&#8230;"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>echo &#91;\n    'index1' => 'content1',\n    'index2' => 'content2',\n    'index3' => 'content3',\n    'index4' => 'content4',\n]&#91;'index3'] ?? 'Conte\u00fado n\u00e3o encontrado';\n<\/code><\/pre>\n\n\n\n<p>Voc\u00ea consegue definir qual a sa\u00edda obtida pelo c\u00f3digo acima? Talvez n\u00e3o, mas n\u00e3o se preocupe voc\u00ea n\u00e3o est\u00e1 sozinho.<\/p>\n\n\n\n<p>Esta t\u00e9cnica de programa\u00e7\u00e3o nem possui um nome bem definido, o melhor que consegui identificar na internet seria Array An\u00f4nimo, mas ainda assim com muitas diverg\u00eancias de opini\u00f5es sobre o tema. N\u00e3o importa, vamos entender como tirar proveito disto.<\/p>\n\n\n\n<p>Primeiro vamos entender o c\u00f3digo acima postando um exemplo mais simples.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo &#91; 'index1' => 'content1']&#91;'index1'];<\/code><\/pre>\n\n\n\n<p>Melhorou? Que tal simplificar para algo mais usual, mais conhecido pelos devs.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$y = array('index1' => 'content1');\necho $y&#91;'index1'];<\/code><\/pre>\n\n\n\n<p>E agora? Ficou mais familiar? Reconhece esta sintaxe do PHP Array?<\/p>\n\n\n\n<p>Ent\u00e3o, Array An\u00f4nimo nada mais \u00e9 do que utilizar o conte\u00fado de um Array sem ter que definir este conte\u00fado em uma vari\u00e1vel nomeada. Vamos a mais um exemplo poss\u00edvel.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>foreach (&#91;\n  'index1' => 'content1',\n  'index2' => 'content2',\n  'index3' => 'content3',\n  'index4' => 'content4'\n] as $index => $value) {\n  echo 'Index: ' . $index . ' Value: ' . $value;\n}<\/code><\/pre>\n\n\n\n<p>At\u00e9 aqui o objetivo foi descrever o mecanismo do array an\u00f4nimo. Acredito que foi poss\u00edvel entender o funcionamento do mecanismo atrav\u00e9s dos exemplos simplificados.<\/p>\n\n\n\n<p>Mas qual a aplica\u00e7\u00e3o pr\u00e1tica real desta t\u00e9cnica de programa\u00e7\u00e3o? Para que serve? Como posso tirar proveito disto? Bom, a resposta \u00e9 simples. <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Qualidade de c\u00f3digo (clean code)<\/li><li>Programa\u00e7\u00e3o sem ramifica\u00e7\u00f5es (branchless programming)<\/li><\/ul>\n\n\n\n<p>Para exemplificar esta aplicabilidade, vamos considerar o seguinte cen\u00e1rio. Temos uma aplica\u00e7\u00e3o que roda em m\u00faltiplos servidores e precisamos obter uma chave secreta dada uma lista de servidores.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class ServerSecret {\n  public static function mySecret($servername) {\n    return &#91; \n      'server1' => 'xyz',\n      'server2' => 'wsx',\n      'server3' => 'oiu',\n    ]&#91;$servername] ?? self::throwInvalidServer($servername);\n  }\n\n  private static function throwInvalidServer(string $servername) {\n    throw new \\LogicException(\n      sprintf('Servidor %s n\u00e3o foi encontrado', $servername);\n    );\n}<\/code><\/pre>\n\n\n\n<p>Pronto, temos a\u00ed uma aplica\u00e7\u00e3o concreta para o uso do Array An\u00f4nimo. Voc\u00ea n\u00e3o precisa se ater muito ao que o c\u00f3digo est\u00e1 fazendo, at\u00e9 por que \u00e9 poss\u00edvel obter o mesm\u00edssimo resultado codificando sintaxes diferentes.<\/p>\n\n\n\n<p>O mais importante de se observar \u00e9 como o c\u00f3digo foi organizado, limpeza, clareza, funcionalidade e principalmente a aus\u00eancia de IFs e ramifica\u00e7\u00f5es de c\u00f3digos. <\/p>\n\n\n\n<p>Para quem quiser se aprofundar um pouco mais no assunto recomendo pesquisar por Branchless Programming.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea consegue definir qual a sa\u00edda obtida pelo c\u00f3digo acima? Talvez n\u00e3o, mas n\u00e3o se preocupe voc\u00ea n\u00e3o est\u00e1 sozinho. Esta t\u00e9cnica de programa\u00e7\u00e3o nem possui um nome bem definido, o melhor que consegui identificar na internet seria Array An\u00f4nimo, mas ainda assim com muitas diverg\u00eancias de opini\u00f5es sobre o tema. N\u00e3o importa, vamos entender [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,2,3],"tags":[63,62,61],"class_list":["post-84","post","type-post","status-publish","format-standard","hentry","category-backend","category-coding","category-php","tag-array","tag-branchless","tag-cleancode"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/84","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/comments?post=84"}],"version-history":[{"count":8,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/84\/revisions"}],"predecessor-version":[{"id":92,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/84\/revisions\/92"}],"wp:attachment":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/media?parent=84"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/categories?post=84"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/tags?post=84"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}