Neden PHP dahil bir dosyaya değişkenleri geçemez?

4 Cevap php

Ben hiçbir gerçek çözünürlüğü ile before önce bu sorunu yaşadım. O yüzden ben size uzmanlar yardımcı olabilir umuyorum tekrar oluyor.

Ben $ _GET dizi dayanarak benim index.php üzerinde bir değişken. Yani bu kodu kullanabilirsiniz:

$admin = isset($_GET['admin']) ? $_GET['admin'] : "dashboard";

Bunun altında, benim düzeni eklemek için işlevini kullanın:

include_layout("admin_header.php");

hangi bu işlevi çağırır:

function include_layout($template="") {
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}

Şimdiye kadar, çok iyi, her şey çalışıyor. Ben admin_header.php dosyası içinde $ yönetici değişkeni echo etmeye çalışırsanız Ama, ben bir şey olsun. Bu set değil sanki. Hatta ben başlık dosyasını dahil hemen önce echo $admin; kullanarak ve orada çıkışları tarafından test, ama admin_header.php dosyanın perspektifinden set değil.

Bu neden olur? Dahil etmek bir işlevi kullanarak, yerine doğrudan dahil ile ilgili bir şey var mı? Ve eğer öyleyse, NEDEN bu konuda ki?

4 Cevap

Bunu açıkça söylemek sürece, global değişkenlere erişmek mümkün değildir. Sen değişken erişmek mümkün fonksiyonu global $admin koymak zorunda.

Nedeni bir işlev içinde dosyası içerir, bu yüzden küresel kapsamda $ yönetici değişkeni hayatlarını dahil dosya fonksiyonları kapsamında yaşarken.

function include_layout($template="") {
    global $admin;
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}

Diğer bir olasılık, özüt yöntemini kullanmaktır.

function include_layout($template="", $variables) {
    extract($variables, EXTR_SKIP);
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}

include_layout("test.php", array('admin' => $admin));

Onun bir işlevi kullanarak dosyayı dahil çünkü değişken kapsamı dışında olduğundan. Başka bir parametre işlevi değişken geçmek gerekiyor veya işlev içinde global olarak değişkeni bildirmek ya

ya da:

function include_layout($template="") {
    global $admin;
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}

veya:

function include_layout($template="",$admin="") {
    include(SITE_ROOT.DS.'layouts'.DS.$template);
}
include_layout("admin_header.php",$admin);

Açıkça bunun için sormak sürece PHP global değişkenler fonksiyonlar erişim vermez, çünkü bu önemli olabilir. Lütfen giriş sterilize da iyi bir fikir olacaktır.

Bu değişken bir kapsam belirleme mesele. $ Yönetici) (include_layout, fonksiyon içinde tanımlı değil. Kodunuzu birkaç yolu ayarlayabilirsiniz. Bir söylemek için "global $ yönetici;" iç include_layout (). Başka bir örneği için, değişken yalnızca o bir düzen kapsamında gereklidir, eğer "admin_header.php" içinde değişken, $ yönetici, ayarlamaktır.