目次
概要
ずっとやり方を探していたのですが、ようやくやり方が分かったのでメモ
環境
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: 夢 とは言い切れない 文字です
つまり、変数に関数を格納することに成功していますね。
最後のひとこと
まだ検証が必要なところが色々あるので、
気が向いたらまた続きを書こうと思います。