|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2010-07-09 17:23 UTC] 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"
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 21:00:02 2025 UTC |
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.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 Abut my A_BASED is a valid instance of A too class A_BASED implements A {} constructor __construct(A_BASED $TESTTEST) {} overrides abstract __construct(A $TESTTEST) {} and A_BASED instanceof A === TRUE so i don't limit anything because all methods required by interface A are implemented in class A_BASEDi think it is a bug because with abstract classes works good abstract class A {} abstract class X { abstract public function __construct(A $x); } // must be at least A class A_BASED extends A {} class X_BASED extends X { public function __construct(A_BASED $x){} } // it is A_BASED, so it satisfy A