如何将函数结果“回显”到另一个函数中?

时间:2010-11-10 10:19:35

标签: php function syntax echo

我有这个功能:

function MakeInput($id, $class) {
    $value = substr($id, 2);
    global $$value;
    echo '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />';
}

哪些不会返回,但会回应结果。

我想将它用于另一个功能:

function ItkMakeMo($NomDebVar) {
$Output = '
    <tr>    
        <td>Test</td>
    </tr>
    <tr>
        <td>'.MakeInput($NomDebVar.'moshj','IntInput').'</td>
    </tr>
';
echo $Output;

}

所以这个解决方案不起作用,PHP在“echo $ Output”之前发送MakeInput输出

8 个答案:

答案 0 :(得分:5)

你应该return价值:

function MakeInput($id, $class) {
    $value = substr($id, 2);
    global $$value;
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />';
}

后来echo它。

答案 1 :(得分:1)

与在函数中使用echo相反,使用return:

function MakeInput($id, $class) {
    $value = substr($id, 2);
    global $$value;
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />';
}

答案 2 :(得分:1)

尝试在函数MakeInput中返回字符串而不是回显它,

function MakeInput($id, $class) {
    $value = substr($id, 2);
    global $$value;
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />';
}

答案 3 :(得分:1)

在您的特定情况下,我会尝试立即回显输出,而不是先将其存储在变量中。

function ItkMakeMo($NomDebVar) {
echo '
    <tr>    
        <td>Test</td>
    </tr>
    <tr>
        <td>';
MakeInput($NomDebVar.'moshj','IntInput').'</td>
echo '    </tr>
';
}

但正如其他人所说,绝对最好更改函数以返回值,而不是回应它。不只是在这种情况下,而是作为一般的最佳实践。因此,如果由于某种原因无法自行更改MakeInput,请尝试此操作。

答案 4 :(得分:1)

如果出于某种原因你无法改变MakeInput()或者需要付出更多的努力来改变它,那么你可以直接从ItkMakeMo()回显输出:

function ItkMakeMo($NomDebVar) {
echo '
    <tr>    
        <td>Test</td>
    </tr>
    <tr>
        <td>';

MakeInput($NomDebVar.'moshj','IntInput');

echo '</td>
    </tr>
';
}

然后MakeInput()输出将在正确的位置。

如果可能的话,通常最好不要直接在函数中输出,而是将输出作为字符串返回,然后在调用函数时输出它。

答案 5 :(得分:0)

function MakeInput($id, $class) {
    $value = substr($id, 2);
    global $$value;
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />';
}

答案 6 :(得分:0)

在第一个函数中,使用return返回echo:

function MakeInput($id, $class) {
    $value = substr($id, 2);
    global $$value;
    return '<input type="text" id="'.$id.'" name="'.$id.'" class="'.$class.'" value="'.htmlentities($$value,ENT_COMPAT,'UTF-8').'" />';
}

答案 7 :(得分:0)

由于您说您不想修改MakeInput函数,请使用输出缓冲。

function ItkMakeMo($NomDebVar) {
    ob_start();
    MakeInput($NomDebVar.'moshj','IntInput');
    $input = ob_get_clean();
    $Output = '
        <tr>    
            <td>Test</td>
        </tr>
        <tr>
            <td>'.$input.'</td>
        </tr>
    ';
    echo $Output;
}

如果你不需要$ output变量但需要MakeInput来回应,我会按照Rob的建议。话虽如此,请遵循其他人写的内容,因为这只是糟糕的编程方式。