2008-09-29 23 views
18

El preprocesador de C++ #define es totalmente diferente.¿Qué tan eficiente es definir en PHP?

¿Es el PHP define() diferente a simplemente crear una var?

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

vs

$setting = 0; 
$something = $setting; 

Respuesta

16

'definir' la operación en sí misma es bastante lenta, confirmada por xdebug profiler.

Aquí es los puntos de referencia de http://t3.dotgnu.info/blog/php/my-first-php-extension.html:

  • puro 'definir'
    380.785 recuperaciones/seg
    14.2647 mseg medias/primero-respuesta

  • constantes definidas con extensión 'hidef'
    930.783 recuperaciones/seg
    6.30279 medias mseg/primera respuesta


actualización de enlace roto

La entrada de blog hace referencia más arriba se ha marchado de internet. Todavía se puede ver here via Wayback Machine. Aquí hay otro similar article.

Las bibliotecas de las referencias de autor se pueden encontrar here (apc_define_constants) y here (hidef extension).

4

Aquí están las diferencias, de las constantes manual

  • no tienen un signo de dólar ($) delante de ellos;
  • Las constantes solo se pueden definir utilizando la función define(), no por simple asignación;
  • Las constantes se pueden definir y acceder a cualquier lugar sin tener en cuenta las reglas de alcance variable;
  • Las constantes no pueden redefinirse o indefinirse una vez que se han 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ícelos cada vez que necesite un valor escalar global que no se pueda alterar.

+3

la sintaxis y el alcance es obvio .. lo que quiero decir es a rendimiento – Prody

0

diferencias principales:

  • Definir es constante, variable es la variable
  • que distinto alcance/visibilidad
-3

No está seguro acerca de la eficiencia, pero es más que la creación de una var:

  • Es una constante: no puede redefinir o reasignar este AJUSTE.
  • Si no se encuentra la definición, $ something está establecido en "SETTING", que es útil, por ejemplo, en i18n: si falta una traducción (es decir, la definición correspondiente es el archivo de localización), vemos un gran palabra en mayúsculas, muy visible ...
5

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

Tanto por la teoría y las ventajas, si compila. Ahora PHP es bastante dinámico y en la mayoría de los casos no notarás una diferencia porque 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 demás ventajas/desventajas de las constantes ya se han mencionado aquí y se pueden encontrar en el PHP manual.

0

Cuando realizo pruebas de velocidad, las constantes que se configuran y arrojan funcionan mucho más rápido que el establecimiento de variables y su eliminación.

5
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

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

1

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

3

No es eficiente, parece. (Y estoy basando todas las suposiciones aquí en un comentario de php.net, aún no hice los puntos de referencia yo mismo.)

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

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

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

antes de usar definido() echar 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 declaración fue ejecutado 1.000 veces y al mismo tiempo una sobrecarga de 12 ms en 1.000 llamadas no va a tener los usuarios finales rasgan las vestiduras, lo hace vomitar algunos resultados interesantes cuando se comparan a si (verdadera):

1) si ($ verdadera) fue prácticamente idéntica 2) si (TRUE_CONST) fue casi el doble de lento - supongo que la sustitución no se realiza en tiempo de compilación tiempo (tuve que comprobar esto uno!) 3) defined() es 3 veces más lento si la constante existe 4) defined() es 19 TIMES SLOWER si la constante no existe! 5) isset() es notablemente eficiente, independientemente de lo que que lanzar en él (una gran noticia para cualquier implementación de sistemas de gama por eventos - yo)

posible que desee evitar si (que se define ('debug')) .. .

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

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