質問: ['鈴木','佐藤']; foreach( $array as $a ){ $age= $args['age']; echo $a . 'の年齢は' . $age. 'です'; } } ```
回答: 質問を既存回答と違う捉え方をしました。 私の理解では、わからないのは、ループの回数ではなく、副作用のない参照透過な関数に同一の引数が渡されたとき、結果がキャッシュされるか、だと思います。 回答は、キャッシュされない、毎回実行される、です。 関数型言語でキャッシュされるとかって話を見たことがありますが、少なくともPHPはそんなことはしません。 ある関数(式や文)が副作用がないことを保証したり推論したりする仕組みがないからです。 具体的な話として、例1において$arrayが ['鈴木','佐藤','佐藤'] であったり、['鈴木','佐藤','鈴木'] であったりするケースを質問者様は$aが毎回違うと思いますか?phpのインタプリタはどう同じか違うか判断すればいいと思いますか?文字列ではなくオブジェクトだったらどうでしょうか? 少なくとも、現在のphpは実行される全ての文、式を毎回評価します。 実行されない不安があるなら杞憂です。 実行してほしくないなら、自力でメモ化などを実装しましょう。