【问题标题】:PHP: Merge full array with empty array or check isset() first?PHP:将完整数组与空数组合并或先检查 isset()?
【发布时间】:2011-01-07 23:05:14
【问题描述】:

我有一些函数应该返回一个数组,以便将它与另一个数组合并。

但是,有时没有什么可返回的。 这里最好的情况是什么?

  1. 返回一个空数组并将其与完整的 OR 合并
  2. 返回 null,将返回值存储在变量中,检查该变量,然后在需要时将其合并。

我问这个是因为有时最短的路线并不是最快的,而且我真的不知道 array_merge() 在后台做了什么。

【问题讨论】:

  • 任何情况下函数不会/不能返回数组? (你在使用异常处理吗?)
  • 是:该函数查询某个id的属性,该属性有时不存在(例如一个人的中间名,仅作为示例)我没有为此使用异常处理因为它不返回错误,只是一个警告。

标签: php arrays function merge performance


【解决方案1】:

返回空数组。比较两个选项的复杂性

  1. 返回一个空数组并将其与完整的 OR 合并
  2. 返回 null,将返回值存储在变量中,检查该变量,然后在需要时将其合并。

当你编写一个函数时,除了你之外的其他人会使用它(这包括从 6 个月开始不知道你当前在做什么的你)。如果您返回 null,则使用您的函数的人需要知道它可能不会返回数组,因此无论何时他们使用您的函数,都需要将其变量包装在大量 is_arrayis_set 检查中。这会导致以后更难维护代码,或者当你的应用程序/系统在返回数组时工作时它工作的错误,但在返回 null 时不会。如果你的函数总是返回一个数组,人们可以安全地将它传递给期望一个数组的函数。 (这就是为什么一些强类型强制的倡导者讨厌 PHP。在像 Java 这样的语言中,这并不令人满意,因为函数 have 返回特定类型的东西)

您对性能的关注是值得称赞的,但总的来说,内置的数组操作函数调整得很好,并且只会在一小部分时间出现瓶颈。在日常代码运行中,检查变量值和合并到零元素数组中的性能优势将可以忽略不计。

使用更简洁的 API、基准测试,然后优化您开始发现性能问题的特定情况。

【讨论】:

    【解决方案2】:

    如果没有要返回的内容,则只返回一个空数组。这听起来最合乎逻辑。

    【讨论】:

      【解决方案3】:

      我会去……

      1. 如果没有结果,则返回一个空数组 错了

      2. 返回 false(或抛出异常) 如果发生错误

      ...虽然这意味着您必须做一些额外的工作,但这可能是更好的做法,并且从长远来看会带来回报。 (array_merging 与返回值可能看起来很简洁,但它有点可疑,除非不可能发生任何错误。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-01
        • 2017-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多