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;
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;
'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).
Aquí están las diferencias, de las constantes manual
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.
diferencias principales:
No está seguro acerca de la eficiencia, pero es más que la creación de una var:
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.
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.
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.
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.
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
la sintaxis y el alcance es obvio .. lo que quiero decir es a rendimiento – Prody