2015-04-02 23 views
2

我一直在努力,包括文件的列表內容:爲什麼我不能在'array_map'中使用'require'?

$files = [ 
    'a.php', 
    'b.php', 
]; 
$contents = array_map('require', $files); 

但這並沒有工作。我得到的錯誤是:

警告:array_map()預計參數1是一個有效的回調,功能「要求」未找到或無效的函數名

爲什麼會這樣,是有辦法使其工作?

回答

8

因爲require不是函數,所以它是一種語言結構。

你需要創建一個有效的回調函數來進行實際的需要,或使用自動加載磁帶機

+1

小邊注:由於需要是一個語言結構,也並不需要括號例如'require「test.php」'在沒有括號的情況下是完全有效的,但是你也可以使用括號來做 – Rizier123 2015-04-02 12:01:15

0

馬克·貝克同意,因爲它不是功能,您可以在情況下使用_autoload()要包括的類文件。

+0

'__autoload()'在開頭有兩個下劃線,不是一個 – 2015-04-02 12:15:03

1

正如大家已經注意到的那樣 - 它是一種語言結構。

你可以在這裏嘗試這種

$includes = array('a.php', 'b.php'); 

array_map(function($file){ 
     require $file; 
}, $includes); 
0
use autoload or spl_autoload_register 
to comfort work use namespaces 
or you may use array_wallk without return value and anonunys function 
`$files` = [ 
'a.php', 
    'b.php', 
]; 
`$contents` = array_map(`$files`, function(`$el`){ 
require(`$el`); 
}); 

//but foreach working faster: 

foreach(`$files` as `$item`){ 
require(`$item` 


);}` 
+0

我不認爲這些反引號應該在碼 – Rizier123 2015-04-02 12:18:51

相關問題