Frage

C ++ Präprozessor #define ist völlig anders.

Ist die PHP define() anders als nur eine var erstellen?

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

vs

$setting = 0;  
$something = $setting;
War es hilfreich?

Lösung

'definieren' Operation selbst ist ziemlich langsam. - durch xdebug Profiler bestätigt

Hier ist Benchmarks von http: //t3.dotgnu. info / blog / php / my-first-php-extension.html :

  • reine 'definieren'
    380,785 Fetches / sec
    14,2647 mittlere msecs / First-Antwort

  • Konstanten mit 'hidef' Erweiterung
    definiert 930,783 Fetches / sec
    6,30279 mittlere msecs / First-Antwort


Defekten Link Update

Die oben genannten Blog-Post hat sich das Internet verlassen. Es kann immer noch gesehen werden hier über Wayback Machine . Hier ist ein weiterer rel="noreferrer">.

Die Bibliotheken der Autor Referenzen finden Sie hier (apc_define_constants) und hier (hidef Erweiterung) .

Andere Tipps

Im Allgemeinen ist die Idee einer Konstante sein Konstante , (Klingt komisch, nicht wahr;)) in Ihrem Programm . Was bedeutet, dass der Compiler (Interpreter) wird „FOOBAR“ mit FOOBAR Wert in Ihrem gesamten Skript ersetzen.

So viel zur Theorie und die Vorteile - wenn Sie kompilieren. Jetzt PHP ist ziemlich dynamisch und in den meisten Fällen werden Sie nicht eine andere merken, weil das PHP-Skript mit jedem Durchlauf kompiliert wird. AFAI-can-sagen Sie keinen bemerkenswerten Unterschied in der Geschwindigkeit zwischen Konstanten und Variablen, wenn Sie einen Byte-Code-Cache verwenden, sehen sollen, wie APC , Zend Optimizer oder eAccelerator . Dann kann es Sinn machen.

Alle anderen Vorteile / Nachteile der Konstanten wurden bereits hier angemerkt und kann in der PHP-Handbuch .

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

Dies ist wiederholbar mit ähnlichen Ergebnissen. Es scheint mir, wie Konstanten ein wenig langsamer zu definieren und / oder verwenden Sie als Variablen sind.

Hier sind die Unterschiede von der Handbuch

  • Konstanten haben keine Dollarzeichen ($) vor ihnen;
  • Konstanten nur definiert werden kann, die definieren () Funktion, nicht durch einfache Zuordnung verwendet;
  • Konstanten definiert werden kann und überall ohne Rücksicht auf variable Scoping-Regeln zugegriffen wird;
  • Konstanten können nicht neu definiert oder nicht definiert werden, sobald sie festgelegt wurden; und
  • Konstanten auf skalare Werte nur auswerten können.

Für mich ist der Hauptvorteil ist die globale Reichweite. Ich weiß nicht sicher Sorgen um ihre Effizienz -. Sie verwenden, wenn Sie einen globalen skalaren Wert benötigen, die nicht änderbar sein sollte

nicht effizient es erscheint. (Und ich bin stützen alle Annahmen hier auf einen Kommentar von php.net, ich habe immer noch nicht den Benchmarks selbst.)

eine Konstante unter Hinweis darauf, wird die Zeit der Erinnerung an eine Variable nehmen 2x.

die Existenz einer Konstante Überprüfung nehmen 2ms und 12 ms für einen Fehlalarm!

Hier ist ein Benchmark aus den Kommentaren der Definition Seite im Online-doc-PHP.

  

Vor der Verwendung () definiert haben einen Blick auf die folgenden Benchmarks:

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

     

wurde Jede Anweisung 1000 Mal ausgeführt und während ein 12ms-Overhead auf   1000 Anrufe werden nicht die Endverbraucher haben ihre Haare reißen,   es wirft einige interessante Ergebnisse, wenn zu if (true) zu vergleichen:

     

1) if ($ true) war praktisch identisch 2) wenn (TRUE_CONST) ist fast   doppelt so langsam - ich denke, dass die Substitution nicht bei der Kompilierung erfolgt   Zeit (ich hatte diese zu verdoppeln überprüfen!) 3) definiert () ist 3-mal langsamer   wenn die Konstante existiert 4) definiert () ist 19-mal langsamer, wenn die   existiert nicht konstant! 5) isset () ist bemerkenswert effizient, unabhängig   von dem, was man es (eine gute Nachricht für alle, die Umsetzung Array werfen   Event-Systeme angetrieben - me)

     

Kann vermeiden wollen, wenn (defined ( 'DEBUG')) ...

von Tris + php bei tfconsulting dot com dot au 26-Mar-2009 6.40

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

Definieren Sie ist einfacher statischer Sinn kann seinen Wert bedeutet nicht während der Laufzeit geändert werden, während variable dynamischer Sinn, weil Sie frei seinen Wert entlang des Prozesses manipulieren können.

Die Hauptunterschiede:

  • definieren konstant ist, variabel ist variabel
  • sie unterschiedliche Umfang / Sichtbarkeit

Wenn ich Geschwindigkeitstests laufen, wobei Konstanten gesetzt und kippte aus Sicht viel ein wenig schneller als Variablen einstellen und Dumping sie aus.

über Effizienz nicht sicher, aber es ist mehr als eine var erstellen:

  • Es ist eine Konstante. Sie können diese Einstellung nicht neu zu definieren oder neu zuweisen
  • Wenn die define nicht gefunden wird, $ etwas wird auf „Einstellung“, was nützlich ist, beispielsweise in i18n: wenn eine Übersetzung (. Dh die entsprechende die Lokalisierungsdatei definieren ist) fehlt, wir sehen großes Wort in Großbuchstaben, gut sichtbar ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top