在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
}
答案 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是一个数组,在您的示例中,我不明白您所指的是什么方法。