【问题标题】:PHP function return value, how to checkPHP函数返回值,如何检查
【发布时间】:2012-01-16 12:29:19
【问题描述】:

先举个简单的例子:

function doReturnSomething()
{
    // some logic
    if ($resultFromLogic) {
        return Default_Model_Something;
    }

    return false;
}

如您所见,此函数返回模型或 false。现在,让我们从其他地方调用这个函数:

$something = doReturnSomething();

不,我想使用 if 语句来检查变量 $something。比方说:

if (false !== $something) {}

或

if ($something instanceof Default_Model_Something) {}

或

...

是否有针对这种情况的“最佳实践”?检查 false 或使用实例。这种特殊方式有什么后果吗?

先谢谢了!

【问题讨论】:

  • 不是直接回答这个问题,但我建议返回null 而不是布尔值,因为a)null 相当于“无”,这似乎很适合这里,并且b) 可能存在返回值应该是布尔值的情况,然后您无法区分“无”false 和“值”false

标签: php oop


【解决方案1】:

根据返回的内容,您可以这样做:

if(doReturnSomething()) {}

返回一个对象(Default_Model_Something)时返回真,返回假或空值时返回假。只是在处理数字时不要使用这种方式,因为“0”将评估为假。

【讨论】:

  • 这种方式适用于数字,只要(你提到它)0 不是有效值。例如,ID 通常以 1 开头
  • 确实如此。使用 instanceof 时,我们可以确定 Default_Model_Something 类提供了特定的方法/属性。使用instanceof有什么缺点吗?如果 "false !==" 是一种更通用的输入方式?
  • 嘿,对不起,如果我弄错了,但是如果 doReturnSomething() 返回有效模型并且我必须在 if 大括号内访问它怎么办。最好像$something = doReturnSomething(); 那样使用它,然后if($something){}
  • 是的,当然......当您在多个位置需要它时,您应该将它存储在一个变量中并改为检查该变量。 @VincentvanDijk:instanceof 也可以,但它在灵活性等方面存在局限性。但是,当您必须依赖某些功能时,我想最好创建某种接口,以便您可以插入新类。
【解决方案2】:

我认为从 PHP 5.4 开始,在逻辑语句中威胁函数返回存在一个特殊通知错误。

好的做法是将函数的结果保存到变量中,然后在任何逻辑语句中使用它。

【讨论】:

  • 我认为没有这样的通知。您可以在这里在线尝试:codepad.viper-7.com - 恕我直言,您回答的另一部分听起来不错,但也许您能说出原因?
【解决方案3】:
<?php function my($a, $b ,$c){

    $total = $a + $b - $c;      return $total;       }

$myNumber = 0;

echo "Before the function, myNumber = ". $myNumber ."<br />";

$myNumber = my(3, 4, 1); // Store the result of mySum in $myNumber

echo "After the function, myNumber = " . $myNumber ."<br />";

?>

【讨论】:

  • 这与提出的问题有什么关系?
猜你喜欢
  • 2011-07-18
  • 2013-12-24
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多