2016-11-30 77 views
1
$isac_start = microtime(true); 

function ilog($m) use ($isac_start){ 

    $time_elapsed_secs = microtime(true) - $isac_start; 
    file_put_contents(__DIR__.'/debug_log.txt', $m . " - time elapsed: " . $time_elapsed_secs . "\n", FILE_APPEND | LOCK_EX); 
} 

給我

未定義的變量$isac_start;

爲什麼?如何解決它?

+1

我很確定PHP的'use'語法只對匿名函數有效。我不知道爲什麼會這樣;我發現令人不安的是,命名和匿名函數的處理方式如此不同...... – Chris

回答

3

use關鍵字旨在與closures一起使用(請參閱示例3),但不打算將其用於常規功能。以下說明正確的用法:

$isac_start = microtime(true); 

$ilog = function ($m) use ($isac_start) { 
    var_dump($m); 
    var_dump($isac_start); 
}; 
$ilog('hello'); 
2

use不適用於命名函數,僅適用於匿名函數。爲了得到$isac_start到功能範圍,你應該只是把它作爲一個額外的參數,如:

function ilog($m, $isac_start) { ... 

use的存在是爲了對匿名函數能夠從父範圍,繼承變量,對於普通的用戶定義函數來說並不是必須的。

相關問題