我有这个功能:
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输出
答案 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的建议。话虽如此,请遵循其他人写的内容,因为这只是糟糕的编程方式。