最佳实践:当 datetime 为空或 null 时自 datetime 以来的秒数

Best Practice : Seconds Since datetime when datetime is empty or null

我觉得这个问题与语言无关,但我将使用 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

这样的方法

而这个函数return是一个int,表示自last_visit

以来的秒数

last_visit 为空时 returning 的最佳实践是什么?

我们可以: return null 这意味着这是未定义的 Return some_really_large_number 意思是很久以前 还有别的吗???

我 运行 在做这件事时遇到了麻烦


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

secondsSinceLastVisit() return 为零时,这在某些单元测试期间失败了! 0

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

我的问题是一般性问题 - 当 last_visit 为 null 时,secondsSinceLastVisit() 的 return 值有什么好的做法?

确实有 2 个不错的选择:

  1. Returnnullnull 通常是 stand-in 表示没有值,所以这在这里很有意义。
  2. 抛出异常

我觉得哪个都可以,但是你选择哪个取决于问题的答案:

“当用户尚未访问时有人为用户调用 secondsSinceLastVisit() 是否是错误?”