如何检查symfony2中是否有某个类的实例

Ran*_*ngh 72 php

如果实体是少数类但不是某些类的成员,我想执行一些函数.

有一个叫做的函数instanceof.

但是有类似的东西吗?

if ($entity !instanceof [User,Order,Product])
Run Code Online (Sandbox Code Playgroud)

Kin*_*nch 121

然后给他们一个共同的界面

if (!$entity instanceof ShopEntity)
Run Code Online (Sandbox Code Playgroud)

或者留下来

if (!$entity instanceof User && !$entity instanceof Product && !$entity instanceof Order)
Run Code Online (Sandbox Code Playgroud)

我会避免创建任意函数只是为了在一个地方保存一些字符.另一方面,如果你"经常"需要它,你可能有一个设计缺陷?(在"太多边缘案例"等意义上)

  • `if(!($ entity instanceof User))`不是更好吗? (55认同)
  • @DanFromGermany没有什么区别.也许是可读性.由你决定. (6认同)
  • @Jonathan见http://php.net/manual/en/language.operators.precedence.php最后它只是关于`$ a + $ b + $ c` vs`($ a + $ b)+ $ c`.曾经尝试过`2**3**4 ==(2**3)**4`?;) (4认同)

Dra*_*gos 60

PHP手册说:http://php.net/manual/en/language.operators.type.php

!($a instanceof stdClass)
Run Code Online (Sandbox Code Playgroud)

这只是一种逻辑和"语法"正确的书面语法.

!$class instanceof someClass
Run Code Online (Sandbox Code Playgroud)

但是,上面建议的语法很棘手,因为我们没有具体说明否定的范围:变量本身或整个构造$class instanceof someclass.我们只需要依赖运营商的优先权[编辑,感谢@Kolyunya].

  • 这是一个更清洁的解决方案 我确信有一半的人最终会在这个问题上开始寻找,因为`if(!$ entity instanceof ShopEntity)`不直观......我们很多人都使用`!$ entity`作为`$ entity === null`. (6认同)
  • 你的意思是什么?我们只需要依赖PHP解析器的智能实现.?有一种语言规范明确指出`instanceof`运算符的优先级高于`!`运算符. (5认同)
  • @Kolyunya 可读性,与“嗯,这看起来很奇怪……让我查找 php 的运算符优先级……好吧,检查出来” (2认同)

小智 12

PHP运算符优先级

instanceof 运算符就在否定之前然后这个表达式:

!$class instanceof someClass
Run Code Online (Sandbox Code Playgroud)

在PHP中是正确的,这是你所期望的.