2016-11-30 78 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的存在是为了对匿名函数能够从父范围,继承变量,对于普通的用户定义函数来说并不是必须的。

相关问题