Doc #80822 [Opn]: signature of ArrayObject::exchangeArray($array) has changed
| From: | cmb@php.net | Date: | Thu, 11 Nov 2021 14:26:41 +0000 |
| Subject: | Doc #80822 [Opn]: signature of ArrayObject::exchangeArray($array) has changed | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-19328@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=80822&edit=1
ID: 80822
Updated by: cmb@php.net
Reported by: ievgen dot varava at spryker dot com
Summary: signature of ArrayObject::exchangeArray($array) has
changed
Status: Open
Type: Documentation Problem
-Package: Documentation problem
+Package: SPL related
Operating System: OS X
PHP Version: 8.0.2
Block user comment: N
Private report: N
New Comment:
> Signature of ArrayObject::exchangeArray($array) has changed, but
> is not documented.
That's a bit tricky. The method always expected array|object (and
the documentation reflects that now), but prior to PHP 8.0.0, the
arginfo (which is relevant for inheritance) had no info about the
parameter type. This likely affects a lot of other methods as
well.
> Also, passing invalid parameter throws TypeError in PHP8 vs
> InvalidArgumentException in PHP7
Passing invalid parameter types to internal functions is
documented to be undefined behavior[1], so we may not want to
document this change.
[1] <https://www.php.net/manual/en/functions.internal.php>
Previous Comments:
------------------------------------------------------------------------
[2021-03-03 00:37:47] ievgen dot varava at spryker dot com
Also, passing invalid parameter throws TypeError in PHP8 vs InvalidArgumentException in PHP7
<?php
$a = new ArrayObject();
$a->exchangeArray(123);
?>
------------------------------------------------------------------------
[2021-03-03 00:20:04] ievgen dot varava at spryker dot com
Description:
------------
---
From manual page: https://php.net/arrayobject.exchangearray
---
Signature of ArrayObject::exchangeArray($array) has changed, but is not documented. Some code that
worked in php7 might become incompatible with php8
Test script:
---------------
<?php
interface intA {
public function exchangeArray($param);
}
class classB extends ArrayObject implements intA {}
?>
Expected result:
----------------
no errors (works in php 7.4.13)
Actual result:
--------------
Fatal error: Declaration of ArrayObject::exchangeArray(object|array $array) must be compatible with
intA::exchangeArray($param)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=80822&edit=1