在PHP中使用函数名中的“变量”

时间:2012-11-02 10:33:00

标签: php function variables

可以在函数名中使用变量吗? (如果“是”,那怎么办?)

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

所以我的函数名称将是john_function()

你明白我的意思吗?

如果我有很多功能,我会做得更好,我的名字会像

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

6 个答案:

答案 0 :(得分:6)

它不能像你想要的那样完成,这似乎就像

function $name_something(){  }

但您可以像这样使用Variable Functions

function john_something()
{
    echo 'called';
}

$name = 'john';

$functionName = $name . '_something';

$functionName();

虽然不是推荐的,但几乎总有一种更好的方法。

答案 1 :(得分:4)

eval()是一种方式,我个人认为这很蠢。

如果将代码括在一个类中,则可以使用:

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

答案 2 :(得分: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

答案 3 :(得分:1)

使用create_function做这件事。

请参阅手册here

修改

请同时查看Ariaan's回复。这更有用

答案 4 :(得分:0)

尝试这样的事情:

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

eval($f);

john_function();

这是与您的问题相匹配的唯一解决方案。 这是一个糟糕的解决方案( DANGEROUS ),您最好避免在任何地方使用eval()

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

答案 5 :(得分:0)

你不能以一种能够以你建议的方式调用它的方式声明一个函数。

我会看一下closures (anonymous functions) - 我怀疑这将是你任务的优雅解决方案。