PR

[PHP] 関数・メソッドの存在を調べる

多数の function を持った class を作った。この function は、(微妙な圧縮記法で)1行程度の関数を定義している。その function をユーザに選択させようと一覧を得ようとしたがうまく行かなかった。そこで、仕方なく html の form を使って radio から選択させる。

しかし、そのまま実行したのでは危険があるので、少なくともそれが実行出来るのか確かめてみようと思う。function_exist() だろうと検討をつけてその周辺をテストするもうまく行かない。ようやく見つけたサイトによって method_exist() で実行できることがわかったのでメモ。

スポンサードリンク

周辺の関数

  • call_user_func_array — パラメータの配列を指定してユーザ関数をコールする
  • call_user_func — 最初の引数で指定したユーザ関数をコールする
  • create_function — 匿名関数 (ラムダ形式) を作成する
  • forward_static_call_array — 静的メソッドをコールし、引数を配列で渡す
  • forward_static_call — 静的メソッドをコールする
  • func_get_arg — 引数のリストから要素をひとつ返す
  • func_get_args — 関数の引数リストを配列として返す
  • func_num_args — 関数に渡された引数の数を返す
  • function_exists — 指定した関数が定義されている場合に TRUE を返す
  • get_defined_functions — 定義済みの全ての関数を配列で返す
  • register_shutdown_function — シャットダウン時に実行する関数を登録する
  • register_tick_function — 各 tick で実行する関数を登録する
  • unregister_tick_function — 各 tick の実行用の関数の登録を解除する

テストスクリプト

目的・条件

入力された文字列の関数がクラス内に存在するかを確かめ、存在するなら実行(した結果)、不存在なら none を返す。(CakePHP 1.3)
つまり、 $this->WeightsAndMeasures->{$input_string}(ARGS)  が実行出来るかテストする。

class WeightsAndMeasuresComponent extends Object{
  function mile_km($km){
      ・・・・
  }
}

テストスクリプト

$f = 'mile_km'; // 入力されたと仮定して
$ret = method_exists($this->WeightsAndMeasures, $f) ? $this->WeightsAndMeasures->{$f}(100) : 'none';
debug($ret);

参考文献

コメント