I have take note that a lot of projects (like Laravel) prefer uses method_exists() than implements an empty function (that should be useful to IDE when it is not annotated as an @method on class).
For some reason, method_exists() will works faster than direct call when method doesn't exists vs. a direct method call when method is empty. My benchmarks: Case #1: * Direct call, empty method: * Cycles by min. : 26.459.804 Case #2: * Direct call, simple content (eg. is_bool(true)): * Cycles by min. : 24.771.454 - 6.38% slower than Case #1 Case #3: * method_exists(), no method: * Cycles by min. : 45.014.690 - 70.12% faster than Case #1 Case #4: * method_exists(), method exists with simple content: * Cycles by min. : 18.068.555 - 27.06% slower than Case #2 You will note that method_exists() will be more useful when method doesn't exists (+70% faster), but worse in cases where it does (27% slower). Which make that a hard decision, because you need "guess" the method declaration usage when implements something like that. If case the method existence is very low, then you will prefer method_exists(), which is bad for code design. My suggestion here (that I don't know if could be applied as is): identify empty methods and avoiding the execution (once that it will not do anything anyway). So we could just implement empty methods without any problem. Maybe it could be done at this point and related: https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L725 -- David Rodrigues