首页 > 解决方案 > 即使数据库中的值不可为空,getter 是否应该返回“或 null”?

问题描述

我有一个包含 SMS 验证消息的表,并且我有一个最后发送的列和尝试次数列所以在数据库中它们不能为空,但是在代码中创建实体时,值最初为空,所以我应该先调用 setter getter 并使 getter 返回正确的值(返回 DateTime,返回 int)或使 getter 返回或为 null,即使数据库中的值不可为空(这个问题是关于最佳实践)

如果是这样可以吗

getNumberOfTries(): ?int

还是应该严格

getNumberOfTries(): int

所以我应该说既然数据库值不为空,那么 getter 应该总是返回一个值吗?或者如果我创建一个新实体而不为此值调用setter,getter返回null是否可以?

标签: phpsymfonygetter-settergetter

解决方案


这真是见仁见智。

这是我的 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 开发中几乎从不发生,但在递归编程中却一直存在。


推荐阅读