繁体   English   中英

在php5中返回类型一致性

[英]return type consistency in php5

我已经看到了很多关于在PHP函数失败时返回什么的线程。 但是它们都是关于PHP 4的。

现在,在我最近的(PHP 5)项目中,我想对返回类型进行某种程度的一致性(我什至不知道,是否值得这样做)。 因此,如果方法的正常返回类型是数组,万一该方法失败,我应该返回什么?

  • 空值
  • 空array()
  • 引发异常

在C#中,我将返回null,因此我应该不停地思考以强类型语言编写PHP时会写PHP吗? 还是在这种特定情况下更有意义? 每个选项的优缺点是什么?

如果执行方法的逻辑没有错误(在这种情况下,我建议抛出一个异常),我会说返回一个空数组。 这样会使这种情况更容易处理:

foreach($obj->method() as $item)
{
    // ...
}

如果YourClass::method()返回null ,则将收到“提供了无效的参数”警告,而返回空数组将永远不会触发该警告。

无论您最终选择什么,都坚持下去 没有人喜欢使用返回值不一致且没有逻辑含义的API。

如果一个函数真的“失败”,那么我会例外。 异常表示失败。

仍然,在某个时候您需要决定如何处理该异常,然后很可能您决定返回一个空数组可能是最好的。 例如,如果要保持现有的foreach()循环正常工作,这将很有用。

因此,请使用异常,但请考虑要在何处捕获异常并将其处理为对用户有用的内容。

如果该方法失败,则应将其归类为IMO,这将使您能够正确捕获预期的期望并对其执行操作。

我坚信函数和方法的响应正常化。 当您知道函数将返回什么时,它将使工作变得更加轻松。

简而言之,如果抛出失败,并且如果不能确保返回数组,则抛出异常,我的$ 0.02

我将在不可恢复的错误上引发异常。

例如,假设您有一个类似getById($ id)的方法。 如果什么也没找到,可以返回null。 现在,假设您有另一个方法delete($ id)本身将调用getById($ id)。 在这种情况下,如果未找到任何内容(即:getById返回null),则应引发异常。

请记住,每当您报告带有返回值(为null,空数组或字符串或什至整数)的错误时,您都将需要处理此错误,可能需要根据返回值在其他地方进行一些清除。 这可能会导致所涉及的所有方法/功能出现问题。

使用异常将使您只能在一个地方(在陷阱处)处理和捕获这些错误。 因此,您不必复制检查错误的代码(返回的数组是否为空?返回值为1、2或9?等)。 除此之外,使用异常可以使您轻松地“编目”错误的种类(例如业务逻辑异常或无效的参数),而无需在源代码中写很多if。

因此,如果函数/方法返回某些内容(即,它正常终止),则返回值就是您可以使用的内容(一个空数组,一个null或一个空字符串都是有效的返回值)。 如果函数/方法引发异常,则显然出了问题。

另一个重要的事情是,如果您不使用严格检查(=== vs. ==),则null可以等于false,0和空字符串,因此这可能会导致其他类型的错误。 这是例外也可以占优势的地方。

当然,无论您决定什么,重要的是要与代码中的选择保持一致。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM