【发布时间】:2010-04-14 16:47:10
【问题描述】:
快给你们。
假设我有一个输出字符串的函数:
function myString()
{
echo 'Hello World';
}
我将如何进行测试以查看函数是否输出任何数据?
if(myString() ==''){
echo ''Empty function;
}
【问题讨论】:
快给你们。
假设我有一个输出字符串的函数:
function myString()
{
echo 'Hello World';
}
我将如何进行测试以查看函数是否输出任何数据?
if(myString() ==''){
echo ''Empty function;
}
【问题讨论】:
使用输出缓冲函数:
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);
}
【讨论】:
ob_end_clean 比 ob_end_flush imo 更适合。除了ob_get_contents,也可以使用ob_get_length。
通常,如果函数返回数据,它会在 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'
}
【讨论】:
对不起,我误解了这个问题。正如phpdeveloper所解释的那样,输出BUffer应该是要走的路。
---不相关---
if(!myString()){
echo 'Empty function';
}
当 myString 返回一个可以评估为 false 的值时,将回显“空函数”: o, false, null, "" 等等...
if(myString() === NULL){
echo 'Empty function';
}
只有在没有返回值时才会打印“空函数”。
【讨论】: