2010-06-28 28 views
7

Tôi HAVA một chức năng mà trông giống như sau:Tôi có một yêu cầu ("config.php") với mảng, nhưng vẫn nhận được lỗi biến Undefined

require("config.php"); 

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

    $car = $car_park[3]; 
} 

và config.php mà giống như thế này :

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

Tại sao tôi nhận Notice: Undefined biến: car_park?

Trả lời

14

Hãy thử thêm

global $car_park; 

trong chức năng của bạn. Khi bạn bao gồm định nghĩa của $ car_park, nó đang tạo ra một biến toàn cầu, và để truy cập nó từ bên trong một hàm, bạn phải khai báo nó là toàn cầu, hoặc truy cập nó thông qua siêu GLOBALS $ superglobal.

Xem manual page on variable scope để biết thêm thông tin.

+0

tuyệt vời.Điều đó đã khắc phục được sự cố: D – ganjan

+0

Hoặc bạn có thể 'require()' tệp từ bên trong chính hàm đó. Điều đó cũng đặt nó vào đúng phạm vi. Tôi không thể nói rằng tôi thực sự khuyên bạn nên làm điều đó, nhưng vấn đề là: khi bạn đưa vào một tệp, nó chạy trong phạm vi câu lệnh include có trong đó. –

10

Mặc dù Paul mô tả những gì đang diễn ra, tôi sẽ cố giải thích lại.

Khi bạn tạo biến thuộc về một phạm vi cụ thể. Phạm vi là khu vực có thể sử dụng biến.

Ví dụ nếu tôi đã làm điều này

$some_var = 1; 

function some_fun() 
{ 
    echo $some_var; 
} 

biến không được phép trong phạm vi chức năng bởi vì nó đã không được tạo ra bên trong hàm. Đối với nó để làm việc bên trong một hàm, bạn phải sử dụng từ khóa toàn cầu vì vậy các ví dụ dưới đây sẽ làm việc

$some_var = 1; 

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

Đây là ngược lại, do đó bạn không thể làm như sau

function init() 
{ 
    $some_var = true; 
} 

init(); 

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

} 

Có một vài cách xung quanh điều này, nhưng một trong những đơn giản nhất của tất cả là sử dụng mảng $GLOBALS được cho phép bất cứ nơi nào trong kịch bản khi chúng là biến đặc biệt.

Vì vậy

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

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

Ngoài ra hãy chắc chắn rằng máy chủ của bạn có ký globals tắt trong INI của bạn để bảo mật. http://www.php.net/manual/en/security.globals.php

1

Bạn có thể thử để proxy nó vào chức năng của bạn, như:

chức năng foo ($ bar) {

(code)

$ xe = $ thanh [3];

(code)

}

Sau đó, khi bạn gọi nó là:

vang foo ($ quán bar);

Các vấn đề liên quan