2012-06-18 32 views
24
function parts($part) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo($tructure . $part . '.php'); 
} 

Hàm này sử dụng biến số $site_url được xác định ở đầu trang này, nhưng biến này không được chuyển vào hàm.Biến chức năng sử dụng PHP từ bên ngoài

Làm cách nào để chúng tôi trả lại chức năng?

Trả lời

51

Thêm tham số thứ hai

Bạn cần phải vượt qua tham số bổ sung cho chức năng của bạn:

function parts($site_url, $part) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo $structure . $part . '.php'; 
} 

Trong trường hợp đóng cửa

Nếu bạn muốn sử dụng đóng cửa sau đó bạn có thể biến nhập khẩu vào phạm vi hiện tại (từ khóa use):

$parts = function($part) use ($site_url) { 
    $structure = 'http://' . $site_url . 'content/'; 
    echo $structure . $part . '.php'; 
} 

global - một thực tế xấu

bài này thường được đọc, vì vậy một cái gì đó cần phải được làm rõ về global. Sử dụng nó được coi là một thực tế xấu (tham khảo thisthis).

Đối với tính đầy đủ vì đây là giải pháp sử dụng global:

function parts($part) { 
    global $site_url; 
    $structure = 'http://' . $site_url . 'content/'; 
    echo($structure . $part . '.php'); 
} 

Nó hoạt động bởi vì bạn phải nói với người phiên dịch mà bạn muốn sử dụng một biến toàn cục, bây giờ nó nghĩ đó là một biến địa phương (trong vòng chức năng của bạn).

đề nghị đọc:

0

Chỉ cần đặt trong hàm: toàn cầu $ site_url;

34

Hoặc, bạn có thể đưa các biến vào từ phạm vi bên ngoài bằng cách sử dụng các đóng bằng từ khóa use.

$myVar = "foo"; 
$myFunction = function($arg1, $arg2) use ($myVar) 
{ 
return $arg1 . $myVar . $arg2; 
}; 
+1

Cách này hơi khó, ví dụ nếu bạn có 10 biến theo cách này sẽ khó. – M98

+1

php hiển thị lỗi, tại sao? Lỗi phân tích cú pháp: lỗi cú pháp, 'sử dụng' bất ngờ (T_USE), mong đợi '{' – M98

+1

@Kermani có thể bạn đang sử dụng phiên bản PHP cũ hơn không có cú pháp 'use'. Cú pháp này đã được giới thiệu trong PHP5.3. Xem https://wiki.php.net/rfc/closures –

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