【问题标题】:php check function returnphp检查函数返回
【发布时间】:2011-07-18 03:54:25
【问题描述】:

我有一个返回循环的函数,现在我想检查这个函数是返回 null 还是空

这就是函数:

function getCopy($pname){
    function listCopy($block) {
        foreach ($block as $b) {

            echo  '<div class="copy">'.$b->getBlock().'</div>'. "\n";
        }
    }
    $filter=array(
    new DFC(classContent::FIELD_PNAME, $pname, DFC::CONTAINS),
    new DFC(classContent::FIELD_TYPE, 'copy', DFC::CONTAINS),
    );
    $block=classContent::findByFilter(conn(), $filter);
    return listCopy($block);
}

这是我的逻辑:

if( isset (getCopy($pname)) ){
    echo "<label for='copy'>Copy</label><br>"
    ."<textarea name='copy' id='copy' rows='10' cols='60'>".getCopy($pname)
    ."</textarea><br>";
}

isset 不起作用,if(getCopy($pname) != '') 也不起作用。

你知道怎么做吗?

提前致谢

毛罗

【问题讨论】:

  • 实际调用 getCopy() 两次有点傻,不是吗?如果 getCopy() 返回 $pname 的值,则使用相同的参数再次调用它以显示您已经计算过一次的返回值

标签: php function return


【解决方案1】:

使用emptyis_null 或两者的组合。

或者您可以通过执行if( !getCopy($pname) ) ){ ... } 来否定检查,但我会使用上述两个函数中的任何一个。

编辑:正如 deceze 所说,您不能直接使用 empty 评估返回值,您必须先将其分配给一个 var,然后将该 var 传递给 empty()

$result = getCopy($pname);
if(empty($result)) { ... }

【讨论】:

  • 您不能使用emptyisset 来检查函数返回值。
  • 在检查可能不存在的变量时,您只需要empty。对于函数返回值if (getCopy())if (!getCopy()) 就可以了。
  • 现在 PHP 支持在 empty() 中将函数作为参数调用。在 5.5+ 版本中,您无需先将其分配给变量。例如:if(empty(getCopy($pname))) { . . . } 可以正常工作。
【解决方案2】:

empty() 是您要查找的内容,但请记住这两点:

  1. 不应在函数中声明函数。
  2. 你的函数永远不会返回任何东西,它总是 void 因为你没有return 任何东西。所以empty() 将始终评估为真。

【讨论】:

  • 你不能使用empty来检查函数返回值。
  • @deceze:确实,他必须先将返回值分配给一个变量。
  • 或者他可以使用!empty 就是!isset($foo) || !$foo,这里不需要第一部分,因为这个函数确实存在。
【解决方案3】:

您不能从函数中“返回循环”。您只能返回值。 listCopy 函数不返回任何内容,它只是输出。因此getCopy 也不返回任何东西。在函数中定义函数通常也是不好的做法,在您的情况下,您将无法调用 getCopy 两次。

我不太确定你想做什么,但你需要重新考虑你的方法。

【讨论】:

  • 感谢 deceze!我现在使用了不同的方法,非常混乱!谢谢 4 让我大开眼界 :)
【解决方案4】:

php函数isset()用于判断一个变量是否被设置且不为NULL。所以不工作是正常的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2014-01-01
    • 2011-03-27
    相关资源
    最近更新 更多