我们可以得到ob水平。我们可以得到当前ob栈的长度。但是我们可以在第n层引用 ob 栈吗?我真的会受益于在特定深度获得缓冲区的长度。
假设一个例子:
$length = array();
ob_start();
echo "1";
$length[] = ob_get_length(); // length of current stack (depth 1) is 1
ob_end_clean();
ob_start();
echo "11";
ob_start();
echo "2";
$length[] = ob_get_length(); // length of current stack (depth 2) is 1
ob_end_clean();
ob_end_clean();
ob_start();
echo "111";
ob_start();
echo "22";
ob_start();
echo "3";
$length[] = ob_get_length(); // length of current stack (depth 3) is 1
ob_end_clean();
ob_end_clean();
ob_end_clean();
print_r($length);
输出是:
Array
(
[0] => 1
[1] => 1
[2] => 1
)
每个最深堆栈的长度为 1。这与预期一致。
我的应用程序具有递归输出生成,并且一些输出堆栈必须知道父系统生成堆栈的长度。我不能ob_get_length()
仅仅因为其他人可以将生成器包装在他们自己的 ob 堆栈中而依赖于在打开新堆栈之前使用 right。这将破坏应用程序。
有什么选择吗?谢谢。
编辑:
为了说明我需要得到什么:
ob_start();
echo "111"; // <-- this is the stack of interest
ob_start();
echo "22";
ob_start();
echo "3";
$length[] = ob_get_length(); // length of current stack (depth 3) is 1
$top_stack_len = get_length_of_ob_stack(1); // expected length here should be 3 (strlen("111") == 3)
ob_end_clean();
ob_end_clean();
echo "some more chars to change length of stack 1";
ob_end_clean();
echo $top_stack_len; // I'm expecting to see 3 here.