【问题标题】:Best Practice : Seconds Since datetime when datetime is empty or null最佳实践:当日期时间为空或为空时,自日期时间以来的秒数
【发布时间】:2020-09-18 16:28:48
【问题描述】:

我觉得这个问题与语言无关,但我将使用 PHP 作为示例


abstract class myUserClass {
  private $last_visit = null;

  abstract getLastVisit() ?string;
  abstract secondsSinceLastVisit() int;

}

假设您在对象上有一些日期时间(如 last_visit)属性

last_visit = 2020-10-10 09:25:25

last_visit 可以是日期时间的字符串表示或用户从未访问过的null

然后你有一个像secondsSinceLastVisit() : int这样的方法

这个函数返回一个int,代表自last_visit以来的秒数

last_visit 为空时返回的最佳做法是什么?

我们可以: return null 这意味着这是未定义的 返回some_really_large_number意义-很久以前 还有什么???

我遇到了麻烦


if( !$user->secondsSinceLastVisit() )
{
 //user has never visited
}

secondsSinceLastVisit() 返回零时,这在某些单元测试中失败了! 0

所以,我通过测试更改为 is_null( $user->secondsSinceLastVisit() ) 解决了这个问题

我的问题本质上是一般性的 - 当last_visit 为空时,secondsSinceLastVisit() 的返回值有什么好的做法?

【问题讨论】:

  • 为什么人们认为任何人都被“什么是最佳实践”所愚弄
  • @RiggsFolly “i 在 e 之前,c 之后除外”。嗯....这适用于“e之前的o,除了p之后”吗?呵呵。
  • @FunkFortyNiner Nicked
  • 如果我实现这个,我会返回 null。

标签: php datetime return-value return-type


【解决方案1】:

确实有 2 个不错的选择:

  1. 返回nullnull 通常是缺少值的替代品,因此在这里非常有意义。
  2. 抛出异常

我认为两者都可以,但你选择哪一个取决于问题的答案:

“当用户尚未访问时,有人为用户调用secondsSinceLastVisit(),这是一个错误吗?”

【讨论】:

  • 谢谢 - 问题“当用户尚未访问时,有人为用户调用 secondsSinceLastVisit() 是否是错误?”真的有帮助。在我的情况下,我会说这是真的 - 因此,抛出一个异常
猜你喜欢
  • 1970-01-01
  • 2016-02-08
  • 2011-08-22
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 2023-03-26
相关资源
最近更新 更多