-1

関数名で変数を使用できますか?(「はい」の場合、どのように?)

$name = "john";
  function name_function() {
    //Do something
  }

だから私の関数名はjohn_function()

私の意味がわかりますか?

たくさんの機能があればもっといい方法でやろうと思います。

john_init() john_setup() john_save() john_clear()

4

6 に答える 6

7

あなたが望むようにそれを行うことはできません。

function $name_something(){  }

ただし、変数関数は次のように使用できます。

function john_something()
{
    echo 'called';
}

$name = 'john';

$functionName = $name . '_something';

$functionName();

ただし、推奨されるわけではありませんが、ほとんどの場合、より良い方法があります。

于 2012-11-02T10:39:20.823 に答える
5

eval()というのは 1 つの方法ですが、個人的には厄介だと思います。

コードをクラスで囲む場合は、次を使用できます。

class MyCode {
  public static function __callStatic($functionName, $values)
  {
    // $functionName Receive the name of the function
    // $values       Receives an array with all the parameters
    /* Your code per person here */
  }
}

この関数は次のように呼び出すことができます。

MyCode::johnDoesSomething('At home', 'playing with PHP');

詳細については、http ://www.php.net/manual/en/language.oop5.overloading.php#object.call を参照してください。

于 2012-11-02T10:43:16.357 に答える
3

あなたの質問と私の答えに対する批判を読んだ後。OOP実装を探しているだけだと思います

class Person {
  public function __construct() // init()
  {
    /* Do something */        
  }

  public function setup()
  {
    /* Do something */
  }

  /* etc */
}

そして、次のように使用します。

$john = new Person(); // __construct() will be executed here automaticaly
$john->setup();

PHP のクラスとオブジェクトの詳細については、PHP ドキュメントを参照してください: http://www.php.net/manual/fa/classobj.examples.php

于 2012-11-02T11:03:03.227 に答える
1

そのようなことをするために使用create_functionします。

マニュアルはこちらをご覧ください

編集:

Ariaan's返信もご確認ください。これはもっと便利です

于 2012-11-02T10:43:21.240 に答える
0

あなたが提案する方法で呼び出すことができるような方法で関数を宣言することはできません。

クロージャー(匿名関数)を見てみたいと思います-それはあなたの仕事に対するエレガントな解決策になると思います。

于 2012-11-02T10:38:15.623 に答える
0

次のようなことを試してください:

$name = "john";
$f =   "function {$name}_function() {
    //Do something
  }";

eval($f);

john_function();

これはあなたの質問に一致する唯一の解決策です。そして、それは悪い解決策です(DANGEROUSeval() ) 。どこでも使用しない方がよいでしょう。

http://php.net/manual/en/function.eval.php

于 2012-11-02T10:35:45.040 に答える