# Define C + + önişlemci tamamen farklıdır.
PHP sadece bir var yaratarak daha farklı () tanımlamak mı?
define("SETTING", 0);
$something = SETTING;
vs
$setting = 0;
$something = $setting;
'Tanımlamak' operasyonu kendisi oldukça yavaş - xdebug profiler tarafından doğrulandı.
Buradan kriterler olduğunu http://t3.dotgnu.info/blog/php/my-first-php-extension.html:
pure 'define'
380.785 fetches/sec
14.2647 mean msecs/first-response
constants defined with 'hidef' extension
930.783 fetches/sec
6.30279 mean msecs/first-response
broken link update
Yukarıda atıfta blog yazısı internet bıraktı. Hala görülebilir here via Wayback Machine. Burada başka bir similar article olduğunu.
Yazar referanslar here (apc_define_constants) ve here (hidef extension) bulunabilir kütüphaneler.
Burada farklar vardır manual dan
Benim için, ana parası küresel kapsamı. Ben kesinlikle onların verimliliği konusunda endişe etmeyin - alterable olmamalıdır küresel bir skaler değer gerektiğinde kullanabilirsiniz.
Genel olarak, sabit bir fikri (komik geliyor, değil mi? ;)) Sizin program içinde, constant olmaktır. Hangi derleyici (yorumlayıcı) tüm betik boyunca Falanca değerine sahip "filanca" yerini alacak anlamına gelir.
Teori ve avantajları için çok - derlemek eğer. Şimdi PHP oldukça dinamik ve PHP komut dosyası her çalışma ile derlenmiş çünkü çoğu durumda farklı bir fark olmaz. Böyle APC, Zend Optimizer veya {[(2)] gibi bir byte kod önbelleği kullanmak sürece sabitler ve değişkenler arasındaki hız kayda değer bir fark göremiyorum gerekir Afai-söyleyebilirim }. Sonra mantıklı olabilir.
Sabitler tüm diğer avantajları / dezavantajları burada zaten not edilmiştir ve PHP manual bulunabilir.
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
Bu benzer sonuçlar ile tekrarlanabilir. Sabitler değişkenler daha tanımlamak ve / veya kullanmak için biraz yavaş gibi görünüyor bana.
Verimli DEĞİL görünür. (Ve ben php.net itibaren bir yorumum burada tüm varsayımlarını dayandırarak ediyorum, ben hala kriterler kendim yaptım değil.)
Bir sabit hatırlatarak, bir değişken hatırlatarak zaman 2x alacaktır.
Bir Constant varlığını kontrol bir yanlış pozitif için 2ms ve 12ms alacak!
Php online doc tanımlayan sayfanın yorumlardan bir kriter bulunuyor.
Tanımlı kullanmadan önce () aşağıdaki kriterler bakabilirsiniz:
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 Sürüm 5.2.6, Apache 2.0, Windows XP
Each statement was executed 1000 times and while a 12ms overhead on 1000 calls isn't going to have the end users tearing their hair out, it does throw up some interesting results when comparing to if(true):
1) if($true) was virtually identical 2) if(TRUE_CONST) was almost twice as slow - I guess that the substitution isn't done at compile time (I had to double check this one!) 3) defined() is 3 times slower if the constant exists 4) defined() is 19 TIMES SLOWER if the constant doesn't exist! 5) isset() is remarkably efficient regardless of what you throw at it (great news for anyone implementing array driven event systems - me!)
Kaçınmak isteyebilirsiniz if () 'DEBUG' (tanımlanır) ...
26-Mar-2009 06:40 au nokta com nokta tfconsulting de tris + php
Verimliliği konusunda emin değil, ama bu bir var oluşturarak daha fazladır: