在foreach循环中使用函数是否缓存结果,或每次调用函数?

In the following code:

function a(){
    echo 'a';
    return array(1,2,3,4);
}

foreach(a() as $t){
    echo $t;    
}

We can see a() is called only once, and it seems the returned value is cached...
But then I got to see this debate (see comments on the question) am I missing something?

No, your test is conclusive.

It makes no sense for it to evaluate the first expression any more than once. It's the basic premise of a foreach loop.

A for loop has three arguments, and it does evaluate the second and third each iteration.