簡體   English   中英

如何將一個函數“回顯”為另一個函數?

[英]How do I “echo” a function results into another function?

我有這個功能:

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輸出

您應該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它。

與在函數中使用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').'" />';
}

嘗試在函數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').'" />';
}

在您的特定情況下,我將嘗試立即回顯輸出,而不先將其存儲在變量中。

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

但是,正如其他人所述,絕對最好更改函數以返回值,而不是回顯它。 不僅在這種情況下,而且作為一般的最佳實踐。 因此,只有在由於某種原因無法自行更改MakeInput時,才嘗試此操作。

如果由於某種原因您不能更改MakeInput()或將花費更多的精力來進行更改,那么可以直接從ItkMakeMo()回顯輸出:

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

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

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

然后, 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').'" />';
}

在第一個函數中,用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').'" />';
}

既然您說過不想修改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的建議。 這么說,請遵循其他人寫的內容,因為這只是不良編程的一種丑陋方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM