On 22-6-2026 17:58, Juliette Reinders Folmer wrote:
On 22-6-2026 15:13, Gina P. Banyard wrote:It is this time of year again where we proposed a list of deprecations to add in PHP 8.6:https://wiki.php.net/rfc/deprecations_php_8_6
All,I've previously spoken up about the lack of impact assessment/analysis for the vast majority of the proposed deprecations and offered to run some PHPCompatibility scans.
Here are the results of these scans. Please keep the below caveats in mind when interpreting these assessments.
=== Caveats:* Some RFC texts already contained results of independent impact scans. Thanks for that! I've still included (some of) those proposals in the currently executed scans to have a set of findings which have been prepared in the same way and are therefore comparable. * The Packagist Top 4000 is not representative of PHP code in general. Most of these projects are well maintained and have a high standard for code quality, so it is very well possible that the functionality occurs more frequently in private projects, especially in less well maintained projects. * These scans do not give any indication about the amount of work it may, or may not, be to update projects to deal with the deprecations and prepare for PHP 9.0. It also gives no indication how those updates will further impact downstream projects. * The scan results have not been de-duplicated or individually validated, they are based on the raw scan results. These raw scan results are available in the linked gists for anyone who wants to review them. * While PHPCompatibility has a pretty high level of accuracy, both false positives as well as false negatives can occur. I have not validated each individual find. Please report false positives to the PHPCompatibility project [1] to help improve the underlying logic in the sniffs. N.B.: one known false positive, of which it is unclear/not validated whether it occurs in the scan results, is when an imported namespaced function mirrors the name of a PHP global function. * The PHPCompatibility warning messages shown in the "code" reports are subject to change if a proposal would pass and may not currently be precise enough.
=== Scan results:Based on a scan of the Packagist Top 4000 (446.664 files) per July 2nd, I can see the following number of occurrences for the following proposed deprecations:
Deprecate the list() construct: 12.275 occurrences in 5.545 files Full details: https://gist.github.com/jrfnl/9ca4af66f31c5afd08a4598ae73c0ded Deprecate return from finally: 8 occurrences Full details: https://gist.github.com/jrfnl/7902d86aa5d6b306e0edad9d7c1ff274 Deprecate identifier "let": 3 occurrences Full details: https://gist.github.com/jrfnl/e540ce964e348d5ab6ebf07937763173 Deprecate namespace as class constant or static property: 21 occurrences Full details: https://gist.github.com/jrfnl/a23b568f7b99775a1a3434e7176ced48 Deprecate identifiers in/out/inout: 33 occurrences in 25 (includes Doctrine, Laminas, Laravel and Magento) out 8 inout 0 Full details: https://gist.github.com/jrfnl/9c1430200757daa529b5f9b667585b10 Deprecate identifier "is": 9 occurrences Full details: https://gist.github.com/jrfnl/49ee0a1b863d56e85b8b4b18bbcc79c9 Deprecate identifier readonly as function: 2 occurrences Full details: https://gist.github.com/jrfnl/fb680994d2d6f99c36e68a710fc2740d Deprecate _ as constant/compile time alias: 7 occurrences Full details: https://gist.github.com/jrfnl/f7ad1aad5842187e44c16be2f34ad9eb Deprecate _ as function name and the _() function: 4 + 96 occurrencesFull details: https://gist.github.com/jrfnl/f7ad1aad5842187e44c16be2f34ad9eb + https://gist.github.com/jrfnl/bf2b5fb4ef1f836db2d8d84ee4828dc2
Deprecate is_double(): 35 occurrences Full details: https://gist.github.com/jrfnl/e646412ca381ea0feca27604e713af0b Deprecate is_integer(): 303 occurrences Full details: https://gist.github.com/jrfnl/90cede1a93ddb217123c5ff9e6b3dbb6 Deprecate is_long(): 16 occurrences Full details: https://gist.github.com/jrfnl/27b7b20240c6ebc2a227130d0367d108 Deprecate doubleval(): 8 occurrences Full details: https://gist.github.com/jrfnl/c6df988ab223d0e905e4d6c9a18da8cc Deprecate define() $case_insensitive: 42 occurrences Full details: https://gist.github.com/jrfnl/610c5c0c21f1ff45d1932ba1f49bf621Deprecate is_subclass_of() with string and $allow_string false: 0 occurrences
Full details: https://gist.github.com/jrfnl/6c95a9b2408bee1a1e85e1629de6a2fd Deprecate is_a() with string and $allow_string false: 0 occurrences Full details: https://gist.github.com/jrfnl/17c0dc1d402ea97eec887a96b117f9be Deprecate strcoll(): 11 occurrences Full details: https://gist.github.com/jrfnl/28c192b1f2a1fa1ae06b9df9646c1da5 Deprecate SORT_LOCALE_STRING: 17 occurrences Full details: https://gist.github.com/jrfnl/3ef53816ec959e53a7d86b6dbb1f900e Deprecate metaphone(): 9 occurrences Full details: https://gist.github.com/jrfnl/cc0221a1de954b6c7fa8d26da3fbab28 Deprecate spl_classes(): 0 occurrences Full details: https://gist.github.com/jrfnl/8a0231930956a66e7c4f316dd44c515c Deprecate spl_object_hash(): 625 occurrences Full details: https://gist.github.com/jrfnl/6ff4e1316d58b98e15f82d1ce33a565dDeprecate mysqli_stmt_init() (scanned for procedural calls only): 0 occurrences
Full details: https://gist.github.com/jrfnl/8dff0f35070a13ab4dd3d6e03acb6874 Deprecate mysqli_get_charset(): 0 occurrences Full details: https://gist.github.com/jrfnl/d3358fee835bd75ed25b23be46541a91 === Regarding updating the RFC texts:While I would regard adding a text snippet about the scan results and a reference to the applicable gists to the various RFC texts as a minor change, Gina's mail from Monday stated that the RFC text should be considered frozen, so I defer to Gina to decide whether any of the above information should/can still be included in the RFC texts.
If so, and if you are the author of one of the proposed deprecations which doesn't have any kind of impact assessment yet, please consider validating the scan results applicable to your proposal(s) and adding some information to the RFC text about the potential impact of your proposal.
=== Other observations/feedback on the RFC texts:* Re: `list()` deprecation - tooling like PHP_CodeSniffer can also perform this conversion (for example, via the PHPCSExtra `Universal.Lists.DisallowLongListSyntax` sniff [2]) and I suspect will yield higher accuracy than the regex.
Having said that, I'm definitely not in favour of deprecating `list()`.
* While listed in the "introduction" section, there is no section for
the "Deprecate changing by-reference return modifier via inheritance"
deprecation.
* The "Deprecate mysqli::stmt_init" deprecation does not mention the
procedural `mysqli_stmt_init()` function, while I presume that will be
deprecated too ?
Either way, I hope this information helps the voters in their contemplations about the proposals.
Smile, Juliette 1: https://github.com/PHPCompatibility/PHPCompatibility2: https://github.com/PHPCSStandards/PHPCSExtra#universallistsdisallowlonglistsyntax-wrench-books
