我想使用相同的代码来管理多个实体,但它可能会有所不同,具体取决于它是否有某种方法。这就是为什么我需要检查对象是否有名称的方法。有没有办法做到这一点?
答案 0 :(得分:11)
您只需使用is_callable
:
if (is_callable([$entity, 'methodName']))
doSomething();
更简洁的方法是使用instanceof
检查对象的类。因为方法会来来去去,但是对象的特征是由它的类确定的:
if ($entity instanceof \Some\Bundle\Entity\Class)
doSomething();
答案 1 :(得分:5)
这与Symfony无关,它是PHP的基本功能:使用 method_exists PHP函数。
bool method_exists ( mixed $object , string $method_name )
虽然这是一种非常好的解决方法,但您可能希望将接口作为替代方案:PHP Interfaces
如果您决定使用它们,您只需检查对象是否是您的界面的实例:
interface MyAwesomeInterface
{
public function myFunction();
}
if ($myObject instanceof MyAwesomeInterface) {
$myObject->myFunction();
}