孤独プログラマー譚

孤独死が近い。

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クロージャ

お粗末さまでした。