Doc #78677 [Opn]: Parameter Type Widening not properly documented
| From: | cmb@php.net | Date: | Thu, 17 Oct 2019 09:12:33 +0000 |
| Subject: | Doc #78677 [Opn]: Parameter Type Widening not properly documented | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-17020@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78677&edit=1
ID: 78677
Updated by: cmb@php.net
Reported by: pavel at bunaev dot ru
Summary: Parameter Type Widening not properly documented
Status: Open
Type: Documentation Problem
Package: Class/Object related
Operating System: 18.04.1-Ubuntu
PHP Version: 7.2.23
Block user comment: N
Private report: N
New Comment:
Well, there is a note in the Interfaces section[1], but this is
only correct for PHP 7.2 and up (and even too general for 7.2),
and it doesn't cater to inheritance in general. It seems to me
that this should be documented in the Inheritance section[2]; we
could link to that section from other parts of the manual where
appropriate.
[1] <https://www.php.net/manual/en/language.oop5.interfaces.php>
[2] <https://www.php.net/manual/en/language.oop5.inheritance.php>
Previous Comments:
------------------------------------------------------------------------
[2019-10-17 08:05:43] sjon@php.net
@cmb shouldn't this functionality also be documented on https://www.php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration
?
------------------------------------------------------------------------
[2019-10-17 08:04:01] sjon@php.net
While this might be documented better, this is definitely not a bug, see
https://wiki.php.net/rfc/parameter-no-type-variance
------------------------------------------------------------------------
[2019-10-17 08:02:40] cmb@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
See <https://www.php.net/manual/en/migration72.new-features.php#migration72.new-features.param-type-widening>.
------------------------------------------------------------------------
[2019-10-17 07:41:20] pavel at bunaev dot ru
Description:
------------
The interface allows you to change the type of variable in an incompatible direction.
In versions php 7.0+ and 7.1-, we could specify in the interface with what types of data we will
work in the method.
And at the kernel level, be sure that by implementing the interface the signature will not change.
In version php 7.2+ and 7.3+, this has changed and there was no announcement ..
We can create an interface and expect in the signature that the method will work with certain
arguments
but in fact we can transfer anything
OS linux
version php 7.2+
version php 7.1- is ok
Test script:
---------------
<?php
interface IBaz {};
interface IFoo {
public function simple(IBaz $a);
}
class CFoo implements IFoo {
public function simple($a){
var_dump($a);
}
}
$cFoo = new CFoo();
$cFoo->simple('vbvc');
Expected result:
----------------
<br />
<b>Fatal error</b>: Declaration of CFoo::simple($a) must be compatible with
IFoo::simple(IBaz $a) in <b>[...][...]</b> on line <b>7</b><br />
Actual result:
--------------
string(4) "vbvc"
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=78677&edit=1