Existe uma maneira no PHP de incluir uma constante em uma string sem concatenar?
define('MY_CONSTANT', 42);
echo "This is my constant: MY_CONSTANT";
php
string
constants
concatenation
Brian
fonte
fonte
Respostas:
Não.
Com o Strings, não há como o PHP diferenciar os dados da string dos identificadores constantes. Isso vale para qualquer um dos formatos de string no PHP, incluindo o heredoc.
constant()
é uma maneira alternativa de obter uma constante, mas uma chamada de função também não pode ser inserida em uma string sem concatenação.Manual sobre constantes em PHP
fonte
define('ANIMAL','turtles'); $constant='constant'; echo "I like {$constant('ANIMAL')}";
Sim, é (de alguma forma;)):
Provavelmente não é isso que você estava buscando, mas acho que tecnicamente isso não é concatenação, mas uma substituição e, a partir dessa suposição, inclui uma constante em uma string sem concatenar .
fonte
Para usar constantes dentro de cadeias, você pode usar o seguinte método:
Como é que isso funciona?
Você pode usar qualquer nome de função de string e parâmetros arbitrários
Pode-se colocar qualquer nome de função em uma variável e chamá-lo com parâmetros dentro de uma string de aspas duplas. Funciona com vários parâmetros também.
Produz
Funções anônimas também
Você também pode usar funções anônimas, desde que esteja executando o PHP 5.3 ou superior.
Produz html com escape adequado conforme o esperado.
Matrizes de retorno de chamada não permitidas!
Se você já tem a impressão de que o nome da função pode ser chamado, esse não é o caso, pois uma matriz que retorna true quando transmitida
is_callable
causa um erro fatal quando usado dentro de uma string:Tenha em mente
Essa prática é desaconselhada, mas às vezes resulta em um código muito mais legível, então é com você - a possibilidade existe.
fonte
$_ = create_function('$a','return $a;'); $s = "I like {$_(ANIMAL)}"
. A versão de Thetaiko elimina a necessidade de aspas, e um sublinhado é bonito.fonte
fonte
Se você realmente deseja ecoar constante sem concatenação, aqui está a solução:
nota : neste exemplo, o echo usa vários parâmetros ( veja as vírgulas ), portanto não é uma concatenação real
O eco se comporta como uma função, requer mais parâmetros, é mais eficiente que a concatenação, porque não precisa concatenar e depois ecoar, apenas ecoa tudo sem a necessidade de criar um novo objeto concatenado String :))
EDITAR
Além disso, se você considerar concatenar strings, passings strings como parâmetros ou escrever strings inteiras com " , The , (versão de vírgula) será sempre mais rápida, a seguir será apresentada . (Concatenação com ' aspas simples) e o método mais lento de criação de strings usando aspas duplas " , porque as expressões escritas dessa maneira precisam ser avaliadas em relação a variáveis e funções declaradas.
fonte
Você poderia fazer:
fonte
A maneira mais fácil é
Outra maneira de usar
(s)printf
fonte
Como outros já apontaram, você não pode fazer isso. O PHP tem uma função
constant()
que não pode ser chamada diretamente em uma string, mas podemos facilmente contornar isso.e um exemplo básico de uso:
fonte
$constant = 'constant';
vez de definir outra função, e funcionaria de forma idêntica, pois essa função já existe.Aqui estão algumas alternativas para as outras respostas, que parecem focadas principalmente no truque "{$}". Embora nenhuma garantia seja feita em sua velocidade; isso é todo açúcar sintático puro. Para esses exemplos, assumiremos que o conjunto de constantes abaixo foi definido.
Usando extract ()
Este é legal porque o resultado é idêntico às variáveis. Primeiro, você cria uma função reutilizável:
Em seguida, chame-o de qualquer escopo:
Aqui, as minúsculas são constantes para facilitar os dedos, mas você pode remover o array_change_key_case () para mantê-las como estão. Se você já possui nomes de variáveis locais conflitantes, as constantes não os substituirão.
Usando a substituição de string
Este é semelhante ao sprintf (), mas usa um único token de substituição e aceita um número ilimitado de argumentos. Tenho certeza de que existem maneiras melhores de fazer isso, mas perdoe minha falta de jeito e tente se concentrar na idéia por trás disso.
Como antes, você cria uma função reutilizável:
Em seguida, chame-o de qualquer escopo:
Você pode usar qualquer token de substituição que desejar, como% ou #. Eu usei a barra aqui, pois é um pouco mais fácil de digitar.
fonte
É divertido que você possa usar a palavra-chave 'const' como um nome para sua função, para evitar o lixo do espaço para nome:
Você também pode usar $ GLOBALS para propagar a função 'const' por todo o código:
Incerto é seguro para uso futuro. E o que é pior - ainda parece feio.
fonte
Eu acredito que isso responde à pergunta original do OP. A única coisa é que a chave do índice global parece funcionar apenas como minúscula.
Resultado:
fonte
an associative array containing references to all variables
.$db_user = 'root';