echo [
'index1' => 'content1',
'index2' => 'content2',
'index3' => 'content3',
'index4' => 'content4',
]['index3'] ?? 'Conteúdo não encontrado';
Você consegue definir qual a saída obtida pelo código acima? Talvez não, mas não se preocupe você não está sozinho.
Esta técnica de programação nem possui um nome bem definido, o melhor que consegui identificar na internet seria Array Anônimo, mas ainda assim com muitas divergências de opiniões sobre o tema. Não importa, vamos entender como tirar proveito disto.
Primeiro vamos entender o código acima postando um exemplo mais simples.
echo [ 'index1' => 'content1']['index1'];
Melhorou? Que tal simplificar para algo mais usual, mais conhecido pelos devs.
$y = array('index1' => 'content1');
echo $y['index1'];
E agora? Ficou mais familiar? Reconhece esta sintaxe do PHP Array?
Então, Array Anônimo nada mais é do que utilizar o conteúdo de um Array sem ter que definir este conteúdo em uma variável nomeada. Vamos a mais um exemplo possível.
foreach ([
'index1' => 'content1',
'index2' => 'content2',
'index3' => 'content3',
'index4' => 'content4'
] as $index => $value) {
echo 'Index: ' . $index . ' Value: ' . $value;
}
Até aqui o objetivo foi descrever o mecanismo do array anônimo. Acredito que foi possível entender o funcionamento do mecanismo através dos exemplos simplificados.
Mas qual a aplicação prática real desta técnica de programação? Para que serve? Como posso tirar proveito disto? Bom, a resposta é simples.
- Qualidade de código (clean code)
- Programação sem ramificações (branchless programming)
Para exemplificar esta aplicabilidade, vamos considerar o seguinte cenário. Temos uma aplicação que roda em múltiplos servidores e precisamos obter uma chave secreta dada uma lista de servidores.
class ServerSecret {
public static function mySecret($servername) {
return [
'server1' => 'xyz',
'server2' => 'wsx',
'server3' => 'oiu',
][$servername] ?? self::throwInvalidServer($servername);
}
private static function throwInvalidServer(string $servername) {
throw new \LogicException(
sprintf('Servidor %s não foi encontrado', $servername);
);
}
Pronto, temos aí uma aplicação concreta para o uso do Array Anônimo. Você não precisa se ater muito ao que o código está fazendo, até por que é possível obter o mesmíssimo resultado codificando sintaxes diferentes.
O mais importante de se observar é como o código foi organizado, limpeza, clareza, funcionalidade e principalmente a ausência de IFs e ramificações de códigos.
Para quem quiser se aprofundar um pouco mais no assunto recomendo pesquisar por Branchless Programming.