Edit report at https://bugs.php.net/bug.php?id=60573&edit=1
ID: 60573 Comment by: larue...@php.net Reported by: jpa...@php.net Summary: type hinting with "self" keyword causes weird errors Status: Assigned Type: Feature/Change Request Package: Scripting Engine problem Operating System: *nix PHP Version: 5.3.8 Assigned To: laruence Block user comment: N Private report: N New Comment: a patch for php 5.4 was submitted, since 5.4 will generate detailed info about the prototype argument list, so this defect is more significant for 5.4. and Tyrael suggest commit this only after 5.4.0 release. so leave this open, I will commit later. thanks Previous Comments: ------------------------------------------------------------------------ [2011-12-20 16:01:42] larue...@php.net The following patch has been added/updated: Patch Name: bug60573.phpt Revision: 1324396902 URL: https://bugs.php.net/patch-display.php?bug=60573&patch=bug60573.phpt&revision=1324396902 ------------------------------------------------------------------------ [2011-12-20 16:01:15] larue...@php.net The following patch has been added/updated: Patch Name: bug60573.patch Revision: 1324396875 URL: https://bugs.php.net/patch-display.php?bug=60573&patch=bug60573.patch&revision=1324396875 ------------------------------------------------------------------------ [2011-12-20 12:53:38] larue...@php.net I have a patch now, will apply it after do careful testings ------------------------------------------------------------------------ [2011-12-20 12:31:44] larue...@php.net This is really a tough one, think about following: <?php class Foo { public function setSelf(self $s) { } } class Bar extends Foo { public function setSelf(parent $s) { } } ?> --------------------- <?php class Foo { public function setSelf(Foo $s) { } } class Bar extends Foo { public function setSelf(parent $s) { } } ----------------------- <?php class Base { } class Foo extends Base{ public function setSelf(parent $s) { } } class Bar extends Foo { public function setSelf(Base $s) { } } and more....... ------------------------------------------------------------------------ [2011-12-20 10:56:31] jpa...@php.net Description: ------------ "self" should be thought as "the class where the keyword is written in". Here is then a strange behavior using inheritance : Test script: --------------- class Foo { public function setSelf(self $s) { } } class Bar extends Foo { public function setSelf(self $s) { } } Expected result: ---------------- Strict Standards as Bar::setself() signature doesn't respect Foo::setSelf() signature. Foo's one has a type hint on Foo (using self keyword), but Bar's one on Bar (still using self keyword) : the methods then have a signature mismatch, and PHP should complain about that Actual result: -------------- Nothing happens. Trying this gives the correct E_STRICT error, correct behavior : class Foo { public function setSelf(Foo $s) { } } class Bar extends Foo { public function setSelf(Bar $s) { } } ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=60573&edit=1