PHP küresel değişkenler ve fonksiyon parametreleri arasındaki avantaj / dezavantaj?

6 Cevap php

üzgünüm bir acemi yaşıyorum ve ben bu kadar iyi bir soru tespit edemez, belki biraz sizin için son derece açık geliyor.

our use, aşağıda bu iki aynı ise hangi daha iyi?

function doSomething ($var1,$var2,..){
    ...
}

VEYA

function doSomething (){
    global $var1,$var2,..;
    ...
}

Bizim kullanımı ile ben ikinci senaryoda biz de küresel değişkenler 'değerini değiştirmek biliyorum demek. ama ne biz hangi bu işlevi yazma daha iyi bir yol olduğunu, bunu yapmak zorunda yoksa? geçen değişkenler bir işlev küresel bulunuyor duyuran daha az bellek sürer?

6 Cevap

Bellek kullanımı değersiz bir husustur. Bu kodla sonuçlanır ... öngörülemeyen var ... takip etmek kolay değil, olması çok daha önemli. Global değişkenleri ekleme IMO, bu açıdan çok kötü bir fikir olduğunu.

Eğer bellek kullanımı konusunda endişeleriniz varsa, yapılacak şey

function doSomething (&$var1, &$var2,..) {
   ...
}

Bu bellekte yeni kopyalarını oluşturmak referans değişkenleri geçmek ve olmayacaktır. Eğer fonksiyonun yürütülmesi sırasında bunları değiştirirseniz yürütme arayana döndüğünde, bu değişiklikler yansıtılacaktır.

Ancak, bu bile bellek nedenlerle gerekli olduğu için çok sıradışı olduğunu unutmayın. Referans ile kullanmak için olağan nedeni (arayan için onları değiştirerek) Yukarıda belirtilen nedenle içindir. Gitmek için yol hemen hemen her zaman basittir

function doSomething ($var1, $var2) {
    ...
}

Parametrelerini almak için yazmak. İdame çok daha önemli mikro-optimizasyon daha. Parametreleri alırken, değişkenler beklenmedik yerlerde değiştirilemez.

Bu sürece küresel yazılı asla garanti olarak iyi uygulama değil, ama sadece okumak rağmen parametrelerinde bir esnekliğe sahip olacak.

As as alternative, you can pass one parameter (or two if it really goes with the function, like exp) and the rest in an array of option (a bit like jquery does). This way you are not using globals, have some parameter flexibility and have clearly defined the defaults for each parameter.

function get_things($thing_name,$opt= array() {
   if(!isset($opt["order"])) $opt["order"]= 'ASC';
}

, Parametreleri geçmek küresellerle kaçının. Belirli bir durum için sadece ihtiyacınız kapsamını tutulması iyi kod tasarım bir ölçüsüdür. PHP değişken kapsamında bakmak isteyebilirsiniz ...

http://php.net/manual/en/language.variables.scope.php

En iyi uygulamalar ve bellek yönetimi ne bazı noktalardaki ile mükemmel bir kaynaktır.

PHP 4 gibi büyük değişkenler ile küresel kullanarak performansını önemli ölçüde etkiler.

$ Veri bulundurarak ikili harita verileri ve biraz daha farklı küresel kullanım için 0 veya 1 ise 10k testleri çalışan bir 3Mb dize aşağıdaki zaman sonuç verir:

function getBit($pos) {
global $data;
$posByte = floor($pos/8); 
...
}

t5 bit açık: 0.05495s, aramak: 5.04544s, hepsi: 5.10039s

function getBit($data) {
 global $_bin_point;
 $pos = $_bin_point; 
 $posByte = floor($pos/8); 
}

t5 bit açık: 0.03947s, aramak: 0.12345s, hepsi: 0.16292s

function getBit($data, $pos) {
$posByte = floor($pos/8); 
...
}

t5 bit açık: 0.05179s, aramak: 0.08856s, hepsi: 0.14035s

Yani, parametreleri geçen değişkenler> = 3Mb küresel kullanarak daha hızlıdır. Bir $ ve veri başvurusunu geçen ve PHP5 ile test değil test değil.