php - 即使数据库中的值不可为空,getter 是否应该返回“或 null”?
问题描述
我有一个包含 SMS 验证消息的表,并且我有一个最后发送的列和尝试次数列所以在数据库中它们不能为空,但是在代码中创建实体时,值最初为空,所以我应该先调用 setter getter 并使 getter 返回正确的值(返回 DateTime,返回 int)或使 getter 返回或为 null,即使数据库中的值不可为空(这个问题是关于最佳实践)
如果是这样可以吗
getNumberOfTries(): ?int
还是应该严格
getNumberOfTries(): int
所以我应该说既然数据库值不为空,那么 getter 应该总是返回一个值吗?或者如果我创建一个新实体而不为此值调用setter,getter返回null是否可以?
解决方案
这真是见仁见智。
这是我的 ORM 中的 PHP DOC BLOCK。这是我使用 php 脚本从 MySQL 转储中编写的更大的自动生成代码 ORM 的一部分。 PHP ORM 程序
/**
*
* $argv = [
* 'select' => [
* '*column name array*', 'etc..'
* ],
*
* 'where' => [
* 'Column Name' => 'Value To Constrain',
* 'Defaults to AND' => 'Nesting array switches to OR',
* [
* 'Column Name' => 'Value To Constrain',
* 'This array is OR'ed togeather' => 'Another sud array would `AND`'
* [ etc... ]
* ]
* ],
*
* 'pagination' => [
* 'limit' => (int) 90, // The maximum number of rows to return,
* setting the limit explicitly to 1 will return a key pair array of only the
* singular result. SETTING THE LIMIT TO NULL WILL ALLOW INFINITE RESULTS (NO LIMIT).
* The limit defaults to 100 by design.
*
* 'order' => '*column name* [ASC|DESC]', // i.e. 'username ASC' or 'username, email DESC'
*
*
* ],
*
* ];
*
*
* @param array &$return
* @param string|null $primary
* @param array $argv
* @return bool
*/
public static function Get(array &$return, string $primary = null, array $argv) : bool
{
... SEE LINK ...
}
在这个用例中,调用函数或方法实际上得到了两个响应。$return 变量的内容是通过引用传递的,因此如果现在可以在其中包含不同的数据,并且数据库成功传递响应由 bool 返回给出。
在您的情况下,如果我被迫制作一种方法,例如提出的方法,我不会给出可空选项。我假设数据已从数据库成功返回,如果它不是 INT,我会继续将其设为 0。我会选择此选项,因为这意味着调用函数中的类型检查更少。如果 null 要象征其他东西,我可以看到这个理由允许: ?bool。但是,我希望通过上面的代码片段,您可以推断出更好的 ORM 替代方案。
当我有三个可能的函数返回时,我个人只使用可能为空的响应。这在 web 开发中几乎从不发生,但在递归编程中却一直存在。
推荐阅读
- azure - 签名不匹配。使用的签名字符串是 rl
- apache - 如何将 URL 的一部分从大写变为小写?
- tensorflow - 将元数据传递给自定义损失函数
- javascript - 当我输入我设置为的变量时,我无法分配随机数的函数出现
- python-3.x - 更改每个 CSV 文件值
- java - 使用 saxon 作为库编写 XML
- flutter - 如何正确收听短信代码颤动
- arrays - 分配结构数组时出现段错误
- python - 当鼠标悬停在 Tkinter 上的画布上时,如何制作动画?
- ios - Flutter iOS:无法读取规范“Firebase(7.3.0)”的许可证文件“LICENSE”;`GoogleUtilities (7.2.2)`