在递归调用之后是否有任何方法可以使用方法的变量(不将其作为参数发送)。
例如:
class Doc {
public function readDoc($file, $recursion = false) {
if ($recursion != false) {
// DO SOMETHING;
}
$filename = $file."Some added text";
$this->readDoc($filename, 1);
}
}
这里,是否可以使用第一次调用中发送的$file
的值(递归调用readDoc()
函数时)。
答案 0 :(得分:1)
您可以使用数组创建一个简单的堆栈,例如
class Doc {
private $stack = [];
public function readDoc($file, $recursion=false) {
if($recursion != false)
DO SOMETHING
$this->stack[] = $file;
$filename = $file."Some added text";
$this->readDoc($filename, 1);
}
}
然后将数组的第一个索引作为$ file变量。
答案 1 :(得分:0)
你也可以使用匿名函数在不同的范围内工作:
public function test($file, $recursion = false)
{
$rec = function($r) use ($file, &$rec)
{
if($r !== false) {
}
$filename = $file.'test';
return $rec($r);
};
return $rec($recursion);
}
在这种情况下,$ file变量始终保持不变 (请注意,上面的示例创建了一个无限循环)