Kullanarak sorun bir fonksiyonu ve değişken kapsam içinde gerektirir

3 Cevap php

MVC kurulum kullanıyorum ve benim görünümleri (. Php) içine javascript enjekte, henüz görünüm erişimi olan tüm değişkenleri javascript erişimine izin vermek için çalışıyorum. Benim nihai hedef benim javascript (örneğin bu yüzden olabilir alert(), bir ürünün ismi) PHP değişkenleri erişmek mümkün olmaktır.

İşte benim uygulama akışı bulunuyor:

  1. Çıktı tamponunu başlangıç
  2. (bu benim görünüm için veri içeren) bir iştiraki dizide ekstresi () çağrı
  3. view dosyasına ihtiyaç çağrı
  4. çıktı tamponunun içeriğini döndürür, ve tampon temizleyin
  5. echo tampon

Aşağıdaki gibi olan bir işlevi injectJS(), vardır:

function injectJS($jsFile) {
 require APP_DIR . $jsFile;
}

İşte ben enjekte etmek istiyorum Javascript (alert.js) bir örnek:

 <script type="text/javascript">
     alert("product name: <?php echo $product['name']; ?>");
 </script>

Yani, benim bakış dosya içinde, ben injectJS('alert.js'); diyoruz. Bu javascript enjekte, ama ben görünümü işlemek zaman tanımlanmamış bir değişken $product olan bir PHP haber almak. Ben elle require açıklama yazmak Ancak, her şey çalışıyor. I injectJS() mümkün kullanarak elde etmek için çalışıyorum nedir?

Edit
I forgot to mention that I did try passing the variables explicitly to injectJS(), ve it does work, but I don't want to have to always pass the variables. It could become messy & cumbersome if the view needs to pass many variables to the JS. Is there a way I could (within the function) grab the variables within the scope of the script responsible for calling the injectJS() ?

Edit 2
On second thought, passing the variables again is not a real issue, I think I'm just being greedy/lazy ;). I will just pass the variables when needed to injectJS(). Thanks for the responses

3 Cevap

Işlevinize $ ürün geçmesi ve işlev gövdesi içinde görünür olması veya içinde tanımlamak olacaktır:

function globalJs( $filename, $product ) {
    include $filename;
}

globalJs( 'foo.js', array( 'name' => 'test' ) );

Parametre olarak geçirilen veya global olarak ilan edilmedikçe PHP, değişkenler, fonksiyonların içinde görünmez.

Eğer var gibi sorun $ ürün değişkeni injectJS işlev içinde yok olduğunu; bu işlev dışında oluşturulan bir global değişken eğer, ya bir parametre olarak geçirmek, ya da fonksiyonun başında küresel olarak beyan etmelidir:

function injectJS($jsFile) {
    global $product;
    require APP_DIR . $jsFile;
}

Daha fazla bilgi almak için, daha özel, kılavuzda bölümünde Variable scope bir göz alabilir ve yaklaşık alt-bölüm The global keyword

Bu sadece iyi çalışır, ancak kapsamı sorunun değişken, işlev mevcut değil kaynaklanmaktadır. Bu deneyin:

function injectJS($jsFile) {
    $product = array('name' => 'test');
    require APP_DIR . $jsFile;
}

Bir noktada sizin işlevin kapsamında değişken tanımlamak zorunda. PHP global anahtar kelime değişken küresel varsa bunu sağlayacaktır. Bu yolda sorunlara yol açar yana olsa da, küresellerle kullanmaktan kaçınmak için deneyin.