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

Ein*_*ius 3 php symfony

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

lxg*_*lxg 11

你可以简单地使用is_callable:

if (is_callable([$entity, 'methodName']))
    doSomething();
Run Code Online (Sandbox Code Playgroud)

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

if ($entity instanceof \Some\Bundle\Entity\Class)
    doSomething();
Run Code Online (Sandbox Code Playgroud)


Igo*_*vić 5

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

bool method_exists ( mixed $object , string $method_name )
Run Code Online (Sandbox Code Playgroud)

PHP文档

虽然这是一个非常好的解决方法,但您可能希望将接口作为替代方案:PHP接口

如果您决定使用它们,您只需检查对象是否是您的界面的实例:

interface MyAwesomeInterface
{
    public function myFunction();
}


if ($myObject instanceof MyAwesomeInterface) {
    $myObject->myFunction();
}
Run Code Online (Sandbox Code Playgroud)