Bug #73220 [Opn->Nab]: Classes implementing an interface can violate its method's signatures

[email protected] Sat, 1 Oct 2016 21:50:51 GMT
Newsgroups php.standards
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=73220&edit=1

 ID:                 73220
 Updated by:         [email protected]
 Reported by:        phansys at gmail dot com
 Summary:            Classes implementing an interface can violate its
                     method's signatures
-Status:             Open
+Status:             Not a bug
 Type:               Bug
 Package:            PHP Language Specification
 Operating System:   any
 PHP Version:        7.0.11
 Block user comment: N
 Private report:     N

 New Comment:

Adding additional default values does not violate LSP (Liskov Substitution Principle) in that in your example, B can be used in place of any other class that implements A and as such it is entirely compatible with A and there should be no error.


Previous Comments:
------------------------------------------------------------------------
[2016-10-01 19:53:14] phansys at gmail dot com

Description:
------------
Classes implementing an interface can violate its method's signatures by adding more arguments with a default value.

Test script:
---------------
interface A
{
    public function test($one = null);
}

class B implements A
{
    public function test($one = null, $two = null)
    {
        var_dump($one, $two);
    }
}

Expected result:
----------------
Fatal error: Declaration of B::test($one, $two) must be compatible with A::test($one = NULL)

Actual result:
--------------
No error.


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=73220&edit=1