2016-11-30 5 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は、匿名関数は、親スコープから変数を継承できるようにするために存在し、その通常のユーザー定義関数には本当に必要ではありません。

関連する問題