Bu soru burada zaten bir cevabı var:
- PHP5: const vs static 5 answers
Bu soru burada zaten bir cevabı var:
Küresel dönmek işlevini kullanın
0,0096, 0,0053, 0,0056, 0,0054, 0,0072, 0,0063, 0.006, 0.0054, 0.0054, 0.0055, 0.005, 0.0057, 0.0053, 0.0049, 0.0064, 0.0054, 0.0053, 0.0053, 0.0061, 0.0059, 0.0076, config1
Örneğin normal bir sınıf almak kullanmak
0.0101, 0.0089, 0.0105, 0.0088, 0.0107, 0.0083, 0.0094, 0.0081, 0.0106, 0.0093, 0.0098, 0.0092, 0.009, 0.0087, 0.0087, 0.0093, 0.0095, 0.0101, 0.0086, 0.0088, 0.0082, config2
statik var kullanmak
0.0029, 0.003, 0.003, 0.0029, 0.0029, 0.0029, 0.003, 0.0029, 0.003, 0.0031, 0.0032, 0.0031, 0.0029, 0.0029, 0.0029, 0.0029, 0.0031, 0.0029, 0.0029, 0.0029, 0.0029, config3
use const var 0.0033, 0.0031, 0.0031, 0.0031, 0.0031, 0.0031, 0.0032, 0.0031, 0.0031, 0.0031, 0.0031, 0.0034, 0.0031, 0.0031, 0.0033, 0.0031, 0.0037, 0.0031, 0.0031, 0.0032, 0.0031, config4
function getTime() {
$timer = explode( ' ', microtime() );
$timer = $timer[1] + $timer[0];
return $timer;
}
$config["time"] = "time";
class testconfig2
{
public $time = "time";
static $instance;
static function getInstance()
{
if(!isset(self::$instance))
self::$instance = new testconfig2();
return self::$instance;
}
}
class testconfig3
{
static $time = "time";
}
class testconfig4
{
const time = "time";
}
function getConfig1()
{
global $config;
return $config;
}
$burncount = 2000;
$bcount = 22;
for($lcnt =1;$lcnt < $bcount;$lcnt++){
$start = getTime();
for($i=1;$i< $burncount;$i++)
{
$gs=getConfig1();
$t = $gs["time"];
}
$end = getTime();
echo round($end - $start,4).', ';
}
echo ' config1<br/>';
for($lcnt =1;$lcnt < $bcount;$lcnt++){
$start = getTime();
for($i=1;$i< $burncount;$i++)
{
$gs=testconfig2::getInstance();
$t = $gs->time;
}
$end = getTime();
echo round($end - $start,4).', ';
}
echo ' config2<br/>';
for($lcnt =1;$lcnt < $bcount;$lcnt++){
$start = getTime();
for($i=1;$i< $burncount;$i++)
{
$gs=testconfig3::$time;
$t = $gs;
}
$end = getTime();
echo round($end - $start,4).', ';
}
echo ' config3<br/>';
for($lcnt =1;$lcnt < $bcount;$lcnt++){
$start = getTime();
for($i=1;$i< $burncount;$i++)
{
$gs=testconfig4::time;
$t = $gs;
}
$end = getTime();
echo round($end - $start,4).', ';
}
echo ' config4<br/>';
?>
Code>
Code>
Her ikisi de 'const' ve 'statik public' kötülük vardır!
Keith Humm belirtildiği gibi - const bir çalışma zamanı yöntemi sonucu olamaz. Ben başlangıçta ona "(statik) değişkene bir çalışma zamanı yöntem çağrısı sonucu atamak" söyleyerek doğru olduğunu düşündüm rağmen, benim test bunu yapmak için bazı çemberler üzerinden atlamak zorunda gösteriyor.
Bu küçük bir nokta gibi görünebilir, ama gelecekteki bir felaketin tohumu olabilir. Ben gelecekte bazı öngörülemeyen bir nedenle bir başlatma yöntemine geçmek zorunda ediyorum varsayalım. Bu benim kontrol altında dosyalarında birkaç değişiklik yapmak zorunda kalıyoruz eğer sorunum yok. Ama, ne ben diğer geliştiricilere çok geniş ve gönderdiğiniz adres kütüphane değiştirirseniz?
Ben en azından, o yazmak için gidiyordu, ben onlar benim yeni sürüme yükseltmek istiyorsanız ONLARIN dosyalarında değişiklik yapmak için başka (ve 'Geleceğin Me') herkese anlatmak zorunda. 'Const' durumunda, her yerde onlar bunu kullanmak bir '$' eklemek zorunda olacak. Diğer senaryolarda, benim test bugün onlar daha az yapmak zorunda kalabilirsiniz gösterir, ancak bazı değişiklikler.
Nesne yönelimli kod varsayarsak, ben birçok dilde görülen, ve PHP için ekstra önem ihtiyacı var genel tavsiye izleyin - Her türlü görünür özellikleri KAÇININ const, statik ya da başka bir şey olsun. 'Alıcı' yöntemlerini kullanın!
Bu saçma bir performans isabet ve çirkin kod tarzı gibi görünebilir, ancak geleceği tahmin sürece, o gitmek için tek yoldur.
PHP: How to initialize static variables için Tjeerd Visser cevabı ve bir yumru vermek: Bkz. Onun iftiralarını görmezden - olası böcek ve diğer afetler yukarıda performansı ile ilgili, daha sonra başka bir dile geçmek olduğunu eğer.