返回一个空但告诉php它意味着`return false`

时间:2015-05-21 15:43:53

标签: php arrays return

是否可以返回一个数组,但也告诉php它应该是假的?

示例:

if ($res = a_function()) {
    // all good
}
else {
    echo getErrorByNumber($res['err_no']);
}

a_function

function a_function() {
    // do fancy stuff
    if (xy) return true;
    return array('err_no' => 1);
}

我想它不可能,因为php总是为return true取一个数组,对吗?

2 个答案:

答案 0 :(得分:2)

很多方法。可能是首选的,与true进行比较,类型检查===

if(($res = a_function()) === true) {
    // all good
}
else {
    echo getErrorByNumber($res['err_no']);
}

非空数组始终为真:

if($res = a_function() && !is_array($res)) {
    // all good
}
else {
    echo getErrorByNumber($res['err_no']);
}

或者翻转它:

if(is_array($res)) {    //or isset($res['err_no'])
    echo getErrorByNumber($res['err_no']); 
}
else {
    // all good
}

答案 1 :(得分:1)

我会用byref参数解决这个问题:

function foo(&$errors)
{
  if (allWentWell())
  {
    $errors = null;
    return true;
  }
  else
  {
    $errors = array('err_no' => 007);
    return false;
  }
}

// call the function
if (foo($errors))
{
}
else
{
  echo getErrorByNumber($errors['err_no']);
}

这样您就不必区分不同的可能返回类型,也不会遇到类型杂耍问题。它也更具可读性,你知道没有文档的$ errors变量里面有什么。我写了一篇小文章,解释为什么mixed-typed return values会如此危险。