Bug #54512 [Csd->Nab]: Strict notice of different method signatures does not appear for constructor
| From: | aharvey@php.net | Date: | Sat, 14 Apr 2012 03:00:30 +0000 |
| Subject: | Bug #54512 [Csd->Nab]: Strict notice of different method signatures does not appear for constructor | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-169581@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=54512&edit=1
ID: 54512
Updated by: aharvey@php.net
Reported by: gphilip at vipmail dot hu
Summary: Strict notice of different method signatures does
not appear for constructor
-Status: Closed
+Status: Not a bug
Type: Bug
Package: Scripting Engine problem
Operating System: Fedora 14
PHP Version: 5.3.6
-Assigned To: nikic
+Assigned To:
Block user comment: N
Private report: N
Previous Comments:
------------------------------------------------------------------------
[2012-04-13 20:45:12] nikic@php.net
Constructors are not affected by the Liskov substitution principle, thus they don't need to
have a matching signature. See http://stackoverflow.com/questions/5490824/should-constructors-comply-with-the-liskov-substitution-principle
for a bit of reasoning.
------------------------------------------------------------------------
[2011-04-12 10:42:38] gphilip at vipmail dot hu
Description:
------------
When a method signature is different in an inherited class and its parent, you get
a strict notice (assuming they are turned on).
This does not happen with constructors.
Test script:
---------------
<?php
error_reporting( -1 );
class A
{
public function __construct( $a )
{
}
}
class B extends A
{
public function __construct( array $a )
{
}
}
class C
{
public function doSomething( $a )
{
}
}
class D extends C
{
public function doSomething( array $a )
{
}
}
Expected result:
----------------
Strict Notice Declaration of B::__construct() should be compatible with that of
A::__construct() in ...
Strict Notice Declaration of D::doSomething() should be compatible with that of
C::doSomething() in ...
Actual result:
--------------
Strict Notice Declaration of D::doSomething() should be compatible with that of
C::doSomething() in ...
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=54512&edit=1