Replacing use of is_callable with method_exists due to it inaccurately reporting true on objects with __call()