在函数调用中调用php函数作为参数

时间:2012-05-15 13:35:33

标签: php html

我正在尝试将数据从数据库打印为hcard格式:

...
<span class='n'>
<span class="given-name">John</span>
...
</span>

然后我创建了这个php函数:

function print_row ($html_tag, $type, $value) {
    echo '<'.$html_tag.' class="'.$type.'">'.$value.'</'.$html_tag.'>';
}

// Calling function
print_row('span', 'given_name', 'John');

// Output
<span class="given_name">Nathan</span>  

这是我所期望的,直到我尝试将print_row函数作为print_row函数的参数调用。

print_row('span', 'n', print_row('span', 'given_name', 'Nathan'));

// Output
<span class="given_name">Nathan</span>
<span class="n"></span>

// Wanted Output
<span class="n"><span class="given_name">Nathan</span></span>
  1. 为什么我的第二个'print_row'函数调用不在我的第一个'print_row'函数调用中?
  2. 这甚至不可能吗? (PHP - Can I pass a function name as a function argument?

2 个答案:

答案 0 :(得分:4)

在函数调用中, 总是使用return而不是echo

为什么呢?因为return返回数据并允许您存储和回显它。 echo只是将其呈现给浏览器。

基本returnecho功能的示例是print_r()。如果第二个参数为TRUE,它可以执行echoreturn


你应该改变

function print_row ($html_tag, $type, $value) {
    echo '<'.$html_tag.' class="'.$type.'">'.$value.'</'.$html_tag.'>';
}

function print_row ($html_tag, $type, $value) {
    return '<'.$html_tag.' class="'.$type.'">'.$value.'</'.$html_tag.'>';
}

并在现有场所相应地回应功能 那或添加return代替echo的第四个参数:

function print_row ($html_tag, $type, $value, $bool = FALSE) {
    $str = '<'.$html_tag.' class="'.$type.'">'.$value.'</'.$html_tag.'>';
    if ($bool)
        return $str;
    else echo $str;
}

print_row('span', 'n', print_row('span', 'given_name', 'Nathan', TRUE));
// Added a ', TRUE' at the second last ')'

答案 1 :(得分:2)

您必须从函数返回值,而不是echo它。