返回带有返回类型声明的 NULL
2022-08-30 23:20:03
当我遇到问题时,我正在重构用于PHP7的代码库,特别是实现标量类型提示和返回类型提示。
我有一个带有一些属性的类,其中一个是id。此 id 不是必需的(您可以在不设置 id 的情况下构造对象)。创建此类的新对象时,无需设置 id,一旦将其插入到 db 中(通过单独的映射器类),它就会立即获取 id。
此映射器类需要检查 db 中是否已经存在该对象,它通过检查是否设置了 id 来执行此操作:
if(empty($exampleObject->getId())) {
// Insert object
} else {
// Update object
}
我正在将返回类型提示应用于代码库中的每个函数,问题是如果我强制执行int返回类型,则该函数无法返回NULL。它键入错误,即使没有启用严格键入:getId()
致命错误:未捕获的类型错误:示例类的返回值::getId() 必须是整数类型,返回 null
我考虑过不为这个 getter 设置返回类型提示,但后来我意识到问题可能不是返回类型提示,而是我使用混合返回类型的事实。我记得在某处读到过,使用混合返回类型是一件坏事,但我不确定如何在不使用混合返回类型的情况下解决这个问题。我可以:
- 在 getter 中引发异常,并在映射器类中设计检查,以便它捕获该异常。
- 捕获 TypeError 异常,并使用它来指示未设置 id。
- 使id属性公开,这样我就可以直接调用isset。
- 添加其他方法
hasId() return isset($this->id)
坦率地说,我真的不喜欢这些解决方案中的任何一个,我想知道是否有更好的选择。对于这种情况,最佳做法是什么?
另外,如果我启用了严格键入,难道不应该只得到一个TypeError吗?我以为 PHP7 默认为“弱类型提示”。