Edit report at http://bugs.php.net/bug.php?id=52301&edit=1
ID: 52301 Updated by: johan...@php.net Reported by: giorgio dot liscio at email dot it Summary: signature incompatibility warning when used with interfaces Status: Bogus Type: Bug Package: Class/Object related Operating System: all PHP Version: 5.3.2 New Comment: interface X guarantees that any A may be passed. You limit it to A_BASED. MyClass is a valid A but no A_BASED, so X_BASED won't accept it, which conflicts with the promise by interface X. Previous Comments: ------------------------------------------------------------------------ [2010-07-09 18:13:23] giorgio dot liscio at email dot it hi johannes, please read better my example interface A {} interface X { public function __construct(A $x); } class A_BASED implements A {} class X_BASED implements X { public function __construct(A_BASED $TESTTEST){} } interface X says its constructor first parameter should be "instance of A" XBASED implements X says its constructor first parameter should be "instance of A_BASED" A_BASED as type hint is correct because A_BASED implements A ------------------------------------------------------------------------ [2010-07-09 17:53:23] johan...@php.net class MyClass implements A {} new X_BASED(new MyClass); won't be accepted while X says MyClass would be valid as a constructor Parameter -> contract not fullfilled. So PHP's error is correct. ------------------------------------------------------------------------ [2010-07-09 17:23:24] giorgio dot liscio at email dot it Description: ------------ hi, test this: interface A {} interface X { public function __construct(A $x); } class A_BASED implements A {} class X_BASED implements X { public function __construct(A_BASED $x){} } interface X says that the first parameter of the constructor must be instanceof A X_BASED implementation has a constructor with first parameter A_BASED so, this warning is not correct: Fatal error: Declaration of X_BASED::__construct() must be compatible with that of X::__construct() because "A_BASED implements A" ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=52301&edit=1