2015-09-07 28 views
3

我想使用同一段代码来管理多个实体,但它可能有点不同,具体取决于它是否具有某种方法。这就是为什么我需要检查对象是否有名称的方法。有没有办法做到这一点?如何在Symfony2中检查对象是否有方法

回答

9

您可以简单地使用is_callable

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

更简洁的方法是使用instanceof检查对象的类。因为方法会来来去去,但是物体的性质取决于它的类别:

if ($entity instanceof \Some\Bundle\Entity\Class) 
    doSomething(); 
5

这与Symfony无关,它是基本的PHP事情:使用method_exists PHP函数。

bool method_exists (mixed $object , string $method_name) 

PHP Docs

虽然这是一个完全正常的方式去解决它,你可能想看看接口作为一种替代方案:PHP Interfaces

如果你决定使用它们,就可以只是检查的对象是你的接口的实例:

interface MyAwesomeInterface 
{ 
    public function myFunction(); 
} 


if ($myObject instanceof MyAwesomeInterface) { 
    $myObject->myFunction(); 
} 
相关问题