2009-08-21 36 views
39

bằng PHP, cách một từ trở lại từ tập lệnh được bao gồm quay lại tập lệnh mà tập lệnh được đưa vào từ đó?Quay trở lại từ tệp bao gồm

IE:

1 - kịch bản chính 2 - ứng dụng 3 - bao gồm

Về cơ bản, tôi muốn lấy lại 3-2, trở lại() không hoạt động.

Mã trong 2 - ứng dụng

$page = "User Manager"; 
if($permission["13"] !=='1'){ 
    include("/home/radonsys/public_html/global/error/permerror.php"); 
    return(); 
} 
+1

Hãy chắc chắn rằng bạn đang gọi trở lại() ở phạm vi cấp cao nhất trong kịch bản bao gồm (tức là không phải trong một hàm) – jscharf

+0

Điều gì sẽ xảy ra khi bạn gọi trở lại từ tập lệnh 3/bao gồm? Bạn có thể gửi mẫu mã của bạn không? – PTBNL

+0

Chắc chắn: $ page = "Người quản lý người dùng"; nếu ($ permission ["13"]! == '1') { bao gồm ("/ home/radonsys/public_html/global/error/permerror.php "); return(); } – bear

Trả lời

93

includeme.php:

$x = 5; 
return $x; 

main.php:

$myX = (include 'includeme.php'); 

Đây là một trong những tính năng ít được biết đến của PHP, nhưng nó có thể được loại tốt đẹp cho thiết lập thực sự đơn giản tệp cấu hình.

+25

Cần lưu ý rằng trong hầu hết các trường hợp, điều này sẽ được coi là một kiểu mã hóa hơi xấu, vì nó xử lý tệp bao gồm như một hàm. Một cách tiếp cận 'chuẩn' hơn là đặt các hàm với tên thích hợp trong tệp bao gồm, bao gồm tệp (không có –

+5

Hãy cẩn thận khi sử dụng dấu ngoặc đơn (tức là, bao gồm ("x.php"), thay vì bao gồm "x.php"), khi nói đến trả về giá trị. Ví dụ 4 trong tài liệu PHP cho 'include': http://php.net/manual/en/function.include.php – ravi

+1

Điểm tuyệt vời.Tôi thường cố gắng tránh sử dụng parens theo cách đó, vì chúng không có ý nghĩa nhất mọi người nghĩ rằng họ có ý nghĩa trong bối cảnh đó. đã từng thấy một cuộc đấu tranh lập trình với: 'include ('x.php') hoặc chết;' –

17

return nên làm việc, như đã nêu trong the documentation.

Nếu tệp tập lệnh hiện tại được bao gồm() ed hoặc require() ed, thì điều khiển được chuyển trở lại tệp gọi. Hơn nữa, nếu tệp tập lệnh hiện tại được bao gồm() ed, thì giá trị được đưa ra cho return() sẽ được trả về dưới dạng giá trị của lệnh gọi include().

6

Hm, số PHP manual không đồng ý với bạn. return sẽ bảo lãnh bạn khỏi một tệp được bao gồm. Nó sẽ không làm việc từ bên trong một chức năng, tất nhiên.

9

Tôi biết rằng điều này đã được trả lời, nhưng tôi nghĩ rằng tôi có một giải pháp tốt đẹp ...

main.php

function test() 
{ 
    $data = 'test'; 
    ob_start(); 
     include(dirname (__FILE__) . '/included.php'); 
    return ob_get_clean(); 
} 

included.php

<h1>Test Content</h1> 
<p>This is the data: <?php echo $data; ?></p> 

Tôi chỉ bao gồm $data để cho thấy rằng bạn vẫn có thể chuyển dữ liệu đến mức bao gồm tập tin uded, cũng như trả lại tập tin đi kèm.

3

Xem Ví dụ # 5 trong tài liệu cho include.

Bạn có thể lấy giá trị trả về của kịch bản khi bao gồm nó, như:

$foo = include 'script.php'; 
+0

Ah, cảm ơn! Có, tôi nên đoán. –

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