我们应该用什么来测试存在性

时间:2019-08-26 12:27:54

标签: php symfony doctrine

在php symfony中,我们使用主义。 在我们项目的许多部分中,我们使用:

$entity = $manager->getRepository(Entity::class)->find(['toto' => $toto]);

$entity = $manager->getRepository(Entity::class)->findOneBy(['toto' => $toto]);

然后我们测试是否有结果。两者之间最好做的是什么

if (!empty($entity )) {
some todo
}

if (null === $entity )) {
some todo
}

3 个答案:

答案 0 :(得分:2)

对于这种情况,至少对我来说,最好的方法是像

一样检查instanceof
if ($entity instanceof Entity::class)

顺便说一句,这确实是主观的,但我永远不喜欢empty而不是null,因为它们带来了完全不同的意义。

使用empty可能永远不会声明该变量,它可以具有不同的类型(字符串,数组,null,false),等等。

通过null并进行严格检查,您仅测试了 (空)类型的值(并且可以,直到原则更改其API为止)。

对我来说,最好使用instanceof,因为您“绕过”了所有其他值,无论您从查询中得到什么类型。

答案 1 :(得分:1)

“如果变量根本不存在(通常是因为尚未声明,而有时是因为尚未分配值),则为null。如果变量存在但不包含数据,则为空。如果存在结构化数据变量(例如数组)但不包含任何项目,则该变量的长度为零。” 您可以在此处阅读整篇文章:https://www.dougv.com/2008/10/the-difference-between-null-empty-and-zero-length-data-strings/

答案 2 :(得分:1)

find,findby和findoneby之间有区别。 findby返回数组,如果找到则包含一个或多个元素,否则为空数组。 findoneby返回找到的实体类的实例对象,否则为null。

对我来说,您应该测试查找并找到

if ($entity instanceof Entity::class) { }

由@DonCallisto建议,而

if (count($entity) === 0) { } 

如果您使用findby。

我还指定了findby,因为find带有一个id,findBy是一个数组,在您的示例中,我不明白您所指的是什么方法。