Как проверить, имеет ли объект метод в Symfony2

Я хочу использовать один и тот же фрагмент кода для управления несколькими объектами, но он может немного отличаться, если он имеет какой-либо метод или нет. Вот почему мне нужно проверить, имеет ли объект метод по имени. Есть ли способ сделать это?

Related of "Как проверить, имеет ли объект метод в Symfony2"

Вы можете просто использовать is_callable :

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

Более чистым подходом является проверка класса объекта с instanceof . Поскольку методы приходят и уходят, но характер объекта определяется его классом:

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

Это не имеет ничего общего с Symfony, это основная вещь PHP: используйте функцию function_exists PHP.

 bool method_exists ( mixed $object , string $method_name ) 

PHP-документы

Хотя это прекрасный способ обойти это, вы можете захотеть изучить интерфейсы в качестве альтернативы: PHP-интерфейсы

Если вы решите их использовать, вы можете просто проверить, является ли объект экземпляром вашего интерфейса:

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