我希望这个问题不是太简单,但我不知道该怎么做
$book = 'book';
$car = 'car';
function $book()
{
return "Hello, world!";
}
function $car()
{
return "WoW , The red car";
}
答案 0 :(得分:2)
你不能这样做,你有2个选项。
有两种方式:
<?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
您还可以使用反射(将现有函数称为字符串)
(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)
您可以调用具有变量名称的函数,如下所示:
<?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
另一种方法是获得相同的输出:
$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