Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过变量调用函数_Php_Function - Fatal编程技术网

Php 如何通过变量调用函数

Php 如何通过变量调用函数,php,function,Php,Function,我希望这个问题不要太简单,但我不知道怎么做 $book = 'book'; $car = 'car'; function $book() { return "Hello, world!"; } function $car() { return "WoW , The red car"; } 您可以编写一个: 你不能那样做,你有两个选择 有两种方法: 使用: 类 class foo { public function __invoke(){ echo "hello"; }

我希望这个问题不要太简单,但我不知道怎么做

$book = 'book';
$car = 'car';

function $book()
{ 
 return "Hello, world!";
}
function $car()
{
 return "WoW , The red car";
}
您可以编写一个:

你不能那样做,你有两个选择

有两种方法:

使用:

 class foo
 {
     public function __invoke(){ echo "hello"; }
 }
试验

输出

hello

还可以使用反射(以字符串形式调用现有函数)

输出

  hello
good bye
ReflectionMethod也很不错,因为它可以维护对象的状态

 class foo{

     protected $bar;

     public function setBar($bar){ $this->bar = $bar;}

     public function bar(){ echo $this->bar; }
 }


 $obj = new foo;

 $obj->setBar("good bye");

 (new ReflectionMethod($obj, 'bar'))->invoke($obj);
输出

  hello
good bye

您可以使用以下变量名调用函数:

获得相同输出的另一种方法:

在本例中,上述函数没有实际名称,而是由变量表示

让我举个例子:

<?php
    $book = function() {
        echo 'book function';
    };

    $a = $book;

    echo $a();

@lawrencerone-我还没有达到PHPv7的要求,无论如何,我也不在生产代码中。也许还有3个月。最近花了两周时间研究PHP7兼容性(真实故事)最近很难跟上,等着吧<代码>echo(新的ReflectionFunction('sprintf'))->invokeArgs(['%s','Hello']);p+1对于不清楚的帖子,回答很好。这里有改进的余地,以便它可能成为一个好问题。你能澄清你的问题吗?因为很难说你到底想要什么。IMHO,没有任何改进。请澄清您是想要动态命名函数,还是想要通过变量中的值动态调用(静态)函数。@CJDennis我很想知道您为什么要求澄清,但是。“哦,这个问题还不清楚,我对它的投票仍然有效。”FunkFortyNiner编辑从1%到50%。这是一个进步,即使没有达到99%。
 class foo{

     protected $bar;

     public function setBar($bar){ $this->bar = $bar;}

     public function bar(){ echo $this->bar; }
 }


 $obj = new foo;

 $obj->setBar("good bye");

 (new ReflectionMethod($obj, 'bar'))->invoke($obj);
good bye
<?php
    $a = 'book';

    function book() {
        echo 'book function';
    }

    // this is equivalent to book()
    $a();
<?php
$functions = ['book', 'car'];

function book() {
    return "Hello, world!";
}

function car() {
    return "WoW , The red car";
}

foreach ($functions as $function) {
    echo $function() .'<br>';
}
Hello, world!
WoW , The red car
$book = function() {
    echo 'book function';
};

$book();
<?php
    $book = function() {
        echo 'book function';
    };

    $a = $book;

    echo $a();
<?php
$functions = ['book', 'car'];

$book = function () {
    return "Hello, world!";
};

$car = function() {
    return "WoW , The red car";
};

foreach ($functions as $function) {
    echo ${$function}(). '<br>';
}