【问题标题】:How do I "echo" a function results into another function?如何将一个函数“回显”到另一个函数?
【发布时间】:2011-05-07 19:13:10
【问题描述】:

我有这个功能:

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

【问题讨论】:

  • 在我看来你不明白如何使用函数? php.net/manual/en/language.functions.php
  • 太好了,30秒3个答案一模一样,新纪录????
  • 他可能有另一个理由要求“按原样”使用该功能。

标签: php function syntax echo


【解决方案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】:

    尝试在函数 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】:
      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').'" />';
      }
      

      【讨论】:

        【解决方案4】:

        你应该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它。

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

          • 这仍然会在ItkMakeMo() 字符串之前输出MakeInput() 字符串,因为MakeInput()echoing,并且不是您可以连接的东西。
          • 这很好@Aether,我已经改变了处理这个的函数。
          【解决方案6】:

          在第一个函数中用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】:

            既然您说您不想修改 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 的建议。话虽如此,请遵循其他人所写的内容,因为这只是解决糟糕编程的一种丑陋方式。

            【讨论】:

            • 这个解决方案确实有效,但 MakeInput 仍然在 ob_get_flush() 之前输出
            • 如果采用这种方法,我会使用$input = ob_get_contents(); ob_end_clean();ob_get_flush(); 调用时输出缓冲区的内容。编辑:好电话,@Phil R.:ob_get_clean() 合二为一。
            【解决方案8】:

            如果由于某种原因您无法更改 MakeInput() 或者更改它所花费的精力比更改它的价值要多,那么您可以直接从 ItkMakeMo() 回显输出:

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

            那么MakeInput() 的输出就会出现在正确的位置。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-08-14
              • 2011-07-14
              • 1970-01-01
              • 2019-03-29
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多