2010-06-28 12 views
7

Ben şuna benzer bir işlev Hava dizilerle ("config.php") gerektirir, ama yine Tanımsız değişken hata alıyorum: şuna benzerBen bir

require("config.php"); 

function displayGta() 
{ 
    (... lots of code...) 

    $car = $car_park[3]; 
} 

ve config.php :

<?php 
$car_park = array ("Mercedes 540 K.", "Chevrolet Coupe.", "Chrysler Imperial.", "Ford Model T.", "Hudson Super.", "Packard Sedan.", "Pontiac Landau.", "Duryea."); 
(...) 
?> 

Neden Bildirimi alırım: Tanımsız değişken: car_park?

cevap

14

deneyin Fonksiyonunuzda

global $car_park; 

ekledi. $ Car_park'ın tanımını eklediğinizde, global bir değişken oluşturuyor ve buna bir işlevden erişmek için, onu global olarak ilan etmeli ya da $ GLOBALS süper küreselleri üzerinden erişmelisiniz.

Daha fazla bilgi için manual page on variable scope'a bakın.

+0

harika.Bu sorunu çözdünüz: D – ganjan

+0

Alternatif olarak, dosyayı işlevin içinden 'require' '() 'yapabilirsiniz. Bu da onu doğru kapsam içine koydu. Bunu yapmayi önerdigimi söyleyemem ama asagidaki nokta: bir dosya eklediginizde, include deyiminin icinde oldugu çalisir. –

10

Paul ne olup bittiğini açıklasa da tekrar açıklamaya çalışacağım.

Bir değişken oluşturduğunuzda, belirli bir kapsama aittir. Bir kapsam, bir değişkenin kullanılabileceği bir alandır. Bunun işlevi içinde oluşturulmadığı için değişken işlev içinde izin verilmez bu

$some_var = 1; 

function some_fun() 
{ 
    echo $some_var; 
} 

yapmak Örneğin

olsaydı. Bir işlev içinde çalışması için aşağıdaki örnek

$some_var = 1; 

function some_fun() 
{ 
    global $some_var; //Call the variable into the function scope! 
    echo $some_var; 
} 

çalışacak, böylece bunu yapamayacağınız Bu tersi olan küresel anahtar sözcüğünü kullanması birkaç yolu vardır

function init() 
{ 
    $some_var = true; 
} 

init(); 

if($some_var) // this is not defined. 
{ 

} 

aşağıdaki Bunun etrafında en basit olanı, özel değişkenler oldukları için komut dosyasının herhangi bir yerinde izin verilen $GLOBALS dizisini kullanmaktır.

Yani

$GLOBALS['config'] = array(
    'Some Car' => 22 
); 

function do_something() 
{ 
    echo $GLOBALS['config']['some Car']; //works 
} 

Ayrıca sunucu Kayıt globaller güvenlik için INI kapalıdır olduğundan emin olun. http://www.php.net/manual/en/security.globals.php

1

Sen gibi, fonksiyonun içine vekil o deneyebilirsiniz:

fonksiyon foo ($ bar) {

(kod)

$ araba = $ çubuğu [3];

(kod)

} Sonra bunu çağırdığınızda

:

yankı foo ($ bar);