モジュール拡張機能を持つスクリプトを作ろうと思った際に、どうやってユーザ定義的な関数を作るのだろうと思っていた。手持ちのPHPテキストには載っていなかったので、PHPマニュアルを読んでいた。ずっとクラスやらなんやらを読んでいたのだが、以下のような事が出来るらしい。
<?php function maid_function( $str ){ echo('おかえりなさい、'.$str.'様'); } $func = 'maid_function'; $func('南那津'); ?>
変数$funcに関数名maid_functionを入れればその関数$func( $str )として使えるらしい。じゃあ、クラスならどうなるか試してみた。
<?php class maid { private $mastername; function __construct( $str ){ $this->mastername = $str; } function hello(){ echo('おかえりなさい、'.$this->mastername.'様'); } } $func = 'maid'; $class = new $func('南那津'); $class->hello(); ?>
やっぱり通った。流石インタプリタ独特な感じ。なんて楽な言語なんだと思うと同時に、こういうのが重たい原因なんだろうなぁとか思う。つまり、関数を文字列として扱う限り、関数データベースは必要でその機構がどうやっているのやら。