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

Reply via email to