我已经创建了函数
function do_stuff($text) {
$new_text = nl2br($text);
return $new_text;
}
$result = do_stuff("Hello \n World!");
//returns "Hello <br /> World!"
我希望能够提供另一个简单的内置PHP函数,例如 strtoupper()在我的函数内部,它不仅仅是我需要的strtoupper(),我需要能够为我的do_stuff()函数提供不同的函数。
说我想做这样的事情。
$result = do_stuff("Hello \n World!", "strtolower()");
//returns "Hello <br /> World!"
如何在不创建其他功能的情况下完成这项工作。
function do_stuff($text, $sub_function='') {
$new_text = nl2br($text);
$sub_function($new_text);
return $new_text;
}
$result = do_stuff("Hello \n World!");
//returns "Hello <br /> World!"
P.S。记住变量变量,谷歌搜索,实际上也是变量函数,可能会自己回答这个变量函数。
答案 0 :(得分:1)
你在第二个例子中有它。只需确保检查它是否存在,然后将返回值分配给字符串。这里假设函数接受/需要什么作为args以及它返回的内容:
function do_stuff($text, $function='') {
$new_text = nl2br($text);
if(function_exists($function)) {
$new_text = $function($new_text);
}
return $new_text;
}
$result = do_stuff("Hello \n World!", "strtoupper");
答案 1 :(得分:1)
Callables可以是字符串,具有特定格式的数组,使用Closure
创建的function () {};
类的实例 - 语法和直接实现__invoke
的类。您可以将其中任何一项传递给您的函数,并使用$myFunction($params)
或call_user_func($myFunction, $params)
来调用它们。
除了在其他答案中已经给出的字符串示例之外,您还可以定义(新)函数(闭包)。如果您只需要在一个地方包含逻辑并且核心功能不合适,这可能特别有用。您还可以通过以下方式包装参数并从定义上下文传递其他值:
请注意,可调用的typehint需要php 5.4 +
function yourFunction($text, callable $myFunction) { return $myFunction($text); }
$offset = 5;
echo yourFunction('Hello World', function($text) use($offset) {
return substr($text, $offset);
});
文档提示继续阅读:
答案 2 :(得分:0)
您可以调用这样的函数:
$fcn = "strtoupper";
$fcn();
以同样的方式(你自己发现),你可以有变量:
$a = "b";
$b = 4;
$$a; // 4
答案 3 :(得分:0)
看起来你几乎就在那里,只需要在第二个参数中省略括号:
$result = do_stuff("Hello \n World!", "strtolower");
然后这应该在一点点清理之后起作用:
function do_stuff($text, $sub_function='') {
$new_text = nl2br($text);
if ($sub_function) {
$new_text = $sub_function($new_text);
}
return $new_text;
}