[英]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.