Я хочу использовать один и тот же фрагмент кода для управления несколькими объектами, но он может немного отличаться, если он имеет какой-либо метод или нет. Вот почему мне нужно проверить, имеет ли объект метод по имени. Есть ли способ сделать это?
Вы можете просто использовать 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(); }