Pregunta

El preprocesador de C ++ #define es totalmente diferente.

¿El define () de PHP es diferente a la simple creación de una var?

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

vs

$setting = 0;  
$something = $setting;
¿Fue útil?

Solución

La operación 'define' en sí misma es bastante lenta, confirmada por el perfil de xdebug.

Aquí están las referencias de http: //t3.dotgnu. info / blog / php / my-first-php-extension.html :

  • puro 'definir'
    380.785 recuperaciones / seg.
    14.2647 ms medios / primera respuesta

  • constantes definidas con la extensión 'hidef'
    930.783 recuperaciones / seg.
    6.30279 ms medios / primera respuesta


actualización de enlace roto

La publicación de blog a la que se hizo referencia anteriormente ha salido de Internet. Todavía se puede ver aquí a través de Wayback Machine . Aquí hay otro artículo similar .

Las bibliotecas a las que hace referencia el autor se encuentran aquí (apc_define_constants) y aquí (extensión hidef) .

Otros consejos

En general, la idea de una constante es ser constante , (Suena gracioso, ¿verdad?;)) dentro de su programa . Lo que significa que el compilador (intérprete) reemplazará a " FOOBAR " con el valor de FOOBAR en todo su script.

Tanto para la teoría y las ventajas, si compila. Ahora PHP es bastante dinámico y en la mayoría de los casos no notará una diferencia, ya que el script PHP se compila con cada ejecución. Afai-can-tell no debería ver una diferencia notable en la velocidad entre constantes y variables a menos que use un caché de código de bytes como APC , Zend Optimizer o eAccelerator . Entonces puede tener sentido.

Todas las otras ventajas / desventajas de las constantes ya se han señalado aquí y se pueden encontrar en el manual de PHP .

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

0.00689506530762

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

0.00941896438599

Esto es repetible con resultados similares. Me parece que las constantes son un poco más lentas para definir y / o usar que las variables.

Estas son las diferencias, del manual

  • Las constantes no tienen un signo de dólar ($) delante de ellas;
  • Las constantes solo se pueden definir mediante la función define (), no por asignación simple;
  • Se pueden definir y acceder a las constantes en cualquier lugar sin tener en cuenta las reglas de alcance de las variables;
  • Las constantes no pueden redefinirse o no definirse una vez que se hayan establecido; y
  • Las constantes solo pueden evaluar valores escalares.

Para mí, el principal beneficio es el alcance global. Ciertamente no me preocupo por su eficiencia, utilícelas siempre que necesite un valor escalar global que no debería ser modificable.

NO eficiente parece. (Y estoy basando todas las suposiciones aquí en un comentario de php.net, todavía no he hecho los puntos de referencia).

recuperar una constante, tomará 2 veces el tiempo de recuperar una variable.

¡

comprobar la existencia de una Constante tomará 2 ms y 12 ms para un falso positivo!

Aquí hay un punto de referencia de los comentarios de la página de definición en el documento en línea de php.

  

Antes de usar defined (), eche un vistazo a los siguientes puntos de referencia:

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 Versión 5.2.6, Apache 2.0, Windows XP

     

Cada instrucción se ejecutó 1000 veces y mientras una sobrecarga de 12 ms en   1000 llamadas no harán que los usuarios finales se rompan el pelo,   arroja algunos resultados interesantes cuando se compara con if (verdadero):

     

1) si ($ true) era prácticamente idéntico 2) si (TRUE_CONST) era casi   dos veces más lento: supongo que la sustitución no se realiza en la compilación   tiempo (¡tuve que verificar dos veces este!) 3) definido () es 3 veces más lento   si la constante existe 4) definido () es 19 VECES MÁS LENTO si el   ¡la constante no existe! 5) isset () es notablemente eficiente independientemente   de lo que le arrojas (una gran noticia para cualquiera que implemente una matriz   sistemas de eventos impulsados ??- ¡yo!)

     

Es posible que desee evitar si (definido ('DEBUG')) ...

de tris + php en tfconsulting dot com dot au 26-mar-2009 06:40

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

Definir es un sentido estático simple, lo que significa que su valor no puede cambiarse durante el tiempo de ejecución, mientras que la variable es un sentido dinámico porque puede manipular libremente su valor a lo largo del proceso.

Principales diferencias:

  • define es constante, la variable es variable
  • tienen diferente alcance / visibilidad

Cuando ejecuto pruebas de velocidad, las constantes que se configuran y descargan se ejecutan mucho más rápido que establecer variables y eliminarlas.

No estoy seguro acerca de la eficiencia, pero es más que crear una var:

  • Es una constante: no puede redefinir o reasignar esta CONFIGURACIÓN.
  • Si no se encuentra la definición, $ algo se establece en " CONFIGURACIÓN " ;, lo cual es útil, por ejemplo, en i18n: si falta una traducción (es decir, la definición correspondiente es el archivo de localización), vemos una gran palabra en mayúscula, bastante visible ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top