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


How to check if object has method in Symfony2

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

您可以简单地使用is_callable:

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

一种更简洁的方法是用instanceof检查对象的类。因为方法来来去去,但是对象的特性是由它的类决定的:

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

这与Symfony无关,这是PHP的基本功能:使用method_exists PHP函数。

bool method_exists ( mixed $object , string $method_name )
PHP文档

虽然这是一种完美的绕过它的方法,但您可能希望将接口作为另一种选择:

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

interface MyAwesomeInterface
{
    public function myFunction();
}

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