如何通过变量调用函数

时间:2018-03-31 01:53:24

标签: php function

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

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

function $book()
{ 
 return "Hello, world!";
}
function $car()
{
 return "WoW , The red car";
}

4 个答案:

答案 0 :(得分:2)

你不能这样做,你有2个选项

有两种方式:

使用variable functions

<?php
$book = 'book';
$car = 'car';

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

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

echo $book();
echo $car();

closures

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

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

echo $book();
echo $car();

答案 1 :(得分:1)

您可以撰写anonymous function

$book = function() { 
    return "Hello, world!";
};
echo $book(); // invoke it

答案 2 :(得分:1)

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

测试

 $obj = new foo;
 $obj();

输出

hello

Online Sandbox

您还可以使用反射(将现有函数称为字符串)

 (new ReflectionFunction('print_r'))->invoke("hello");

输出

  hello

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);

输出

good bye

答案 3 :(得分:0)

您可以调用具有变量名称的函数,如下所示:

Variable functions

<?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>';
}

OUTPUT将是:

Hello, world!
WoW , The red car

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

Anonymous functions

$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>';
}

样本:

http://sandbox.onlinephpfunctions.com/code/1972f1acd72984d459efbfb308680aaa9d7a1fad