2014-01-07 54 views
4

我只是想知道是否有人知道我爲什麼不能使用require_once作爲array_walk的回調。我可以將其包含在一個匿名函數和運行,但它提供了一個無效的回調錯誤用法:PHP array_walk require_once

$includes = array(
    'file1.php', 
    'file2.php', 
    'file3.php' 
); 
array_walk($includes, 'require_once'); 
+3

require_once不是一個函數,這是一個語言結構,因此它不能直接調用作爲回調函數 –

+1

...如果您嘗試使用'array_walk($ includes,'echo')'作爲'echo'是一種語言結構而不是函數,那麼它也會導致無效回調錯誤。 –

+0

+1以前的評論。但是,嚴重的是,爲什麼你不只是在這裏使用'foreach()'循環? – Spudley

回答

6

require_once不是一個PHP函數,但控制結構。

2

您可以創建

function my_require_once ($name) 
{ 
    require_once $name; 
} 

其他的人是正確的,它不是一個功能。它在您編寫的PHP代碼的模式之外運行。文件的內容被帶入全局命名空間,即使它在函數內被調用,如上所述。

我用這個,例如做的東西像

function my_log ($message, $extra_data = null) 
{ 
    global $php_library; 
    require_once "$php_library/log.php"; // big and complicated functions, so defer loading 

    my_log_fancy_stuff ($message, $extra_data); 
} 
2

你要浪費更多的時間找出什麼是錯的。 Just use:

$includes = array(
    'file1.php', 
    'file2.php', 
    'file3.php' 
); 
foreach($includes as $include) { 
    require_once($include); 
} 
0

正如Martin寫的,要求一次不是函數,所以你的array_walk解決方案沒有工作。如果您要包括多個文件,你可以嘗試使用此:

function require_multi($files) 
{ 
    $files = func_get_args(); 
    foreach($files as $file) 
    { 
     require_once($file); 
    } 
} 

用法:

require_multi("fil1.php", "file2.php", "file3.php");