Php “我该怎么做?”;“回声”;一个函数导致另一个函数?

Php “我该怎么做?”;“回声”;一个函数导致另一个函数?,php,function,syntax,echo,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').'" />'; } 函数MakeInput($id,

我有这个功能:

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').'" />';
}
函数MakeInput($id,$class){
$value=substr($id,2);
全球$$价值;
回声';
}
不会返回,但会重复结果

我想将其用于另一个函数:

function ItkMakeMo($NomDebVar) {
$Output = '
    <tr>    
        <td>Test</td>
    </tr>
    <tr>
        <td>'.MakeInput($NomDebVar.'moshj','IntInput').'</td>
    </tr>
';
echo $Output;
函数ItkMakeMo($NomDebVar){
$Output=
试验
.MakeInput($NomDebVar.moshj','IntInput')。'
';
echo$输出;
}


因此此解决方案不起作用,PHP在“echo$output”之前发送MakeInput输出。

与在函数中使用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').'" />';
}
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($id,$class){
$value=substr($id,2);
全球$$价值;
返回“”;
}

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

函数MakeInput($id,$class){
$value=substr($id,2);
全球$$价值;
返回“”;
}
函数MakeInput($id,$class){
$value=substr($id,2);
全球$$价值;
返回“”;
}

您应该
返回
值:

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($id,$class){
$value=substr($id,2);
全球$$价值;
返回“”;
}

稍后,我会回显它。

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

function ItkMakeMo($NomDebVar) {
echo '
    <tr>    
        <td>Test</td>
    </tr>
    <tr>
        <td>';
MakeInput($NomDebVar.'moshj','IntInput').'</td>
echo '    </tr>
';
}
函数ItkMakeMo($NomDebVar){
回声'
试验
';
MakeInput($NomDebVar.moshj','IntInput')。'
回声'
';
}

但正如其他人所说,最好更改函数以返回值,而不是重复它。不仅在这种情况下,而且作为一般最佳实践。因此,只有在由于某种原因无法自己更改MakeInput时,才可以尝试此操作。

在第一个函数中,将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($id,$class){
$value=substr($id,2);
全球$$价值;
返回“”;
}

既然您说过不想修改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;
}
函数ItkMakeMo($NomDebVar){
ob_start();
MakeInput($NomDebVar.moshj','IntInput');
$input=ob_get_clean();
$Output=
试验
“.$input。”
';
echo$输出;
}

如果您不需要$output变量,但需要将MakeInput用于echo,我将遵循Rob的建议。话虽如此,请遵循其他人编写的内容,因为这只是一种处理糟糕编程的丑陋方式。

如果出于某种原因您无法更改
MakeInput()
,或者更改它需要付出的努力超过了它的价值,那么您可以直接从
ItkMakeMo()
回显输出:

函数ItkMakeMo($NomDebVar){
回声'
试验
';
MakeInput($NomDebVar.moshj','IntInput');
回声'
';
}
然后,
MakeInput()
输出将位于正确的位置


如果可能的话,通常最好不要直接在函数中输出,而是以字符串形式返回输出,这样您就可以在调用函数时输出它。

在我看来,您不了解如何使用函数?很好,3个答案在30秒内完全相同,这是一个新记录??他可能还有另一个原因要求使用“原样”函数。这个解决方案确实有效,但MakeInput仍然在ob_get_flush()之前输出,我将使用
$input=ob_get_contents();ob_end_clean()如果采用这种方法<代码>ob_get_flush()调用时输出缓冲区的内容。编辑:很好的调用,@Phil R.:
ob\u get\u clean()
将两者结合在一起。这仍然会在
ItkMakeMo()
字符串之前输出
MakeInput()
字符串,因为
MakeInput()
echo
ing,并且不是可以连接的东西。这是@Aether的一个优点,我改变了函数来处理这个问题。
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;
}
function ItkMakeMo($NomDebVar) {
echo '
    <tr>    
        <td>Test</td>
    </tr>
    <tr>
        <td>';

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

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