【问题标题】:Find out if function has any output with php用 php 查看函数是否有任何输出
【发布时间】:2010-04-14 16:47:10
【问题描述】:

快给你们。

假设我有一个输出字符串的函数:

function myString()
{
      echo 'Hello World';
}

我将如何进行测试以查看函数是否输出任何数据?

if(myString() ==''){ 
      echo ''Empty function;  
}

【问题讨论】:

    标签: php function


    【解决方案1】:

    使用输出缓冲函数:

    function testFunctionOutput($f, $p = array()){
        ob_start();
        call_user_func_array($f, $p);
        $s = ob_get_contents();
        ob_end_flush();
        return (bool)($s !== '');
    }
    

    所以说...

    function testa(){
      echo 'test';
    }
    
    function testb($b){
      $i = 20 * $b;
      return $i;
    }
    
    var_dump(testFunctionOutput('testa'));
    var_dump(testFunctionOutput('testb', array(10)));
    

    Felix 建议的替代版本:

    function testFunctionOutput2($f, $p = array()){
        ob_start();
        call_user_func_array($f, $p);
        $l = ob_get_length();
        ob_end_clean();
        return (bool)($l > 0);
    }
    

    【讨论】:

    • +1 但仅测试函数是否生成输出,ob_end_cleanob_end_flush imo 更适合。除了ob_get_contents,也可以使用ob_get_length
    • 谢谢大家,但收到“警告:缺少参数 1”错误
    • 没有函数回显输出,而是返回它。这样你就可以更灵活地做这样的事情。所以当你只想显示它时说 print myFunction();
    • @Keith - 已修复。是可选参数问题。
    • @TravisO ,我无法控制该功能,因为它是从 WordPress 中的插件生成的 :(
    【解决方案2】:

    通常,如果函数返回数据,它会在 return 语句中这样做。

    function myString() {
    
     $striing = 'hello';
     return $string;
    
    }
    

    要测试它,只需调用该函数并查看它返回的内容。

    如果您要问的是是否将某些内容写入输出,如下面的 CT 评论...您将需要执行以下操作:

    //first turn out the output buffer so that things are written to a buffer
    ob_start();
    
    //call function you want to test... output get put in buffer.
    mystring();
    
    //put contents of buffer in a variable and test that variable
    $string = ob_get_contents();
    
    //end output buffer
    ob_end()
    
    //test the string and do something...
    if (!empty($string)) {
    
     //or whatever you need here.
     echo 'outputs to output'
    }
    

    您可以通过http://php.net/manual/en/function.ob-start.php了解更多信息

    【讨论】:

    • 我认为这不是 OP 的要求,请参阅我的其他评论
    • 好点,CT,我已经编辑了建议以包含该场景。
    【解决方案3】:

    对不起,我误解了这个问题。正如phpdeveloper所解释的那样,输出BUffer应该是要走的路。

    ---不相关---

    if(!myString()){ 
      echo 'Empty function';
    }
    

    当 myString 返回一个可以评估为 false 的值时,将回显“空函数”: o, false, null, "" 等等...

    if(myString() === NULL){ 
      echo 'Empty function';
    }
    

    只有在没有返回值时才会打印“空函数”。

    【讨论】:

    • 这是检查返回值的好答案,但我认为这不能回答 OP 的要求。我认为 OP 想知道是否有办法确定函数是否写入输出流。
    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 2015-02-08
    • 2021-07-10
    • 2022-10-18
    • 1970-01-01
    • 2022-09-01
    • 1970-01-01
    • 2012-08-29
    相关资源
    最近更新 更多