Pergunta

C ++ preprocessor #define é totalmente diferente.

É o PHP define() diferente do que apenas criar um var?

define("SETTING", 0);  
$something = SETTING;

vs

$setting = 0;  
$something = $setting;
Foi útil?

Solução

operação 'definir' em si é bastante lento -. Confirmado por profiler xdebug

Aqui está benchmarks de http: //t3.dotgnu. info / blog / php / meu-primeiro-php-extension.html :

  • pura
    'definir' 380.785 buscas / seg
    14.2647 msecs médios / primeira resposta

  • constantes definidas com 'hidef' extensão
    930.783 buscas / seg
    6.30279 msecs médios / primeira resposta


atualização ligação quebrada

O post acima referenciado deixou a internet. Ele ainda pode ser visto aqui via Wayback Machine . Aqui é outra semelhante artigo .

As bibliotecas das referências autor pode ser encontrada href="http://sg.php.net/manual/en/function.apc-define-constants.php" aqui (apc_define_constants) e aqui (hidef extensão) .

Outras dicas

Em geral, a idéia de uma constante é ser constante , (Sons engraçado, né;?)) Dentro de sua programa . O que significa que o compilador (intérprete) irá substituir "FOOBAR" com o valor do FOOBAR ao longo de todo o seu script.

Tanto para a teoria e as vantagens - se você compilar. Agora PHP é bastante dinâmico e na maioria dos casos, você não vai notar uma diferente porque o script PHP é compilado com cada execução. AAII-pode-lhe dizer não deve ver uma diferença notável na velocidade entre constantes e variáveis ??a menos que você usar um cache de byte-code, como APC , Zend Optimizer ou eAccelerator . Então, ele pode fazer sentido.

Todas as outras vantagens / desvantagens de constantes foram já observado aqui e pode ser encontrada no PHP manual.

php > $cat='';$f=microtime(1);$s='cowcow45';$i=9000;while ($i--){$cat.='plip'.$s.'cow';}echo microtime(1)-$f."\n";

,00689506530762

php > $cat='';$f=microtime(1);define('s','cowcow45');$i=9000;while ($i--){$cat.='plip'.s.'cow';}echo microtime(1)-$f."\n";

,00941896438599

Esta é repetível com resultados semelhantes. Parece-me que as constantes são um pouco mais lento para definir e / ou uso de variáveis.

Aqui estão as diferenças, a partir do manual do

  • Constantes não tem um cifrão ($) antes deles;
  • Constantes só pode ser definida utilizando a função de definir (), não por atribuição simples;
  • Constantes podem ser definidas e acessado em qualquer lugar sem levar em conta regras de escopo de variáveis;
  • Constantes não podem ser redefinidas ou eliminadas, uma vez que foram criados; e
  • Constantes só pode avaliar a valores escalares.

Para mim, o principal benefício é o escopo global. Eu certamente não se preocupe com a sua eficiência -. Usá-los sempre que você precisar um valor escalar global que não deve ser alterável

NÃO eficiente que parece. (E eu estou baseando todos os pressupostos aqui em um comentário do php.net, eu ainda não fiz os benchmarks mim mesmo.)

recordando uma constante, terá 2x o tempo de recordar uma variável.

a verificação da existência de um constante vai levar 2ms e 12ms para um falso positivo!

Aqui é um ponto de referência a partir dos comentários do Defina página no doc online do php.

Antes de usar definida () ter um olhar para os seguintes parâmetros de referência:

true                                       0.65ms
$true                                      0.69ms (1)
$config['true']                            0.87ms
TRUE_CONST                                 1.28ms (2)
true                                       0.65ms
defined('TRUE_CONST')                      2.06ms (3)
defined('UNDEF_CONST')                    12.34ms (4)
isset($config['def_key'])                  0.91ms (5)
isset($config['undef_key'])                0.79ms
isset($empty_hash[$good_key])              0.78ms
isset($small_hash[$good_key])              0.86ms
isset($big_hash[$good_key])                0.89ms
isset($small_hash[$bad_key])               0.78ms
isset($big_hash[$bad_key])                 0.80ms

PHP Versão 5.2.6, Apache 2.0, Windows XP

Cada instrução foi executada 1000 vezes e enquanto um 12ms sobrecarga sobre 1000 chamadas não vai ter os usuários finais arrancando os cabelos, ele vomitar alguns resultados interessantes quando se compara a if (true):

1) if ($ true) foi praticamente idêntica 2) if (TRUE_CONST) quase foi duas vezes mais lento - Eu acho que a substituição não for feito em tempo de compilação tempo (eu tinha que verifique este!) 3) definido () é 3 vezes mais lentas Se a constante existe 4) definida () é 19 vezes mais lenta se a constante não existe! 5) isset () é notavelmente eficiente, independentemente do que você jogue com ele (uma grande notícia para qualquer um implementar variedade impulsionado sistemas de eventos - me)

pode querer evitar if (defined ( 'debug')) ...

de tris + php em tfconsulting dot com dot au 26-Mar-2009 06:40

http://us.php.net/manual/en/ function.defined.php # 89886

Definir é sentido estático simples, ou seja, seu valor não pode ser alterado durante a execução, enquanto variável é sentido dinâmico, porque você pode livremente manipular o seu valor ao longo do processo.

diferenças principais:

  • definem é constante, variável é variável
  • que diferente escopo / visibilidade

Ao executar testes de velocidade, constantes sendo definido e jogou para fora correr muito um pouco mais rápido do que a criação variáveis ??e despejá-los para fora.

Não tenho certeza sobre a eficiência, mas é mais do que criar uma var:

  • É uma constante:. Você não pode redefinir ou transferir essa configuração
  • Se a definem não for encontrado, $ algo está ajustado em "AJUSTE", que é útil, por exemplo, em i18n: (. Ou seja, o correspondente definir é o arquivo de localização) se a tradução está faltando, vemos uma grande palavra em maiúsculas, bem visível ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top