PHP Global değişkenleri erişmek için yöntemler [kapalı]

4 Cevap php

$GLOBALS['current_view'] ve global $current_view, hangi neden tercih ediyorlar?

4 Cevap

Ne, yöntemleri içine parametreleri geçirmek. Eğer küresellerle kullanmak her zaman, Tanrı bir kedi yavrusu öldürür.

Ben küresellerle kullanmanız gerekir, ve ben onları, veba gibi kaçınmak, ben küresel $ Geçerli_görünüm kullanın. Ben sadece her zaman bir çok lokal olarak super globalleri dayanarak daha değişken kapsamlı olmasını tercih. Ama ben tercih onun meselesi düşünüyorum.

Ben sadece globalleri gibi değişkenleri bildirme konusunda endişelenmenize gerek kalmadan kodu kopyalayıp yapıştırın çünkü Şahsen, ben $GLOBALS['glob'] sözdizimi tercih ederim. (Hatta orada belki sadece genel yapılandırma direktifleri ve ...) en az küresellerle tutmaya çalışmalısınız aklınızda tutun.

Bununla beraber, iki yöntem tam olarak eş anlamlı değildir; hafif bir fark var:

function func() {
    var_dump($GLOBALS['glob']);
}

function func2() {
    global $glob;
    var_dump($glob);
}

Küresel 'glob' yoksa ilk bir uyarı yayacaktır. İkinci bir olmaz.

: Birinci durumda, $GLOBALS['glob'] bir argüman olarak göndermek için derler

     3      FETCH_R                      global              $0      'GLOBALS'
     4      FETCH_DIM_R                                      $1      $0, 'glob'

Sen GLOBALS ve dizinini glob bir okuma bağlamında getiriliyor konum; Hiçbir değişken oluşturulur.

İkincisi derler

     compiled vars:  !0 = $glob
     ...
     2      FETCH_W                      global lock         $0      'glob'
     3      ASSIGN_REF                                               !0, $0

Eğer küresel glob bir başvuru yaratıyor, bu yüzden yoksa örtülü oluşturulur.

Ayrıca:

function func_unset() {
    unset($GLOBALS['glob']);
}

function func2_unset() {
    global $glob;
    unset($glob);
}

Fonksiyonu func(), küresel, func2_unset sadece oluşturulan başvuru aslında unset yok olacaktır.

func2 çok benzer olduğunu not edin:

function func3() {
    $glob =& $GLOBALS['glob'];
}

Bu ancak potansiyel olarak daha az etkilidir. Bu derler

     2      FETCH_W                      global              $0      'GLOBALS'
     3      FETCH_DIM_W                                      $1      $0, 'glob'
     4      ASSIGN_REF                                               !0, $1

FTW statik sınıflar

class View {
    private static $current = null;
    public static function get_current() {
        return self::$current;
    }
}