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