代码之家  ›  专栏  ›  技术社区  ›  Einius

如何在Symfony2中检查对象是否具有方法

  •  4
  • Einius  · 技术社区  · 9 年前

    我想使用同一段代码来管理多个实体,但这可能会有所不同,这取决于它是否有某种方法。这就是为什么我需要按名称检查对象是否有方法。有什么办法吗?

    2 回复  |  直到 9 年前
        1
  •  14
  •   lxg    9 年前

    您可以简单地使用 is_callable :

    if (is_callable([$entity, 'methodName']))
        doSomething();
    

    更干净的方法是使用 instanceof 。因为方法会来来去去,但对象的特性由其类决定:

    if ($entity instanceof \Some\Bundle\Entity\Class)
        doSomething();
    
        2
  •  7
  •   Igor Pantović    8 年前

    这与Symfony无关,它是PHP的基本功能:使用 方法_存在 PHP函数。

    bool method_exists ( mixed $object , string $method_name )
    

    PHP Docs

    虽然这是一个很好的解决方法,但您可能需要研究接口作为替代: PHP Interfaces

    若您确实决定使用它们,您可以只检查对象是否是接口的实例:

    interface MyAwesomeInterface
    {
        public function myFunction();
    }
    
    
    if ($myObject instanceof MyAwesomeInterface) {
        $myObject->myFunction();
    }