PHP ユーザー定義関数に永続変数を持たせる
やりたいことは、JavaScriptで言うクロージャを作ること。
関数外のスコープにある変数を、関数内で保持していく。
useを使えば出来ると思ったら出来なかった。
useを使えるのは無名関数のみだったのか…。
<?php (function() { $cnt = 1; function increment() use(&$cnt) { // syntax error, unexpected 'use' echo $cnt; $cnt++; } })();
正解は、静的変数を使うこと。
<?php function increment() { static $cnt = 1; echo $cnt; $cnt++; } increment(); // 1 increment(); // 2 increment(); // 3 var_dump($cnt); // null
無名関数 + use(参照渡し)
= 関数定義 + 静的変数
= JavaScriptのクロージャ
お粗末さまでした。