Question

Le préprocesseur C ++ #define est totalement différent.

Le code define () de PHP est-il différent de la simple création d'une var?

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

vs

$setting = 0;  
$something = $setting;
Était-ce utile?

La solution

L’opération 'define' est plutôt lente - confirmée par le profileur xdebug.

Voici les points de repère de http: //t3.dotgnu. info / blog / php / mon-premier-php-extension.html :

  • pure 'define'
    380.785 récupérations / sec
    14.2647 moyennes msec / première réponse

  • constantes définies avec l'extension 'hidef'
    930.783 récupérations / sec
    6.30279 moyenne msec / première réponse

Mise à jour du lien endommagé

Le billet de blog référencé ci-dessus a quitté Internet. Il peut toujours être consulté ici via Wayback Machine . Voici un autre article similaire .

Les bibliothèques auxquelles l'auteur fait référence se trouvent ici (apc_define_constants) et ici (extension hidef) .

Autres conseils

En général, l’idée d’une constante est d’être constante , (cela semble drôle, non?;)) dans votre programme . Cela signifie que le compilateur (interprète) remplacera "FOOBAR". avec la valeur de FOOBAR tout au long de votre script.

Voilà pour la théorie et les avantages - si vous compilez. Maintenant, PHP est assez dynamique et dans la plupart des cas, vous ne remarquerez rien de différent, car le script PHP est compilé à chaque exécution. Afai-can-tell ne devrait pas constater de différence notable de vitesse entre les constantes et les variables, sauf si vous utilisez un cache de code octet tel que APC , Zend Optimizer ou eAccelerator . Cela peut alors avoir un sens.

Tous les autres avantages / inconvénients des constantes ont déjà été notés ici et se trouvent dans le manuel 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

Ceci est répétable avec des résultats similaires. Il me semble que les constantes sont un peu plus lentes à définir et / ou à utiliser que les variables.

Voici les différences entre le manuel

  • Les constantes ne sont pas précédées d'un signe dollar ($);
  • Les constantes ne peuvent être définies qu'avec la fonction define (), pas par simple affectation;
  • Les constantes peuvent être définies et accessibles n'importe où sans se soucier des règles de portée variables;
  • Les constantes ne peuvent pas être redéfinies ou indéfinies une fois qu'elles ont été définies; et
  • Les constantes ne peuvent être évaluées qu'en valeurs scalaires.

Pour moi, le principal avantage est la portée mondiale. Je ne m'inquiète certes pas de leur efficacité - utilisez-les chaque fois que vous avez besoin d'une valeur scalaire globale qui ne devrait pas être altérable.

PAS efficace, il apparaît. (Et je base toutes les hypothèses ici sur un commentaire de php.net, je n'ai toujours pas fait les tests moi-même.)

rappelant une constante, il faudra 2 fois plus de temps pour rappeler une variable.

vérifier l’existence d’une constante prendra 2 ms et 12 ms pour un faux positif!

Voici un point de repère tiré des commentaires de la page de définition du document en ligne de php.

  

Avant d’utiliser define (), jetez un coup d’œil aux benchmarks suivants:

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 Version 5.2.6, Apache 2.0, Windows XP

     

Chaque instruction a été exécutée 1000 fois et avec une surcharge de 12ms le   1000 appels ne vont pas avoir les utilisateurs finaux se déchirer les cheveux,   cela donne des résultats intéressants en comparant à if (true):

     

1) si ($ true) était pratiquement identique 2) si (TRUE_CONST) était presque   deux fois plus lent - je suppose que la substitution n'est pas faite à la compilation   temps (j'ai dû vérifier celui-ci!) 3) defini () est 3 fois plus lent   si la constante existe 4) defini () est 19 FOIS PLUS BAS si le   la constante n'existe pas! 5) isset () est remarquablement efficace indépendamment   de ce que vous lancez (bonne nouvelle pour ceux qui implémentent array   systèmes d'événements pilotés - moi!)

     

Peut vouloir éviter si (défini ('DEBUG')) ...

de tris + php à l'adresse tfconsulting dot com dot au 26-mars-2009 06:40

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

Définir est un sens statique simple, ce qui signifie que sa valeur ne peut pas être modifiée pendant l'exécution, tandis que variable est un sens dynamique, car vous pouvez manipuler librement sa valeur tout au long du processus.

Principales différences:

  • définir est constante, variable est variable
  • ils ont une portée / visibilité différente

Lorsque j'effectue des tests de vitesse, les constantes définies et supprimées sont beaucoup plus rapides que de définir des variables et de les vider.

Pas sûr de l'efficacité, mais c'est plus que créer une var:

  • C’est une constante: vous ne pouvez pas redéfinir ou réaffecter ce paramètre.
  • Si la définition n'est pas trouvée, $ quelque chose est réglé sur "CONFIGURATION", ce qui est utile, par exemple, dans i18n: si une traduction est manquante (c'est-à-dire que la définition correspondante est le fichier de localisation), nous voyons un gros mot en majuscule, bien visible ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top