Com*_*fox 16 php type-hinting php-7 php-7.1
当我遇到问题时,我正在重构一个用于PHP7的代码库,特别是实现标量类型提示和返回类型提示.
我有一个属性的类,其中一个属性.此id不是必需的(您可以在不设置ID的情况下构造对象).在创建此类的新对象时,不要设置id,并且只要将其插入db(通过单独的映射器类),它就会获得id.
此映射器类需要检查对象是否已存在于db中,并通过检查是否已设置id来执行此操作:
if(empty($exampleObject->getId())) {
// Insert object
} else {
// Update object
}
Run Code Online (Sandbox Code Playgroud)
我将返回类型提示应用于我的代码库中的每个函数,问题是如果我强制执行int返回类型,函数getId()不能返回NULL.It TypeErrors,即使没有启用严格的输入:
致命错误:未捕获TypeError:ExampleClass :: getId()的返回值必须是integer类型,返回null
我认为没有为此getter设置返回类型提示,但我意识到问题可能不是返回类型提示,而是我使用混合返回类型的事实.我记得在某处读过使用混合返回类型是一件坏事,但我不知道如何在不使用混合返回类型的情况下解决这个问题.我可以:
hasId() return isset($this->id)坦率地说,不喜欢任何这些解决方案,我想知道是否有更好的选择.对于这样的案例,最佳做法是什么?
另外,如果我启用了严格的输入,我不应该只获得TypeError吗?我认为PHP7默认为"弱类型提示".
And*_*rea 26
PHP 7.1添加了可空类型,在类型名称前面加上一个问号,将返回类型标记为接受该类型和null:
public function getId(): ?int {
/* … */
}
Run Code Online (Sandbox Code Playgroud)
如果您仍然使用PHP 7.0,我建议省略类型声明并使用docblock.
| 归档时间: |
|
| 查看次数: |
6607 次 |
| 最近记录: |