On 16.07.26 05:44, Juliette Reinders Folmer wrote:
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 occurrences
Full 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/610c5c0c21f1ff45d1932ba1f49bf621

Deprecate 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/6ff4e1316d58b98e15f82d1ce33a565d

Deprecate 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/PHPCompatibility
2: https://github.com/PHPCSStandards/PHPCSExtra#universallistsdisallowlonglistsyntax-wrench-books

Thanks for that. I added them for y'all to the RFC text (after being in touch with Gina and Tim for similar edits).

---

Cheers
Nick

Reply via email to