Trả lời được chuyển từ một câu hỏi khác. Bao gồm thông tin bổ sung về các giới hạn của việc sử dụng hàm trợ giúp, cùng với hàm trợ giúp để tải tất cả các biến trong các tệp đi kèm.all variables in included files.
Không có bản địa "bao gồm tất cả từ thư mục" trong PHP. Tuy nhiên, nó không phức tạp lắm để hoàn thành. Bạn có thể tạo ra đường dẫn cho các tệp .php
và bao gồm các tệp trong một vòng lặp:
foreach [glob["test/*.php"] as $file] {
include_once $file;
}
Trong câu trả lời này, tôi đang sử dụng include_once
để bao gồm các tệp. Xin vui lòng thay đổi điều đó thành include
, require
hoặc require_once
khi cần thiết.
Bạn có thể biến điều này thành một hàm trợ giúp đơn giản:
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
Nếu các tệp của bạn xác định các lớp, chức năng, hằng số, vv không phụ thuộc vào phạm vi, điều này sẽ hoạt động như mong đợi. Tuy nhiên, nếu tệp của bạn có các biến, bạn phải "thu thập" chúng bằng get_defined_vars[]
và trả lại chúng từ hàm. Mặt khác, chúng sẽ "bị mất" vào phạm vi chức năng, thay vì được nhập vào phạm vi ban đầu., this will work as expected. However, if your file has variables, you have to "collect" them with get_defined_vars[]
and return them from the function. Otherwise, they'd be "lost" into the function scope, instead of being imported into the original scope.
Nếu bạn cần nhập các biến từ các tệp được bao gồm trong một hàm, bạn có thể:, you can:
function load_vars[string $path]: array {
include_once $path;
unset[$path];
return get_defined_vars[];
}
Hàm này, mà bạn có thể kết hợp với
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
0, sẽ trả về một mảng với tất cả các biến được xác định trong tệp đi kèm. Nếu bạn muốn tải các biến từ nhiều tệp, bạn có thể:function import_folder_vars[string $dirname]: array {
$vars = [];
foreach [glob["{$dirname}/*.php"] as $file] {
// If you want to combine them into one array:
$vars = array_merge[$vars, load_vars[$file]];
// If you want to group them by file:
// $vars[$file] = load_vars[$file];
}
return $vars;
}
Những điều trên sẽ, tùy thuộc vào sở thích của bạn [nhận xét/không cần thiết khi cần thiết], hãy trả lại tất cả các biến được xác định trong các tệp được bao gồm dưới dạng một mảng hoặc được nhóm bởi các tệp mà chúng được xác định.
Trên một lưu ý cuối cùng: Nếu tất cả những gì bạn cần làm là tải các lớp, thay vào đó là một ý tưởng tốt để chúng tự động tải theo yêu cầu bằng cách sử dụng
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
1. Sử dụng trình tải tự động giả định rằng bạn đã cấu trúc hệ thống tập tin của mình và đặt tên cho các lớp và không gian tên của bạn một cách nhất quán.all you need to do is load classes, it's a good idea to instead have them autoloaded on demand using function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
1. Using an autoloader assumes that you have structured your filesystem and named your classes and namespaces consistently. Ray.paseur thường sử dụng gmail ¶
8 năm trước
Các tài liệu dưới đây cũng áp dụng để yêu cầu.require.
Các tệp được bao gồm dựa trên đường dẫn tệp được cung cấp hoặc, nếu không được cung cấp, bao gồm_path được chỉ định. Nếu tệp không được tìm thấy trong bao gồm_path, include
cuối cùng sẽ kiểm tra thư mục riêng của tập lệnh gọi và thư mục làm việc hiện tại trước khi không thành công. Cấu trúc include
sẽ phát ra một
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
5 nếu nó không thể tìm thấy một tệp; Đây là hành vi khác với yêu cầu, sẽ phát ra một function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
6.function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
5 if it cannot find a file; this is different behavior from require, which will emit an
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
6. Lưu ý rằng cả include
và require
đều tăng thêm
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
5, nếu không thể truy cập tệp, trước khi tăng lần lượt là function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
5 hoặc function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
6 cuối cùng.function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
5s, if the file cannot be accessed, before raising the final function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
5 or function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
6, respectively. Nếu một đường dẫn được xác định - cho dù là tuyệt đối [bắt đầu với một ký tự ổ đĩa hoặc
function load_vars[string $path]: array {
include_once $path;
unset[$path];
return get_defined_vars[];
}
2 trên Windows hoặc function load_vars[string $path]: array {
include_once $path;
unset[$path];
return get_defined_vars[];
}
3 trên các hệ thống UNIX/Linux] hoặc liên quan đến thư mục hiện tại [bắt đầu bằng function load_vars[string $path]: array {
include_once $path;
unset[$path];
return get_defined_vars[];
}
4 hoặc function load_vars[string $path]: array {
include_once $path;
unset[$path];
return get_defined_vars[];
}
5] - bao gồm_path sẽ bị bỏ qua hoàn toàn. Ví dụ: nếu một tên tệp bắt đầu bằng function load_vars[string $path]: array {
include_once $path;
unset[$path];
return get_defined_vars[];
}
6, trình phân tích cú pháp sẽ tìm trong thư mục cha để tìm tệp được yêu cầu.Để biết thêm thông tin về cách xử lý PHP bao gồm các tệp và đường dẫn bao gồm, hãy xem tài liệu cho bao gồm_path.
Khi một tệp được bao gồm, mã nó chứa kế thừa phạm vi biến của dòng mà bao gồm xảy ra. Bất kỳ biến nào có sẵn ở dòng đó trong tệp gọi sẽ có sẵn trong tệp được gọi, từ thời điểm đó trở đi. Tuy nhiên, tất cả các chức năng và các lớp được xác định trong tệp bao gồm có phạm vi toàn cầu.
Ví dụ #1 Ví dụ include
function load_vars[string $path]: array {
include_once $path;
unset[$path];
return get_defined_vars[];
}
8function load_vars[string $path]: array {
include_once $path;
unset[$path];
return get_defined_vars[];
}
9function import_folder_vars[string $dirname]: array {
$vars = [];
foreach [glob["{$dirname}/*.php"] as $file] {
// If you want to combine them into one array:
$vars = array_merge[$vars, load_vars[$file]];
// If you want to group them by file:
// $vars[$file] = load_vars[$file];
}
return $vars;
}
0Nếu bao gồm xảy ra bên trong một hàm trong tệp gọi, thì tất cả các mã có trong tệp được gọi sẽ hoạt động như thể nó đã được xác định bên trong hàm đó. Vì vậy, nó sẽ theo phạm vi biến của chức năng đó. Một ngoại lệ cho quy tắc này là các hằng số ma thuật được đánh giá bởi trình phân tích cú pháp trước khi bao gồm xảy ra.
Ví dụ #2 bao gồm trong các chức năng
function import_folder_vars[string $dirname]: array {
$vars = [];
foreach [glob["{$dirname}/*.php"] as $file] {
// If you want to combine them into one array:
$vars = array_merge[$vars, load_vars[$file]];
// If you want to group them by file:
// $vars[$file] = load_vars[$file];
}
return $vars;
}
1function import_folder_vars[string $dirname]: array {
$vars = [];
foreach [glob["{$dirname}/*.php"] as $file] {
// If you want to combine them into one array:
$vars = array_merge[$vars, load_vars[$file]];
// If you want to group them by file:
// $vars[$file] = load_vars[$file];
}
return $vars;
}
2function import_folder_vars[string $dirname]: array {
$vars = [];
foreach [glob["{$dirname}/*.php"] as $file] {
// If you want to combine them into one array:
$vars = array_merge[$vars, load_vars[$file]];
// If you want to group them by file:
// $vars[$file] = load_vars[$file];
}
return $vars;
}
3Khi bao gồm một tệp, phân tích cú pháp rơi ra khỏi chế độ PHP và vào chế độ HTML ở đầu tệp đích và tiếp tục lại ở cuối. Vì lý do này, bất kỳ mã nào bên trong tệp đích sẽ được thực thi dưới dạng mã PHP phải được đặt trong các thẻ bắt đầu và kết thúc PHP hợp lệ.
Nếu "URL bao gồm trình bao bọc" được bật trong PHP, bạn có thể chỉ định tệp được bao gồm bằng URL [thông qua HTTP hoặc trình bao bọc được hỗ trợ khác - xem các giao thức và trình bao quy hoạt được hỗ trợ cho danh sách các giao thức] thay vì tên đường dẫn cục bộ. Nếu máy chủ đích diễn giải tệp đích làm mã PHP, các biến có thể được chuyển đến tệp được bao gồm bằng chuỗi yêu cầu URL như được sử dụng với HTTP GET. Điều này không hoàn toàn nói điều tương tự như bao gồm tệp và việc kế thừa phạm vi biến của tệp cha mẹ; Kịch bản thực sự đang được chạy trên máy chủ từ xa và kết quả sau đó được đưa vào tập lệnh cục bộ.
Ví dụ #3 include
đến HTTP
function import_folder_vars[string $dirname]: array {
$vars = [];
foreach [glob["{$dirname}/*.php"] as $file] {
// If you want to combine them into one array:
$vars = array_merge[$vars, load_vars[$file]];
// If you want to group them by file:
// $vars[$file] = load_vars[$file];
}
return $vars;
}
5function import_folder_vars[string $dirname]: array {
$vars = [];
foreach [glob["{$dirname}/*.php"] as $file] {
// If you want to combine them into one array:
$vars = array_merge[$vars, load_vars[$file]];
// If you want to group them by file:
// $vars[$file] = load_vars[$file];
}
return $vars;
}
6function import_folder_vars[string $dirname]: array {
$vars = [];
foreach [glob["{$dirname}/*.php"] as $file] {
// If you want to combine them into one array:
$vars = array_merge[$vars, load_vars[$file]];
// If you want to group them by file:
// $vars[$file] = load_vars[$file];
}
return $vars;
}
7Cảnh báo
Cảnh báo an ninh
Tệp từ xa có thể được xử lý tại máy chủ từ xa [tùy thuộc vào phần mở rộng tệp và thực tế nếu máy chủ từ xa chạy PHP hay không] nhưng nó vẫn phải tạo ra một tập lệnh PHP hợp lệ vì nó sẽ được xử lý tại máy chủ cục bộ. Nếu tệp từ máy chủ từ xa nên được xử lý ở đó và chỉ xuất ra, readFile [] có chức năng tốt hơn nhiều để sử dụng. Nếu không, cần phải chăm sóc đặc biệt để bảo mật tập lệnh từ xa để tạo mã hợp lệ và mong muốn.readfile[] is much better function to use. Otherwise, special care should be taken to secure the remote script to produce a valid and desired code.
Xem thêm các tệp từ xa, fopen [] và file [] để biết thông tin liên quan.fopen[] and file[] for related information.
Trả lại xử lý: include
Trả về
function import_folder_vars[string $dirname]: array {
$vars = [];
foreach [glob["{$dirname}/*.php"] as $file] {
// If you want to combine them into one array:
$vars = array_merge[$vars, load_vars[$file]];
// If you want to group them by file:
// $vars[$file] = load_vars[$file];
}
return $vars;
}
9 về thất bại và đưa ra cảnh báo. Thành công bao gồm, trừ khi được ghi đè bởi tệp đi kèm, trả về .php
0. Có thể thực thi câu lệnh trả về bên trong một tệp được bao gồm để chấm dứt xử lý trong tệp đó và quay lại tập lệnh gọi nó. Ngoài ra, có thể trả về các giá trị từ các tệp được bao gồm. Bạn có thể lấy giá trị của cuộc gọi bao gồm như bạn sẽ làm cho một hàm bình thường. Tuy nhiên, điều này không thể xảy ra khi bao gồm các tệp từ xa trừ khi đầu ra của tệp từ xa có thẻ bắt đầu và kết thúc PHP hợp lệ [như với bất kỳ tệp cục bộ nào]. Bạn có thể khai báo các biến cần thiết trong các thẻ đó và chúng sẽ được giới thiệu tại bất kỳ điểm nào được đưa vào tệp.return statement inside an included file in order to terminate processing in that file and return to the script which called it. Also, it's possible to return values from included files. You can take the value of the include call as you would for a normal function. This is not, however, possible when including remote files
unless the output of the remote file has valid PHP start and end tags [as with any local file]. You can declare the needed variables within those tags and they will be introduced at whichever point the file was included. Bởi vì include
là một cấu trúc ngôn ngữ đặc biệt, dấu ngoặc đơn không cần thiết xung quanh lập luận của nó. Hãy cẩn thận khi so sánh giá trị trả lại.
Ví dụ #4 So sánh giá trị trả về của bao gồm
.php
2
Ví dụ #5 include
và câu lệnh trả vềreturn statement
.php
4
.php
5
.php
6 .php
7 là giá trị .php
0 vì bao gồm đã thành công. Lưu ý sự khác biệt giữa các ví dụ trên. Việc sử dụng đầu tiên trả về trong tệp được bao gồm trong khi tài liệu khác thì không. Nếu tệp không thể được bao gồm, .php
9 sẽ được trả về và
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
5 được phát hành.return within the included file while the other does not. If the file can't be included, .php
9 is returned and function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
5 is issued. Nếu có các chức năng được xác định trong tệp bao gồm, chúng có thể được sử dụng trong tệp chính độc lập nếu chúng trước khi trả về hoặc sau. Nếu tệp được bao gồm hai lần, PHP sẽ gây ra lỗi nghiêm trọng vì các chức năng đã được khai báo. Nên sử dụng bao gồm_once thay vì kiểm tra xem tệp đã được bao gồm và có điều kiện trả về bên trong tệp được bao gồm.return or after. If the file is included twice, PHP will raise a fatal error because the functions were already declared. It is recommended to use include_once instead of checking if the file was already included and conditionally return inside the included file.
Một cách khác để "bao gồm" một tệp PHP vào một biến là nắm bắt đầu ra bằng cách sử dụng các chức năng điều khiển đầu ra với include
. Ví dụ:
Ví dụ #6 Sử dụng bộ đệm đầu ra để bao gồm tệp PHP vào chuỗi
include_once
2
include_once
3
include_once
4Để tự động bao gồm các tệp trong các tập lệnh, hãy xem thêm các tùy chọn cấu hình auto_prepend_file và auto_append_file trong php.ini.
Lưu ý: Bởi vì đây là một cấu trúc ngôn ngữ và không phải là một hàm, nó không thể được gọi là sử dụng các hàm biến hoặc các đối số được đặt tên.: Because this is a language construct and not a function, it cannot be called using variable functions, or named arguments.
Xem thêm Yêu cầu, Yêu cầu_once, Bao gồm_once, get_included_files [], readFile [], ảo [] và bao gồm_path.require, require_once, include_once, get_included_files[], readfile[], virtual[], and include_path.
Snowyurik tại gmail dot com ¶
14 năm trước
include_once
5
Phát ban ¶ ¶
7 năm trước
include_once
6
include_once
7
include_once
8
include_once
9John Carty ¶ ¶
6 năm trước
include
0
include
1
include
2
include
3
include
4
include
5
include
6
include
7
include
8Anon ¶ ¶
10 năm trước
include
9
Lỗi17191 tại Gmail Dot Com ¶ ¶
7 năm trước
require
0
require
1
require
2
require
3
include
8John Carty ¶ ¶
14 năm trước
require
5
require
6
include
8
Phát ban ¶ ¶
14 năm trước
require
8
require
9
require_once
0
require_once
1
require_once
2
require_once
3
require_once
4
include
8Phát ban ¶ ¶
7 năm trước
require_once
6
require_once
7
include
8John Carty ¶ ¶
6 năm trước
require_once
9
get_defined_vars[]
0
include
8Anon ¶ ¶
10 năm trước
get_defined_vars[]
2
Lỗi17191 tại Gmail Dot Com ¶ ¶
WADE. ¶
get_defined_vars[]
3
get_defined_vars[]
4
include
8Rick Garcia ¶ ¶
jbezorg tại gmail dot com ¶
get_defined_vars[]
6
get_defined_vars[]
7
get_defined_vars[]
8
get_defined_vars[]
9
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
00include
84 năm trước ¶
jbezorg tại gmail dot com ¶
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
02function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
03function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
04include
84 năm trước ¶
Ray.paseur thường sử dụng gmail ¶
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
06function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
07function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
08function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
09function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
10function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
11function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
128 năm trước ¶
Anonphpuser ¶
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
1317 ngày trước ¶
splayer ¶
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
14function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
15include
811 năm trước ¶
14 năm trước
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
17function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
18function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
19function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
20function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
21Phát ban ¶ ¶
7 năm trước
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
22function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
23function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
24function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
25function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
26function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
27include
8John Carty ¶ ¶
6 năm trước
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
29function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
30function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
31function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
32function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
33function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
34include
8Anon ¶ ¶
7 năm trước
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
36function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
37function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
38function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
39John Carty ¶ ¶
14 năm trước
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
40function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
41include
8Phát ban ¶ ¶
7 năm trước
function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
43function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
44function import_folder[string $dirname] {
foreach [glob["{$dirname}/*.php"] as $file] {
include_once $file;
}
}
45John Carty ¶