Maybe instead of such long checks, introduce new exception that do this in `__construct()` instead? I.e.:
```php
class InvalidEventArgumentException extends \InvalidArgumentException
{
    public function __construct($listener, $passed, $expected)
    {
        $passed = is_object($passed) ? get_class($passed) : gettype($passed);
        
        parent::__construct(sprintf('%s listener requires event subject to be instance of "%s", %s given.', $listener, $expected, $passed));
    }
}

thrown new InvalidEventArgumentException('Order payment', $payment, 'Sylius\Bundle\PaymentsBundle\Model\PaymentInterface');