目次
概要
ずっとやり方を探していたのですが、ようやくやり方が分かったのでメモ
環境
PHP 5.3.3
Codeigniter 2.2.22 (フレームワーク)
検証
まずは、コントローラーを作ります。
テストで以下のような test コントローラーを作ります。
#コントローラー <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Test extends CI_Controller { public $fast_cnt = 0, $cnt = 0; public function __construct() { parent::__construct(); } public function index() { $b = '文字'; $data['test'] = $this->name('', $b); echo $data['test']('うんこ'); echo $test('ごみ', '宝物'); // 宝物は適用されない echo $test('夢'); } // キャッシングされる private function name($a="", $b) { echo $this->fast_cnt++.'<br>'; // 一度しか動作しない return function ($a) use ($b) { $this->cnt++; // キャッシュ return $this->cnt.': '.$a.' とは言い切れない '.$b.'です<br>'; }; } ?>
以上のようなファイルを用意して、
検証してみると以下のような出力結果になる
0 1: うんこ とは言い切れない 文字です 2: ごみ とは言い切れない 文字です 3: 夢 とは言い切れない 文字です
つまり、変数に関数を格納することに成功していますね。
最後のひとこと
まだ検証が必要なところが色々あるので、
気が向いたらまた続きを書こうと思います。