PHP - 从同一方法返回不同类型的值

时间:2010-07-14 20:41:29

标签: php design-patterns

在php中从同一个方法返回不同的类型会被认为是不好的做法。也许有一个最好的模式,但基本上我希望我的方法做一些事情,如果它失败返回一个字符串错误消息,但如果它工作,然后返回true。这对我来说似乎并不合适,但我能看到的唯一另一种方法就是返回错误消息的字符串和一个字符串,其中包含“working”或“valid”之类的东西,如果一切正常的话。同样,这意味着在使用此方法的方法之间存在更多耦合,因为它们无法检查false的真实性,但必须知道将代表该方法的有效响应的单词。

6 个答案:

答案 0 :(得分:2)

如果您正在尝试监视某个功能是否有效,那么最好使用“例外”。与提供它们的所有编程语言一样,这些表示超出预期程序流程范围的“特殊”情况,并且不需要任何类型的返回来指示出错。有关PHP的详细信息,请参阅下面链接的相关文档。

PHP Exceptions

答案 1 :(得分:2)

假设您指的是类中的方法,最好只从方法返回TRUE或FALSE,但在类中使用可包含错误消息数组的$ _error属性。

然后,如果结果为false,则在返回方法之前可以在$ _error属性中设置错误消息,并且可以使用get_error()方法检索消息。

答案 2 :(得分:0)

好吧,你可以返回一个数组,我想 - 第一个索引将包含你的布尔值true / false,第二个索引将包含更多信息,如果有必要的话。

答案 3 :(得分:0)

你当然可以在PHP中使用它,但它可能会导致问题。 Esp当您或其他人将来必须维护该应用程序时。一般来说,我建议避免使用任何这样的方法,这种方法会对变量中的内容产生歧义。

实现目标的一种方法是让函数返回结果代码或消息,并使用引用的参数将返回的实际值发回。

例如:

   $msg = MyFunc( $o);
    if ($msg == 'OK')   //or ($msg == 0)
    {
        //use the returned object or value
        $o->Foo();
    }
    else
    {
        //respond to error
    }

答案 4 :(得分:0)

返回true或其他任何内容都可能是一个很好的解决方案。有时。如果您决定更改返回值,我可能会破坏。就个人而言,我喜欢它。

你可以返回一个数组。如果它是空的,则没有错误。每个错误都是数组中的单独项目。

此外,您可以尝试抛出exception

答案 5 :(得分:0)

PHP是一种松散类型的语言,因此在PHP文化中从函数中返回不同类型是非常普通的。

例如,mysql_query()在成功时返回资源,在错误时返回布尔false。您测试错误状态,然后调用另一个函数,如mysql_error(),以获取有关错误性质的特定信息。

$query = mysql_query($sql);
if ($query === false) {
  die(mysql_error());
}

但是,在编写OO代码时,我会谨慎地从函数中返回不同的不相关的对象类型。它要求开发人员编写大量繁琐的类型检查代码:

$result = $search->find($keyword);

if ($result === null) {
  // no entry matches $id
} elseif ($result instanceof ResultClass) {
  // one row found; do something with the result
  print $result;
} elseif ($result instanceof ResultCollection) {
  foreach ($result as $element) {
    print $element;
  }
} else {
  // are there other types for $result?
}

每次拨打{{1>}时编写所有代码真是太痛苦了!

如果find()方法始终返回ResultCollection,则上述示例会更好。如果未找到任何结果,则集合将具有零条目。如果您可以假设函数一致地返回给定类型,则代码更简单:

find()