【发布时间】:2014-11-09 15:16:25
【问题描述】:
所以我重新写了这篇文章,希望能更清楚地了解我正在尝试的内容。在某些数据解析期间,接收到与 someCode(s) 关联的 someValue(s)。目的是捕获具有最低优先级的 someCode 的特定值,而与 someCode/someValue (s) 接收的顺序无关。阻止这个工作的问题是每次调用私有函数时都会创建闭包,因此 $precedenceOfCodeCaptured 的值总是重置为 null。如果我能保持关闭状态,那么事情可能会按预期进行。
private function Foo($particularValue, $someValue, $someCode) {
switch ($someCode) {
case:
CODE1:
case:
CODE2:
$c = function () use ($someCode, $someValue) {
static $precedenceOfCodeCaptured = null;
$precedenceArray = array(
CODE2 => 1,
CODE1 => 2
);
if ((is_null($someValue))) {//first time the case statement matched because $someValue==null
$precedenceOfCodeCaptured = $precedenceArray[$someCode];
$particularValue = someValue;
} else if ($precedenceArray[$someCode] <= $precedenceOfCodeCaptured) {
$particularValue = someValue;
}
};
$c();
break;
...
}
}//end of private method
【问题讨论】:
-
你能在闭包之外声明静态并用
use传递它吗? -
不,这似乎不起作用。