PHP - 一个返回由其他函数回显的东西的函数

时间:2010-12-17 16:07:52

标签: php function variables

假设我有一组函数,例如

  • article() - 输出文章
  • menu() - 菜单

依旧......

有时候我可能只需要获取这些功能的输出,而不是将其打印到屏幕上。因此,不是创建另一组返回值get_article()get_menu()等的函数,而是使用输出缓冲和call_user_func创建一个单独的函数吗?

例如。

function get($function_name){
  ob_start();
  call_user_func($function_name);
  return ob_get_contents();
}

我的代码中的问题是我不知道如何传递$function_name的参数。该函数可能需要任意数量的参数......

6 个答案:

答案 0 :(得分:3)

为什么不创建一个可选参数来表示是return还是echo输出如下内容:

function article($output = false)
{
   // your code..........

   if ($output === true){
     echo $result;
   }
   else{
     return $result;
   }
}

现在,如果你想用相同的函数回显一些东西,你应该在调用这样的函数时将$output设置为true:

article(true);

但如果您只想 返回 该功能的结果,您可以在不指定$output的情况下调用它:

article();

答案 1 :(得分:3)

您可以使用call_user_func_array(),这样您也可以传递一系列参数。但是,让article()函数返回一个字符串并仅在需要时回显它可能会更好。

答案 2 :(得分:3)

或者您可以修改article()menu()以获得最后一个可选参数$return,这是一个默认为false的布尔值,因此当$returntrue然后你会从同一个函数返回。

article($id, $return = false) 
{
  // ...
  if($return)
  {
    return $article;
  } else {
    echo $article;
  }
}

答案 3 :(得分:2)

或者你可以从另一个方向接近,并以他们总是返回值的方式编写这些函数。

然后,如果你想回声,你只需说echo article();

答案 4 :(得分:2)

这很容易......只需使用func_get_args ...

获取参数
function get($function_name){
    $arguments = func_get_args();
    array_shift($arguments); // We need to remove the first arg ($function_name)
    ob_start();
    call_user_func_array($function_name, $arguments);
    return ob_get_clean();
}

用法:

function foo($arg1, $arg2) { echo $arg1 . ':' . $arg2; }

$bar = get('foo', 'test', 'ing'); // $bar = 'test:ing'

注意两件事。

  1. 这忽略了被调用函数的return
  2. 我将结束函数更改为ob_get_clean(),因为它删除了创建的缓冲区。您拥有的代码将为每个调用创建一个新缓冲区而不是删除它(因此需要逐渐减慢所有内容,因为它需要将所有输出冒泡到大量缓冲区中)...

答案 5 :(得分:1)

是的,这是可能的。 您可能希望查看here