• 締切済み

method宣言に変数等を使って可変に宣言できるか

method宣言時にmethod名に変数を利用して宣言する事はできるのでしょうか? ↓こんなような感じで $fuga = "test"; public function {$fuga}hoge() {  .... }

みんなの回答

noname#87667
noname#87667
回答No.4

補足説明、ありがとうございました。 自分の勉強不足で知らないだけかもしれませんが、PHPも含めて、動的に関数を定義することはできないような気がします(関数の動的定義をされている有識者の方がいらっしゃったら補足願います)。 というわけで、switch case文を使って似たような機能を作ってみました。何かの役に立てば幸いです。 <?php class HOGE{ var $var_hoge; // コンストラクタ function HOGE($arg){ $this->var_hoge=$arg; } function func_hoge(){ switch($this->var_hoge){ case "test1": echo "test1 ok<br>"; break; case "test2": echo "test2 ok<br>"; break; } } } $hoge=new HOGE("test1"); $hoge->func_hoge(); $hoge=new HOGE("test2"); $hoge->func_hoge(); ?>

すると、全ての回答が全文表示されます。
  • altrn
  • ベストアンサー率62% (10/16)
回答No.3

public function __call($name, $arguments) がつかえるかもしれません。 http://docs.php.net/manual/ja/language.oop5.overloading.php

すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

いまいち状況がわかりませんが、可変名の関数をつくりたいだけであれば create_functionをつかう手もあるでしょう。 <? $fuga = "test"; ${$fuga."hoge"} = create_function('$a=NULL','print $a;'); ${$fuga."hoge"}("x"); $testhoge("y"); fugahoge("z");//ERROR ?> PHPのバージョンによって多少やり方が違います。 PHP5.3ではラムダ関数が使えるようになったようですし

_777_
質問者

補足

すごくためになるコードです! この様な使い方もあるのですね! ちゃんと記述していなかったのですが、classに定義するmethodに対して行いたいのです。 yambejp様が提示していただいたコードはfunctionに対するものかと思います。

すると、全ての回答が全文表示されます。
noname#87667
noname#87667
回答No.1

補足希望です。 1.上記を実行した結果をご教示ください。 2.なぜmethod名に変数を使いたいのですか? 3.そもそも「method」は「function」のtypoですか?

_777_
質問者

補足

補足致します。 1.上記を実行した結果をご教示ください。 A.Parse error: syntax error, unexpected '{', expecting T_STRING in C:\xxxx\xxxxx\hoge.php on line 14 2.なぜmethod名に変数を使いたいのですか? A.method名のprefixを自由に定義したいなと思いました。 xxxhoge()のxxxを自由に定義したいです。 3.そもそも「method」は「function」のtypoですか? A.このmethodはclassのmethodになります。

すると、全ての回答が全文表示されます。

関連するQ&A