On Thu, 2004-02-26 at 02:13, Timm Friebe wrote: > On Thu, 2004-02-26 at 01:38, Marcus Boerger wrote: > > Hello Timm, > [...] > > > Should work #1, Bar::connect() adds an argument > > No the sugnature is incompatible. An instance of Foo cannot be called > > with Bar or Connector's connect() Signature. Hence Bar is not a Foo > > or Connector. > > Hrm, that's quite a (huge) BC break then.
Maybe we'd all be happier with an E_STRICT warning for inheritance and an E_COMPILE_ERROR for interfaces implementation. - Timm
Index: Zend/zend_compile.c =================================================================== RCS file: /repository/ZendEngine2/zend_compile.c,v retrieving revision 1.547 diff -u -r1.547 zend_compile.c --- Zend/zend_compile.c 25 Feb 2004 17:23:50 -0000 1.547 +++ Zend/zend_compile.c 26 Feb 2004 01:34:10 -0000 @@ -1828,8 +1828,19 @@ } } + /* Perform implementation check. When implementing an interface and the + * check fails, this will result in a fatal error. When inheriting, + * we'll issue an E_STRICT warning, but will continue. + */ if (!zend_do_perform_implementation_check(child)) { - zend_error(E_COMPILE_ERROR, "Declaration of %s::%s() must be compatible with that of %s::%s()", ZEND_FN_SCOPE_NAME(child), child->common.function_name, ZEND_FN_SCOPE_NAME(child->common.prototype), child->common.prototype->common.function_name); + zend_error( + child->common.prototype->common.scope->ce_flags & ZEND_ACC_INTERFACE ? E_COMPILE_ERROR : E_STRICT, + "Declaration of %s::%s() must be compatible with that of %s::%s()", + ZEND_FN_SCOPE_NAME(child), + child->common.function_name, + ZEND_FN_SCOPE_NAME(child->common.prototype), + child->common.prototype->common.function_name + ); } return 0;
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php