Hoje encontrei esta pequena jóia do PHP chamada variáveis variáveis .
$literal = "Hello";
$vv = "literal";
echo $$vv; // => prints "Hello"
Na verdade, existem casos de uso reais para esse recurso de idioma?
Hoje encontrei esta pequena jóia do PHP chamada variáveis variáveis .
$literal = "Hello";
$vv = "literal";
echo $$vv; // => prints "Hello"
Na verdade, existem casos de uso reais para esse recurso de idioma?
Respostas:
Assumindo um URL
http://example.com/hello/world
e o seguinte.htaccess
:router.php
, um roteador excessivamente simplista, seria:Esse é um uso prático bastante padrão de variáveis variáveis. Bom truque, mas você deve ser extremamente cuidadoso ao usá-lo, pois abusar / abusar dele certamente levará a códigos terrivelmente insustentáveis.
Isenção de responsabilidade: O código apresentado na resposta destina-se apenas a ilustrar o uso do recurso. Ele não cobre o design, a segurança, a manutenção ou a sanidade adequados. Não use.
fonte
.htaccess
, mas também não os entendo bem.$controller
é uma variável (a estrutura), mas o que ela contém é definido dinamicamente, portanto, uma variável variável. Um nome meio bobo, não é?Honestamente? Em quase 10 anos de experiência em PHP, nunca encontrei um problema para o qual a única solução (ou mesmo a melhor solução de uma escolha) fosse usar uma variável variável. O mais próximo que eu tenho é de poder acessar constantes em uma instância de uma classe como
$classInstance::CLASS_CONSTANT
(que está disponível desde o PHP 5.3) e mesmo assim eu normalmente não tenho muito uso para isso.Eu suspeito que é uma das muitas verrugas que existem no PHP que parecia uma boa idéia na época.
Portanto, em resposta à sua pergunta, se há casos de uso em que é a melhor ou a única abordagem para um problema específico, eu não os vi.
fonte
Depende da sua definição de "bom".
Minha resposta pessoal é simplesmente não .
Tentei encontrar um apenas para responder a essa pergunta, fiz perguntas de ajuda no SO, onde as pessoas as estão usando, e li os guias e as postagens do blog.
Simplesmente não consigo encontrar um cenário em que possa ser discutido usando uma variável variável que seja mais útil ou útil do que outra abordagem .
Tudo o que eu conseguia pensar e encontrei onde razões contra seu uso.
Eu até li um artigo, com comentários agradecidos e positivos, que discutiam como ele pode facilitar as declarações de troca.
Mudar declarações, "mais simples"?
Eu diria que, mesmo para alguém muito novo no PHP, um array pode ser um pouco mais complicado de entender, mas a curva de aprendizado ultrapassa a de aprender variáveis variáveis assim que começar a tentar usá-las código.
Logo ficaria confuso tentar seguir e controlar o fluxo de variáveis variáveis.
Considerando que, uma vez aprendido, um array é bastante simples de olhar e usar.
Como eu os vejo, eles:
$var = "james";
nome e valor do var estão bem ali.Até o manual do PHP possui informações que, embora não intencionais, mostram que variáveis variáveis são complicadas e potencialmente "problemáticas":
PHP.net escreveu:
Como seu uso é muito incomum, eu diria que mesmo desenvolvedores experientes repentinamente teriam alguma curva de aprendizado se outro desenvolvedor usasse isso em seu código.
Variáveis variáveis não podem ser usadas com matrizes Superglobal do PHP dentro de funções ou métodos de classe.
Isso é mais aprendizado e consideração cuidadosa para solucionar problemas introduzidos por variáveis variáveis.
Para nenhum benefício.
Eu acho que eles podem ter sido bastante úteis nos tempos antigos, quando "dinossauros" vagavam pelos datacenters. e o PHP não foram refatorados muito e muito mais rapidamente com coisas como matrizes etc.
Se variáveis variáveis nos deram alguma funcionalidade profunda, ou mesmo altamente úteis, talvez valha a pena usá-las.
No entanto, considerando o que eles oferecem, eu simplesmente não vejo sentido em usá-los, mesmo que uma matriz seja um exagero e use alguns microssegundos mais, por questões de manutenção do código, legibilidade, preservação da sanidade e nenhuma diferença na funcionalidade, apenas use um método alternativo - sempre.
fonte