2016-07-11 38 views
0

ここでは誰かが答えることができるのか疑いがあります。 私のコードは素晴らしいですが、私は確かに静かです。どういうわけか間違っています。 これを実現するには、より簡単で洗練された方法が必要です。引数を持つ関数で引数を使用して関数を呼び出す方法

このクラスを想定します。そして、あなたは以下のように(私の場合はPHPファイルに組み込まれたHTMLメニュー)どこかのクラスの上に呼び出す

class myClass { 
    public static function myFunctionOne ($arg_one, $arg_two, $arg_tree) { 
     echo $arg_one; 
     myClass::$arg_two($arg_tree); 
    } 
    public static function myFunctionTwo ($arg_four) { 
     echo $arg_four; 
    } 
} 

myClass::myFunctionOne('echo a string', 'myFunctionTwo', 'echo forth value'); 

これは素晴らしい作品、およびそれ出力:

echo a string echo forth value 

しかし、それは正当ですか?

それは私には似ています。 そのような関数を使用して、引数を持つ関数内のArgumetnsを持つ関数を呼び出すことはできますか?

+1

はい、正当です。このように、ユーザ入力に依存する関数を動的に呼び出すことができます。また、http://php.net/manual/de/function.call-user-func.phpをチェックしてみてください。もう1つの質問は次のとおりです。動的関数呼び出しが本当に必要ですか?ほとんど** **ではありません。 – Xatenev

+0

まあ、私はほとんど確信しています、私は違うことができますが、上記のケースは私がやっているものの要約されたスニペットです。 私は現在、いくつかのOOPを学ぼうとしています(そして、上記の例はOOP以外のものです:P)。上記はBootstrap Accordionの小さな部分です。Tab idとhrefを作成したいのですが、argsを変更するだけで、同じ機能のbodyとmenuタイトルをすべて呼び出すことができます。おそらくもっと良い方法がありますが、方法について学ぶ人もいます:) 正当な方法であることを確認していただきありがとうございます。「それはうっかり」ケースではありません。 – smileBeda

+0

確かに動作します。 – peter

答えて

2

これを行うことはできますか?絶対に。あなたはこれをするべきですか?そうでないかもしれない。

PHPでは、これはVariable Functionsと呼ばれています。基本的に、それに添付された(の変数は、呼び出す関数またはメソッドの名前として使用されます。

複数の引数を渡す必要がある場合は、最後の関数の引数を配列として渡してから、最終変数関数を呼び出すときに配列を展開できます。

しかし、それは他の理由で、素晴らしいデザインパターンではないかもしれません。そのため、コードを維持するのが難しくなる可能性があります。 myClass::myFunctionOne()の呼び出し元のAbstractionのプリンシパルに違反して、myClassのメソッド/ファンクションの種類とその引数について知っている必要があります。

ここでは「関数」という用語を使用していますが、クラス内にある場合は「メソッド」と呼ばれます。

+0

' myClass :: myFunctionOne() 'の代わりに' self :: myFunctionOne() 'を使うこともできます。 – Will

+0

でもself ::はクラス内だけで動作するでしょうか?クラスを別のファイルで呼びます。 – smileBeda

+1

正しい。 'self ::'はあなたの例のように、クラスの中だけです。だからあなたが話しているような外部の静的な呼び出しのために持っている方法のままにしておきます。 – Will

関連する問題