<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>#externals</title><link>https://externals.io</link><description>Opening PHP's #internals to the outside</description><pubDate>Mon, 04 May 2026 07:38:42 +0000</pubDate><lastBuildDate>Mon, 04 May 2026 07:38:42 +0000</lastBuildDate><item><title>[RFC] Partial Function Application: Handling of Optional Parameters</title><link>https://externals.io/message/130761</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-21 19:52, schrieb Tim Düsterhus:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Please find all details in the RFC at: &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/partial_function_application_optional_placeholder" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/partial_function_application_optional_placeholder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Unless significant discussion happens, I expect the RFC to go to vote &lt;br&gt;
in 2 weeks, so that it can be incorporated in the PFA implementation &lt;br&gt;
right away.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tomorrow very exciting two weeks of discussion will have passed. I plan &lt;br&gt;
to open voting later this week.&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>f406f8ccd76d2200827f931ebe224d66@bastelstu.be</guid><pubDate>Mon, 04 May 2026 07:12:30 +0000</pubDate></item><item><title>[RFC] [Discussion] `#[\Override]` for class constants</title><link>https://externals.io/message/130760</link><description>&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;It has been more than 14 days, so the cooldown period is over. Having &lt;br&gt;
received no further feedback, this is your official intent to vote message&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I plan to open the vote in the next few days if there are no new concerns.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-Daniel&lt;/p&gt;
&lt;p&gt;On Sat, Apr 18, 2026 at 6:19 PM Daniel Scherzer &lt;a href="mailto:daniel.e.scherzer@gmail.com"&gt;daniel.e.scherzer@gmail.com&lt;/a&gt; &lt;br&gt;
wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;I have updated the RFC to resolve the open issue about &lt;code&gt;#[\Override]&lt;/code&gt; on &lt;br&gt;
enum cases - when marked with &lt;code&gt;#[\Override]&lt;/code&gt;, the enum case must be &lt;br&gt;
overriding an inherited class constant. The fact that this is so uncommon &lt;br&gt;
makes it all the more important that when it is intentional, it can be made &lt;br&gt;
clear.&lt;/p&gt;
&lt;p&gt;This qualifies as a &amp;quot;major change&amp;quot; to the RFC and triggers a 14 day &lt;br&gt;
cooldown period.&lt;/p&gt;
&lt;p&gt;-Daniel&lt;/p&gt;
&lt;p&gt;On Mon, Mar 30, 2026 at 4:36 PM Daniel Scherzer &amp;lt; &lt;br&gt;
&lt;a href="mailto:daniel.e.scherzer@gmail.com" rel="nofollow" target="_blank"&gt;daniel.e.scherzer@gmail.com&lt;/a&gt;&amp;gt; wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;I'd like to start the discussion for a new RFC about adding support for &lt;br&gt;
&lt;code&gt;#[\Override]&lt;/code&gt; for class constants.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RFC: &lt;a href="https://wiki.php.net/rfc/override_constants" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/override_constants&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Implementation: &lt;a href="https://github.com/php/php-src/pull/20478" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/pull/20478&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'd also like to draw specific attention to the open question, which I am &lt;br&gt;
soliciting feedback on: how should &lt;code&gt;#[\Override]&lt;/code&gt; work for enum cases? See &lt;br&gt;
the RFC page for details.&lt;/p&gt;
&lt;p&gt;Thanks, &lt;br&gt;
-Daniel&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
</description><guid>CALaXqqSm2DUQYEYi=o+aDsoQ5HJY3ep62VZsz-rE6pFvX7xRKQ@mail.gmail.com</guid><pubDate>Mon, 04 May 2026 02:48:08 +0000</pubDate></item><item><title>[VOTE] Secure Session Configuration Defaults</title><link>https://externals.io/message/130759</link><description>&lt;p&gt;Thank Ayesh, and I'm sorry for skipping this option. It's been added now.&lt;/p&gt;
&lt;p&gt;Kind regards, &lt;br&gt;
Jorg&lt;/p&gt;
</description><guid>CAPTD5yHoxOpOYnSgceKk=BHA_8YgY-N986vp=c0sJwMAr1BfiA@mail.gmail.com</guid><pubDate>Sun, 03 May 2026 19:40:38 +0000</pubDate></item><item><title>[VOTE] Secure Session Configuration Defaults</title><link>https://externals.io/message/130758</link><description>&lt;blockquote&gt;
&lt;p&gt;I'm opening up the vote on this RFC.&lt;/p&gt;
&lt;p&gt;Wiki page: &lt;a href="https://wiki.php.net/rfc/session_security_defaults" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/session_security_defaults&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are three votes to cast, and the voting will end on &lt;br&gt;
2026-05-18 00:00:00 UTC.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hi Jorg, &lt;br&gt;
The votes must also contain an &amp;quot;Abstain&amp;quot; option.&lt;/p&gt;
&lt;p&gt;Thank you, &lt;br&gt;
Ayesh.&lt;/p&gt;
</description><guid>CANLbj-rqf0Ef-takJfLWKVAxsku3iQwPFWW5Ge5KeVJV8KQMfA@mail.gmail.com</guid><pubDate>Sun, 03 May 2026 15:49:56 +0000</pubDate></item><item><title>[RFC] Release Manager Selection</title><link>https://externals.io/message/130757</link><description>&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-03-27 19:15, schrieb Tim Düsterhus:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;please find the following RFC that is intended to clarify the &lt;br&gt;
“Release Manager Selection” policy for future PHP versions:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/release_manager_selection_policy" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/release_manager_selection_policy&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I've made some changes to the PR to streamline the language a little &lt;br&gt;
more and use consistent terminology to refer to various “relative” PHP &lt;br&gt;
versions (e.g. “upcoming PHP version” for the PHP version that we're &lt;br&gt;
going to elect RMs for).&lt;/p&gt;
&lt;p&gt;Please check the commits for more details.&lt;/p&gt;
&lt;p&gt;I consider this a major change. Given how quiet this discussion was, I &lt;br&gt;
plan to vote on the RFC once the cooldown period expires. I'll send an &lt;br&gt;
official intent to vote when this date comes closer.&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I still dislike the distinction of &amp;quot;hands-on&amp;quot; and &amp;quot;hands-off&amp;quot; as &lt;br&gt;
descriptors for these roles and disagree with their use in defining &lt;br&gt;
these roles. I said as much in my earlier message, and I'll be voting &lt;br&gt;
&amp;quot;no&amp;quot; for the changes to the policy as it currently stands.&lt;/p&gt;
&lt;p&gt;I think I'm in agreement with the rest of the proposal. If we can come &lt;br&gt;
up with better terminology around the roles and make the roles less &lt;br&gt;
about their level of involvement, then I'll probably change my vote to a &lt;br&gt;
&amp;quot;yes.&amp;quot;&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br&gt;
Ben&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Following up on my earlier messages, I've been thinking more about the &lt;br&gt;
terminology and have come up with a concrete suggestion.&lt;/p&gt;
&lt;p&gt;From my perspective, the distinction between the two roles is &lt;br&gt;
fundamentally about experience, not involvement. I don't want to define &lt;br&gt;
the roles around involvement. The policy itself already uses the word &lt;br&gt;
&amp;quot;veteran&amp;quot; to describe the qualification for the advisory role, so I'd &lt;br&gt;
suggest elevating that to the name of the role itself: &amp;quot;Veteran Release &lt;br&gt;
Manager&amp;quot; for the advisor with prior experience, and &amp;quot;Co-release Manager&amp;quot; &lt;br&gt;
for the other two. This reuses terminology already present in the policy &lt;br&gt;
text and defines the roles by what qualifies someone for them rather &lt;br&gt;
than what they're expected to do or not do. It also leaves room for the &lt;br&gt;
RMs themselves to organize their work as they see fit.&lt;/p&gt;
&lt;p&gt;With these changes I'd be comfortable changing my vote to &amp;quot;yes.&amp;quot;&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br&gt;
Ben&lt;/p&gt;
</description><guid>20260503152920.6C39D1A00BD@lists.php.net</guid><pubDate>Sun, 03 May 2026 15:29:20 +0000</pubDate></item><item><title>[RFC] Release Manager Selection</title><link>https://externals.io/message/130756</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-03-27 19:15, schrieb Tim Düsterhus:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;please find the following RFC that is intended to clarify the “Release &lt;br&gt;
Manager Selection” policy for future PHP versions:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/release_manager_selection_policy" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/release_manager_selection_policy&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I've made some changes to the PR to streamline the language a little &lt;br&gt;
more and use consistent terminology to refer to various “relative” PHP &lt;br&gt;
versions (e.g. “upcoming PHP version” for the PHP version that we're &lt;br&gt;
going to elect RMs for).&lt;/p&gt;
&lt;p&gt;Please check the commits for more details.&lt;/p&gt;
&lt;p&gt;I consider this a major change. Given how quiet this discussion was, I &lt;br&gt;
plan to vote on the RFC once the cooldown period expires. I'll send an &lt;br&gt;
official intent to vote when this date comes closer.&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I still dislike the distinction of &amp;quot;hands-on&amp;quot; and &amp;quot;hands-off&amp;quot; as &lt;br&gt;
descriptors for these roles and disagree with their use in defining &lt;br&gt;
these roles. I said as much in my earlier message, and I'll be voting &lt;br&gt;
&amp;quot;no&amp;quot; for the changes to the policy as it currently stands.&lt;/p&gt;
&lt;p&gt;I think I'm in agreement with the rest of the proposal. If we can come &lt;br&gt;
up with better terminology around the roles and make the roles less &lt;br&gt;
about their level of involvement, then I'll probably change my vote to a &lt;br&gt;
&amp;quot;yes.&amp;quot;&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br&gt;
Ben&lt;/p&gt;
</description><guid>20260503144011.42BF81A00BD@lists.php.net</guid><pubDate>Sun, 03 May 2026 14:40:11 +0000</pubDate></item><item><title>[VOTE] Secure Session Configuration Defaults</title><link>https://externals.io/message/130755</link><description>&lt;p&gt;Sure. Link to the discussion: &lt;br&gt;
&lt;a href="https://news-web.php.net/php.internals/130608" rel="nofollow" target="_blank"&gt;https://news-web.php.net/php.internals/130608&lt;/a&gt; &lt;br&gt;
&lt;a href="https://externals.io/message/130608#130689" rel="nofollow" target="_blank"&gt;https://externals.io/message/130608#130689&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sorry, for missing it.&lt;/p&gt;
&lt;p&gt;Kind regards, &lt;br&gt;
Jorg&lt;/p&gt;
</description><guid>CAPTD5yGoNkHW11W-RgNCVWMyis=LF2JtHhbRh59dOuyRut-YGw@mail.gmail.com</guid><pubDate>Sun, 03 May 2026 14:35:18 +0000</pubDate></item><item><title>[VOTE] Secure Session Configuration Defaults</title><link>https://externals.io/message/130754</link><description>&lt;blockquote&gt;
&lt;p&gt;Hello internals, &lt;br&gt;
I'm opening up the vote on this RFC.&lt;/p&gt;
&lt;p&gt;Wiki page: &lt;a href="https://wiki.php.net/rfc/session_security_defaults" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/session_security_defaults&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are three votes to cast, and the voting will end on &lt;br&gt;
2026-05-18 00:00:00 UTC.&lt;/p&gt;
&lt;p&gt;Kind regards, &lt;br&gt;
Jorg&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Under the References section of the RFC, would you mind providing a link &lt;br&gt;
to the relevant mailing list discussion? I can't find the discussion, &lt;br&gt;
and I'd like to see what others have said about the proposal. I would &lt;br&gt;
consider this an editorial change, so it shouldn't affect the voting &lt;br&gt;
timeline (i.e., you don't need to stop the vote and restart it).&lt;/p&gt;
&lt;p&gt;According to the voting procedure rules, your voting announcement email &lt;br&gt;
must also include a link to the discussion thread. Again, simply &lt;br&gt;
replying here with the link should suffice.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/php/policies/blob/main/feature-proposals.rst#voting-procedure" rel="nofollow" target="_blank"&gt;https://github.com/php/policies/blob/main/feature-proposals.rst#voting-procedure&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br&gt;
Ben&lt;/p&gt;
</description><guid>20260503142654.6AC841A00BD@lists.php.net</guid><pubDate>Sun, 03 May 2026 14:26:54 +0000</pubDate></item><item><title>`COM_RESET_CONNECTION` support in `mysqlnd`</title><link>https://externals.io/message/130753</link><description>&lt;blockquote&gt;
&lt;p&gt;A single RFC with two primary votes to independently resolve each of the &lt;br&gt;
two cases (at the same time) would work. Given the concerns and the &lt;br&gt;
similarity between both, I don't think we can do without an RFC.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fair enough. I'd appreciate your collaboration on this RFC if you're &lt;br&gt;
amenable! I've started a draft here: &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/min_supported_versions_php_8_6" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/min_supported_versions_php_8_6&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have a few things to note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I wasn't sure how to approach the merger of the two topics. I &lt;br&gt;
decided to model this like the various deprecation RFCs, in that we're &lt;br&gt;
deciding on a slate of minimum supported software for PHP 8.6.&lt;/li&gt;
&lt;li&gt;Ideally, if people objected to the MySQL minimum version for &lt;br&gt;
persistent connections, I'd be able to include a vote that allowed for &lt;br&gt;
an INI setting.&lt;/li&gt;
&lt;li&gt;Related to that: I'm not sure how much detail to add about the &lt;br&gt;
actual implementation I'd like for persistent connections. Is this a &lt;br&gt;
vote for my specific implementation, or just the higher-level concept &lt;br&gt;
of requiring a certain version of software in PHP 8.6? My goal is to &lt;br&gt;
ship this, so needing to do two RFCs back-to-back would be annoying.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Feel free to respond privately if you'd like to take this off-list. Thanks!&lt;/p&gt;
</description><guid>CA+NMNO3OvvdbWm=NVhANtyaW0Nv2EiLaO36hk90Y1dy8rhNYQQ@mail.gmail.com</guid><pubDate>Sun, 03 May 2026 14:14:35 +0000</pubDate></item><item><title>[RFC] Release Manager Selection</title><link>https://externals.io/message/130752</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-03-27 19:15, schrieb Tim Düsterhus:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;please find the following RFC that is intended to clarify the “Release &lt;br&gt;
Manager Selection” policy for future PHP versions:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/release_manager_selection_policy" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/release_manager_selection_policy&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I've made some changes to the PR to streamline the language a little &lt;br&gt;
more and use consistent terminology to refer to various “relative” PHP &lt;br&gt;
versions (e.g. “upcoming PHP version” for the PHP version that we're &lt;br&gt;
going to elect RMs for).&lt;/p&gt;
&lt;p&gt;Please check the commits for more details.&lt;/p&gt;
&lt;p&gt;I consider this a major change. Given how quiet this discussion was, I &lt;br&gt;
plan to vote on the RFC once the cooldown period expires. I'll send an &lt;br&gt;
official intent to vote when this date comes closer.&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>269a95c46c5b81ebe160799b6b15dc2c@bastelstu.be</guid><pubDate>Sun, 03 May 2026 13:11:56 +0000</pubDate></item><item><title>[VOTE] Secure Session Configuration Defaults</title><link>https://externals.io/message/130751</link><description>&lt;p&gt;Hello internals, &lt;br&gt;
I'm opening up the vote on this RFC.&lt;/p&gt;
&lt;p&gt;Wiki page: &lt;a href="https://wiki.php.net/rfc/session_security_defaults" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/session_security_defaults&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are three votes to cast, and the voting will end on &lt;br&gt;
2026-05-18 00:00:00 UTC.&lt;/p&gt;
&lt;p&gt;Kind regards, &lt;br&gt;
Jorg&lt;/p&gt;
</description><guid>CAPTD5yE1NuBizeGJisTaxNHdaFFcvtRp14+1iWt-dRi5mE5jwA@mail.gmail.com</guid><pubDate>Sun, 03 May 2026 13:08:12 +0000</pubDate></item><item><title>`COM_RESET_CONNECTION` support in `mysqlnd`</title><link>https://externals.io/message/130750</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-30 16:11, schrieb Eric Norris:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Somewhat relatedly, see: &lt;br&gt;
&lt;a href="https://github.com/php/php-src/pull/21159#issuecomment-4111691063" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/pull/21159#issuecomment-4111691063&lt;/a&gt;. I &lt;br&gt;
think it would be good to decide both cases at the same time, since &lt;br&gt;
they &lt;br&gt;
are reasonably similar.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That could make sense, and how would you suggest we proceed to decide &lt;br&gt;
the case? I'll admit that I'd be hesitant to need to resolve that via &lt;br&gt;
an RFC, since if the RFC failed I'd need to potentially make another &lt;br&gt;
RFC just for my change + some INI setting, and so it'd be quite some &lt;br&gt;
time until I could get this merged. That's not to say we shouldn't do &lt;br&gt;
it, I'm just noting my hesitation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A single RFC with two primary votes to independently resolve each of the &lt;br&gt;
two cases (at the same time) would work. Given the concerns and the &lt;br&gt;
similarity between both, I don't think we can do without an RFC.&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>46155eca0b1416f045856ef48be5c444@bastelstu.be</guid><pubDate>Sun, 03 May 2026 12:01:03 +0000</pubDate></item><item><title>[RFC] __exists(), a magic method for distinguishing "missing" from "set to null"</title><link>https://externals.io/message/130749</link><description>&lt;p&gt;Hi Larry,&lt;/p&gt;
&lt;p&gt;Le sam. 2 mai 2026 à 17:47, Larry Garfield &lt;a href="mailto:larry@garfieldtech.com"&gt;larry@garfieldtech.com&lt;/a&gt; a &lt;br&gt;
écrit :&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Dear internals,&lt;/p&gt;
&lt;p&gt;It's my pleasure to submit this new RFC to yours. &lt;br&gt;
Please have a look and let me know: &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/exists-magic-method" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/exists-magic-method&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TL;DR: I'm proposing a new opt-in magic method:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function __exists(string $name): bool;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It'd let userland tell &amp;quot;set to null&amp;quot; apart from &amp;quot;missing&amp;quot; on objects, &lt;br&gt;
it'd restore &lt;br&gt;
isset() &amp;lt;=&amp;gt; ?? equivalence on magic properties, and it'd fixe GH-12695 &lt;br&gt;
as a &lt;br&gt;
corollary. It's forward-compatible as a regular method on PHP &amp;lt;= 8.5 &lt;br&gt;
(probeable &lt;br&gt;
via &lt;code&gt;method_exists()&lt;/code&gt;), and would be magic on 8.6+.&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br&gt;
Nicolas&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks for the very detailed RFC!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If it returns false, the fetch produces “uninitialized” (treated as null &lt;br&gt;
by ??, so y is evaluated). __get() is not called.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What is y?  Looks like a reference to a previous iteration of the text.&lt;/p&gt;
&lt;p&gt;The Sequencing section also doesn't describe the behavior when __exists() &lt;br&gt;
isn't defined.  Does it just skip to step 4?  (Please specify in the text.)&lt;/p&gt;
&lt;p&gt;Is the intent to eventually deprecate __isset()?  The RFC it doesn't now, &lt;br&gt;
but do you feel that is the eventual end-game, in PHP 10 or whatever?&lt;/p&gt;
&lt;p&gt;The big one: Should any parallel changes or additions be made to property &lt;br&gt;
hooks?  An exists() operation in addition to get/set, for instance?  (I'm &lt;br&gt;
not sure at the moment, but it should be thought through and discussed, and &lt;br&gt;
if not, documented in the RFC.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks for having a look!&lt;/p&gt;
&lt;p&gt;I made some changes to clarify, see: &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/exists-magic-method?do=diff&amp;amp;rev2%5B0%5D=1777627745&amp;amp;rev2%5B1%5D=1777752909&amp;amp;difftype=sidebyside" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/exists-magic-method?do=diff&amp;amp;rev2%5B0%5D=1777627745&amp;amp;rev2%5B1%5D=1777752909&amp;amp;difftype=sidebyside&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;y =&amp;gt; $y &lt;br&gt;
I added a description of the current sequencing of magic methods. &lt;br&gt;
About deprecating __isset, I think it's way too early to consider doing it &lt;br&gt;
for real. Still my answer is yes, but not on any timescale I can &lt;br&gt;
anticipate. I added words about the doc, which should now encourage &lt;br&gt;
__exists IMHO. &lt;br&gt;
About hooks, that deserves a separate RFC to me. I've no intuition on this &lt;br&gt;
as I don't use hooks often enough to feel the need for any missing &amp;quot;exists&amp;quot; &lt;br&gt;
hook. If you still want my noob take on this: a hooked property exists - &lt;br&gt;
because it has hooks. Not super helpful :D I added some words about this in &lt;br&gt;
the RFC.&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br&gt;
Nicolas&lt;/p&gt;
</description><guid>CAOWwgp=Lu+E0ZX9E=Pb8_TQF7UtT+rtisWx_wts=9cQoC=ZrNg@mail.gmail.com</guid><pubDate>Sat, 02 May 2026 20:17:31 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130748</link><description>&lt;p&gt;Hey Jakub, Hey All&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hey Larry, hey all.&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I've drafted an alternative RFC that addresses this directly:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/social-media-policy" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/social-media-policy&lt;/a&gt; &lt;br&gt;
&lt;a href="https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes" rel="nofollow" target="_blank"&gt;https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It establishes Infrastructure Team custody of credentials (with &lt;br&gt;
succession procedures, so this situation does not recur) and &lt;br&gt;
Foundation content authority for official channels. Decisions about &lt;br&gt;
which platforms PHP maintains become content decisions within a &lt;br&gt;
documented process — including the X question, future platforms, and &lt;br&gt;
any reversal of those decisions later.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This doesn't do anything to establish the membership and accountability &lt;br&gt;
of either this &amp;quot;Infrastructure Team&amp;quot;, and the &amp;quot;temporary &lt;br&gt;
administration&amp;quot; of The PHP Foundation itself has continued to fail to &lt;br&gt;
deliver on its nearly five-year-old promise to establish governance &lt;br&gt;
procedures of its own, and it appears to be content to continue &lt;br&gt;
operating that way indefinitely, so I don't believe it is in the &lt;br&gt;
interest of the PHP project to wait for that.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I'd ask that this RFC be deferred until the governance framework is in &lt;br&gt;
place. Removing a link is trivial to do afterwards, should that be the &lt;br&gt;
decision.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Respectfully, no. The governance framework we have now is the RFC &lt;br&gt;
process, and even if you want to characterize this as ratifying a &lt;br&gt;
decision that was made unilaterally by someone, doing that by RFC is &lt;br&gt;
the process we have.&lt;/p&gt;
&lt;p&gt;Cheers.&lt;/p&gt;
&lt;p&gt;Jim&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I fully agree with Jim here.  I am 100% in favor of improving our &lt;br&gt;
governance processes, which are currently largely non-existent.  I will &lt;br&gt;
happily support those efforts, but they're so haphazard right now that we &lt;br&gt;
need to start at ground 0 first; defining the infra team, how one is added &lt;br&gt;
to it, how one is removed from it, etc.  That's a not-small task; one I'm &lt;br&gt;
happy to assist in, but it's a months long process knowing PHP.&lt;/p&gt;
&lt;p&gt;Meanwhile, the current process, broken as it is, does have a mechanism &lt;br&gt;
to approve &amp;quot;don't link to this thing,&amp;quot; and it's called an RFC.  We work &lt;br&gt;
with the process we have, not the process we wish we had.  And the process &lt;br&gt;
we have is exactly this thread/RFC, as-is.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sorry to disagree here.&lt;/p&gt;
&lt;p&gt;The current process to add or remove things from the PHP website is not &lt;br&gt;
RFC but Nike-based: Just do it.&lt;/p&gt;
&lt;p&gt;And &amp;quot;don't link to this thing on the website because it is outdated and &lt;br&gt;
nothing new is coming&amp;quot; should be a no-brainer. We had other things &lt;br&gt;
removed that were much less outdated.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As soon as there is an objection (which was the case in that PR). RFC is &lt;br&gt;
the only mechanism that we have to resolve such disagreement. So it’s &lt;br&gt;
correctly used for the website link part.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Again I'd like to disagree.&lt;/p&gt;
&lt;p&gt;The &amp;quot;objection&amp;quot; on the PR in question&lt;a href="https://github.com/php/web-php/pull/1879"&gt;1&lt;/a&gt; was not whether we should &lt;br&gt;
remove the link to to an account that has been inactive for several &lt;br&gt;
years on X but whether we should have a presence on X (for whoever &amp;quot;we&amp;quot; &lt;br&gt;
is. Personal note: Certainly not me)&lt;/p&gt;
&lt;p&gt;No single comment on that PR objected to the removal of the link.&lt;/p&gt;
&lt;p&gt;In that PR I have several times tried to keep the topics separate.&lt;/p&gt;
&lt;p&gt;One is: Shall PHP have a presence on X &lt;br&gt;
Second is: Shall the PHP presence on X be actively managed &lt;br&gt;
Third is: Shall we &lt;strong&gt;right now&lt;/strong&gt; link to a presence on X that is no &lt;br&gt;
longer actively maintained (for whatever reason) and that gives the &lt;br&gt;
impression PHP has stopped doing anything since the release of PHP8.3 on &lt;br&gt;
the 23rd of November 2023.&lt;/p&gt;
&lt;p&gt;The PR only targets the third topic!&lt;/p&gt;
&lt;p&gt;I find it hilarious that we can not decide upon &lt;strong&gt;right now&lt;/strong&gt; removing a &lt;br&gt;
link to a currently not active presence on the internet!&lt;/p&gt;
&lt;p&gt;Removing this link is not as if it is set in stone! Once we get the &lt;br&gt;
presence back online we can at any time re-add the link.&lt;/p&gt;
&lt;p&gt;The PR does &lt;strong&gt;not&lt;/strong&gt; target topics one and two! Whether we need an RFC &lt;br&gt;
for those or whatever else is totally not what I am concerned about! &lt;br&gt;
Let's deal with those separately from the PR!&lt;/p&gt;
&lt;p&gt;But let'S get to the point where we can decide upon &lt;strong&gt;right now&lt;/strong&gt; &lt;br&gt;
removing a link to a resource that SCREAMS &amp;quot;410 Gone&amp;quot;&lt;/p&gt;
&lt;p&gt;And when that resource is back again, let's hope that readding the link &lt;br&gt;
doesn't need to be signed in triplicate, sent in, sent back, queried, &lt;br&gt;
lost, found, subjected to public inquiry, lost again, and finally buried &lt;br&gt;
in soft peat for three months and recycled as firelighters.&lt;/p&gt;
&lt;p&gt;My 0.02 €&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;p&gt;Andreas&lt;/p&gt;
&lt;p&gt;-- &lt;br&gt;
,,, &lt;br&gt;
(o o) &lt;br&gt;
+---------------------------------------------------------ooO-(_)-Ooo-+ &lt;br&gt;
| Andreas Heigl                                                       | &lt;br&gt;
| &lt;a href="mailto:andreas@heigl.org" rel="nofollow" target="_blank"&gt;mailto:andreas@heigl.org&lt;/a&gt;                  N 50°22'59.5&amp;quot; E 08°23'58&amp;quot; | &lt;br&gt;
| &lt;a href="https://andreas.heigl.org" rel="nofollow" target="_blank"&gt;https://andreas.heigl.org&lt;/a&gt;                                           | &lt;br&gt;
+---------------------------------------------------------------------+ &lt;br&gt;
| &lt;a href="https://hei.gl/appointmentwithandreas" rel="nofollow" target="_blank"&gt;https://hei.gl/appointmentwithandreas&lt;/a&gt;                               | &lt;br&gt;
+---------------------------------------------------------------------+ &lt;br&gt;
| GPG-Key: &lt;a href="https://hei.gl/keyandreasheiglorg" rel="nofollow" target="_blank"&gt;https://hei.gl/keyandreasheiglorg&lt;/a&gt;                          | &lt;br&gt;
+---------------------------------------------------------------------+&lt;/p&gt;
</description><guid>9561ac8e-746f-4711-b12a-56cbdf20ffc7@heigl.org</guid><pubDate>Sat, 02 May 2026 20:16:16 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130747</link><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hey Larry, hey all.&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I've drafted an alternative RFC that addresses this directly:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/social-media-policy" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/social-media-policy&lt;/a&gt; &lt;br&gt;
&lt;a href="https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes" rel="nofollow" target="_blank"&gt;https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It establishes Infrastructure Team custody of credentials (with &lt;br&gt;
succession procedures, so this situation does not recur) and &lt;br&gt;
Foundation content authority for official channels. Decisions about &lt;br&gt;
which platforms PHP maintains become content decisions within a &lt;br&gt;
documented process — including the X question, future platforms, and &lt;br&gt;
any reversal of those decisions later.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This doesn't do anything to establish the membership and accountability &lt;br&gt;
of either this &amp;quot;Infrastructure Team&amp;quot;, and the &amp;quot;temporary &lt;br&gt;
administration&amp;quot; of The PHP Foundation itself has continued to fail to &lt;br&gt;
deliver on its nearly five-year-old promise to establish governance &lt;br&gt;
procedures of its own, and it appears to be content to continue &lt;br&gt;
operating that way indefinitely, so I don't believe it is in the &lt;br&gt;
interest of the PHP project to wait for that.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I'd ask that this RFC be deferred until the governance framework is in &lt;br&gt;
place. Removing a link is trivial to do afterwards, should that be the &lt;br&gt;
decision.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Respectfully, no. The governance framework we have now is the RFC &lt;br&gt;
process, and even if you want to characterize this as ratifying a &lt;br&gt;
decision that was made unilaterally by someone, doing that by RFC is &lt;br&gt;
the process we have.&lt;/p&gt;
&lt;p&gt;Cheers.&lt;/p&gt;
&lt;p&gt;Jim&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I fully agree with Jim here.  I am 100% in favor of improving our &lt;br&gt;
governance processes, which are currently largely non-existent.  I will &lt;br&gt;
happily support those efforts, but they're so haphazard right now that we &lt;br&gt;
need to start at ground 0 first; defining the infra team, how one is added &lt;br&gt;
to it, how one is removed from it, etc.  That's a not-small task; one I'm &lt;br&gt;
happy to assist in, but it's a months long process knowing PHP.&lt;/p&gt;
&lt;p&gt;Meanwhile, the current process, broken as it is, does have a mechanism &lt;br&gt;
to approve &amp;quot;don't link to this thing,&amp;quot; and it's called an RFC.  We work &lt;br&gt;
with the process we have, not the process we wish we had.  And the process &lt;br&gt;
we have is exactly this thread/RFC, as-is.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sorry to disagree here.&lt;/p&gt;
&lt;p&gt;The current process to add or remove things from the PHP website is not &lt;br&gt;
RFC but Nike-based: Just do it.&lt;/p&gt;
&lt;p&gt;And &amp;quot;don't link to this thing on the website because it is outdated and &lt;br&gt;
nothing new is coming&amp;quot; should be a no-brainer. We had other things &lt;br&gt;
removed that were much less outdated.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As soon as there is an objection (which was the case in that PR). RFC is &lt;br&gt;
the only mechanism that we have to resolve such disagreement. So it’s &lt;br&gt;
correctly used for the website link part.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The question whether we want to have a presence and whether we want to &lt;br&gt;
try to get that specific presence back online is a different question &lt;br&gt;
and yes! I am with you there: That is something for an RFC. Regardles &lt;br&gt;
whether that is Mastodon, Instagram, X, Facebook, LinkedIn or any other &lt;br&gt;
commercial &amp;quot;social media&amp;quot;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is actually matter for policy RFC IMO so it should be completely &lt;br&gt;
removed from this RFC unless there is a policy update PR. I don’t think it &lt;br&gt;
will have any long term impact otherwise because we follow only processes &lt;br&gt;
defined in the policy repo. It was too messy to try to collect it from all &lt;br&gt;
those process rfc so we decided for that repo for exactly that reason.&lt;/p&gt;
&lt;p&gt;This also applies to Roman’s RFC. It should be policy repo first approach.&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Jakub&lt;/p&gt;
</description><guid>CAEKnhAHEnmYFqN=h5NoPSOOmBqz-eeLj6D38Y9jEOS9CC1EvEw@mail.gmail.com</guid><pubDate>Sat, 02 May 2026 19:39:38 +0000</pubDate></item><item><title>[VOTE] Display Function Arguments in Errors</title><link>https://externals.io/message/130746</link><description>&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I'm opening up the vote on this RFC.&lt;/p&gt;
&lt;p&gt;Wiki page: &lt;a href="https://wiki.php.net/rfc/display_error_function_args" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/display_error_function_args&lt;/a&gt; &lt;br&gt;
Internals thread: &lt;a href="https://externals.io/message/130290" rel="nofollow" target="_blank"&gt;https://externals.io/message/130290&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are three votes to cast, and the voting should end on &lt;br&gt;
2026-05-15T21:00:00Z.&lt;/p&gt;
&lt;p&gt;Regards, &lt;br&gt;
Calvin&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The 3rd voting widget appears to still be closed.&lt;/p&gt;
&lt;p&gt;--Larry Garfield&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I fixed the vote here; looks like it was just an unclosed quote.&lt;/p&gt;
</description><guid>702674C1-556C-4569-83E7-021F8EE92859@cmpct.info</guid><pubDate>Sat, 02 May 2026 18:10:23 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130745</link><description>&lt;p&gt;Hey Larry, hey all.&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I've drafted an alternative RFC that addresses this directly:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/social-media-policy" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/social-media-policy&lt;/a&gt; &lt;br&gt;
&lt;a href="https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes" rel="nofollow" target="_blank"&gt;https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It establishes Infrastructure Team custody of credentials (with &lt;br&gt;
succession procedures, so this situation does not recur) and &lt;br&gt;
Foundation content authority for official channels. Decisions about &lt;br&gt;
which platforms PHP maintains become content decisions within a &lt;br&gt;
documented process — including the X question, future platforms, and &lt;br&gt;
any reversal of those decisions later.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This doesn't do anything to establish the membership and accountability &lt;br&gt;
of either this &amp;quot;Infrastructure Team&amp;quot;, and the &amp;quot;temporary &lt;br&gt;
administration&amp;quot; of The PHP Foundation itself has continued to fail to &lt;br&gt;
deliver on its nearly five-year-old promise to establish governance &lt;br&gt;
procedures of its own, and it appears to be content to continue &lt;br&gt;
operating that way indefinitely, so I don't believe it is in the &lt;br&gt;
interest of the PHP project to wait for that.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I'd ask that this RFC be deferred until the governance framework is in &lt;br&gt;
place. Removing a link is trivial to do afterwards, should that be the &lt;br&gt;
decision.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Respectfully, no. The governance framework we have now is the RFC &lt;br&gt;
process, and even if you want to characterize this as ratifying a &lt;br&gt;
decision that was made unilaterally by someone, doing that by RFC is &lt;br&gt;
the process we have.&lt;/p&gt;
&lt;p&gt;Cheers.&lt;/p&gt;
&lt;p&gt;Jim&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I fully agree with Jim here.  I am 100% in favor of improving our governance processes, which are currently largely non-existent.  I will happily support those efforts, but they're so haphazard right now that we need to start at ground 0 first; defining the infra team, how one is added to it, how one is removed from it, etc.  That's a not-small task; one I'm happy to assist in, but it's a months long process knowing PHP.&lt;/p&gt;
&lt;p&gt;Meanwhile, the current process, broken as it is, does have a mechanism to approve &amp;quot;don't link to this thing,&amp;quot; and it's called an RFC.  We work with the process we have, not the process we wish we had.  And the process we have is exactly this thread/RFC, as-is.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sorry to disagree here.&lt;/p&gt;
&lt;p&gt;The current process to add or remove things from the PHP website is not &lt;br&gt;
RFC but Nike-based: Just do it.&lt;/p&gt;
&lt;p&gt;And &amp;quot;don't link to this thing on the website because it is outdated and &lt;br&gt;
nothing new is coming&amp;quot; should be a no-brainer. We had other things &lt;br&gt;
removed that were much less outdated.&lt;/p&gt;
&lt;p&gt;The question whether we want to have a presence and whether we want to &lt;br&gt;
try to get that specific presence back online is a different question &lt;br&gt;
and yes! I am with you there: That is something for an RFC. Regardles &lt;br&gt;
whether that is Mastodon, Instagram, X, Facebook, LinkedIn or any other &lt;br&gt;
commercial &amp;quot;social media&amp;quot;.&lt;/p&gt;
&lt;p&gt;And re-adding the link then should then not be much of an issue at all.&lt;/p&gt;
&lt;p&gt;Right now though the link is sending people to an outdated profile &lt;br&gt;
implying that PHP is outdated and nothing new came for the last few years...&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;p&gt;Andreas&lt;/p&gt;
&lt;p&gt;-- &lt;br&gt;
,,, &lt;br&gt;
(o o) &lt;br&gt;
+---------------------------------------------------------ooO-(_)-Ooo-+ &lt;br&gt;
| Andreas Heigl                                                       | &lt;br&gt;
| &lt;a href="mailto:andreas@heigl.org" rel="nofollow" target="_blank"&gt;mailto:andreas@heigl.org&lt;/a&gt;                  N 50°22'59.5&amp;quot; E 08°23'58&amp;quot; | &lt;br&gt;
| &lt;a href="https://andreas.heigl.org" rel="nofollow" target="_blank"&gt;https://andreas.heigl.org&lt;/a&gt;                                           | &lt;br&gt;
+---------------------------------------------------------------------+ &lt;br&gt;
| &lt;a href="https://hei.gl/appointmentwithandreas" rel="nofollow" target="_blank"&gt;https://hei.gl/appointmentwithandreas&lt;/a&gt;                               | &lt;br&gt;
+---------------------------------------------------------------------+ &lt;br&gt;
| GPG-Key: &lt;a href="https://hei.gl/keyandreasheiglorg" rel="nofollow" target="_blank"&gt;https://hei.gl/keyandreasheiglorg&lt;/a&gt;                          | &lt;br&gt;
+---------------------------------------------------------------------+&lt;/p&gt;
</description><guid>fe8eacb3-584a-4d36-961d-2a4c27069ba4@heigl.org</guid><pubDate>Sat, 02 May 2026 16:18:07 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130744</link><description>&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I've drafted an alternative RFC that addresses this directly:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/social-media-policy" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/social-media-policy&lt;/a&gt; &lt;br&gt;
&lt;a href="https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes" rel="nofollow" target="_blank"&gt;https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It establishes Infrastructure Team custody of credentials (with &lt;br&gt;
succession procedures, so this situation does not recur) and &lt;br&gt;
Foundation content authority for official channels. Decisions about &lt;br&gt;
which platforms PHP maintains become content decisions within a &lt;br&gt;
documented process — including the X question, future platforms, and &lt;br&gt;
any reversal of those decisions later.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This doesn't do anything to establish the membership and accountability &lt;br&gt;
of either this &amp;quot;Infrastructure Team&amp;quot;, and the &amp;quot;temporary &lt;br&gt;
administration&amp;quot; of The PHP Foundation itself has continued to fail to &lt;br&gt;
deliver on its nearly five-year-old promise to establish governance &lt;br&gt;
procedures of its own, and it appears to be content to continue &lt;br&gt;
operating that way indefinitely, so I don't believe it is in the &lt;br&gt;
interest of the PHP project to wait for that.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I'd ask that this RFC be deferred until the governance framework is in &lt;br&gt;
place. Removing a link is trivial to do afterwards, should that be the &lt;br&gt;
decision.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Respectfully, no. The governance framework we have now is the RFC &lt;br&gt;
process, and even if you want to characterize this as ratifying a &lt;br&gt;
decision that was made unilaterally by someone, doing that by RFC is &lt;br&gt;
the process we have.&lt;/p&gt;
&lt;p&gt;Cheers.&lt;/p&gt;
&lt;p&gt;Jim&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I fully agree with Jim here.  I am 100% in favor of improving our governance processes, which are currently largely non-existent.  I will happily support those efforts, but they're so haphazard right now that we need to start at ground 0 first; defining the infra team, how one is added to it, how one is removed from it, etc.  That's a not-small task; one I'm happy to assist in, but it's a months long process knowing PHP.&lt;/p&gt;
&lt;p&gt;Meanwhile, the current process, broken as it is, does have a mechanism to approve &amp;quot;don't link to this thing,&amp;quot; and it's called an RFC.  We work with the process we have, not the process we wish we had.  And the process we have is exactly this thread/RFC, as-is.&lt;/p&gt;
&lt;p&gt;--Larry Garfield&lt;/p&gt;
</description><guid>cd40ae92-0f57-47f5-9c4e-fcb1618bdfc8@app.fastmail.com</guid><pubDate>Sat, 02 May 2026 15:54:37 +0000</pubDate></item><item><title>[VOTE] Display Function Arguments in Errors</title><link>https://externals.io/message/130743</link><description>&lt;blockquote&gt;
&lt;p&gt;I'm opening up the vote on this RFC.&lt;/p&gt;
&lt;p&gt;Wiki page: &lt;a href="https://wiki.php.net/rfc/display_error_function_args" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/display_error_function_args&lt;/a&gt; &lt;br&gt;
Internals thread: &lt;a href="https://externals.io/message/130290" rel="nofollow" target="_blank"&gt;https://externals.io/message/130290&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are three votes to cast, and the voting should end on &lt;br&gt;
2026-05-15T21:00:00Z.&lt;/p&gt;
&lt;p&gt;Regards, &lt;br&gt;
Calvin&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The 3rd voting widget appears to still be closed.&lt;/p&gt;
&lt;p&gt;--Larry Garfield&lt;/p&gt;
</description><guid>9bbadfef-7b06-40c4-a65a-79715de77ee3@app.fastmail.com</guid><pubDate>Sat, 02 May 2026 15:47:12 +0000</pubDate></item><item><title>[RFC] __exists(), a magic method for distinguishing "missing" from "set to null"</title><link>https://externals.io/message/130742</link><description>&lt;blockquote&gt;
&lt;p&gt;Dear internals,&lt;/p&gt;
&lt;p&gt;It's my pleasure to submit this new RFC to yours. &lt;br&gt;
Please have a look and let me know: &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/exists-magic-method" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/exists-magic-method&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TL;DR: I'm proposing a new opt-in magic method:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function __exists(string $name): bool;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It'd let userland tell &amp;quot;set to null&amp;quot; apart from &amp;quot;missing&amp;quot; on objects, &lt;br&gt;
it'd restore &lt;br&gt;
isset() &amp;lt;=&amp;gt; ?? equivalence on magic properties, and it'd fixe GH-12695 &lt;br&gt;
as a &lt;br&gt;
corollary. It's forward-compatible as a regular method on PHP &amp;lt;= 8.5 &lt;br&gt;
(probeable &lt;br&gt;
via &lt;code&gt;method_exists()&lt;/code&gt;), and would be magic on 8.6+.&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br&gt;
Nicolas&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks for the very detailed RFC!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If it returns false, the fetch produces “uninitialized” (treated as null by ??, so y is evaluated). __get() is not called.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What is y?  Looks like a reference to a previous iteration of the text.&lt;/p&gt;
&lt;p&gt;The Sequencing section also doesn't describe the behavior when __exists() isn't defined.  Does it just skip to step 4?  (Please specify in the text.)&lt;/p&gt;
&lt;p&gt;Is the intent to eventually deprecate __isset()?  The RFC it doesn't now, but do you feel that is the eventual end-game, in PHP 10 or whatever?&lt;/p&gt;
&lt;p&gt;The big one: Should any parallel changes or additions be made to property hooks?  An exists() operation in addition to get/set, for instance?  (I'm not sure at the moment, but it should be thought through and discussed, and if not, documented in the RFC.)&lt;/p&gt;
&lt;p&gt;--Larry Garfield&lt;/p&gt;
</description><guid>524d2690-f231-4612-a4a3-2db1bb4158c8@app.fastmail.com</guid><pubDate>Sat, 02 May 2026 15:44:56 +0000</pubDate></item><item><title>Propose changes to warning message in declare(encoding=...) when encoding is not a multibye-required encoding method</title><link>https://externals.io/message/130741</link><description>&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;I am writing to ask for suggestions in bug Issue #21538 in php-src &lt;a href="https://github.com/php/php-src/issues/21538"&gt;1&lt;/a&gt;. Currently when zend.multibyte=0, declare(encoding=...) will emit a warning for whatever the encoding is:&lt;/p&gt;
&lt;p&gt;&amp;quot;PHP Warning:  declare(encoding=...) ignored because Zend multibyte feature is turned off by settings in XXX&amp;quot;&lt;/p&gt;
&lt;p&gt;And the problem is when the encoding is ASCII or UTF-8, which is, not a multibyte encoding method, the warning will still be emitted. So, if zend.multibyte=0 and you use files with declare(encoding=ASCII) it will emit the error message to make people want to remove them.&lt;/p&gt;
&lt;p&gt;Now, since declare(encoding=UTF-8) behaves identically whether zend.multibyte is on or off, the warning is quite misleading. Also I think people might mostly use them as documenting codes to tell tools how to decode them because when zend.multibyte=0, PHP already parses source files as UTF-8 by default. &lt;/p&gt;
&lt;p&gt;However, it is also reasonable to say people might want to use these warnings to check if their code bases have useless codes.&lt;/p&gt;
&lt;p&gt;So I would suggest to change the warning message in those cases to &lt;/p&gt;
&lt;p&gt;“PHP Warning:  declare(encoding='UTF-8(or ASCII)') is useless, remove it.”&lt;/p&gt;
&lt;p&gt;to make things clearer.&lt;/p&gt;
&lt;p&gt;This would be a very minor change and do not worth a separate RFC. However, I think it is still important to send a email to gather opinions :) Also thank @alexdowad for giving me ideas. TiA :)&lt;/p&gt;
&lt;p&gt;--Weilin Du&lt;/p&gt;
</description><guid>tencent_109C6CF425025DBE781201A82B5829A87706@qq.com</guid><pubDate>Sat, 02 May 2026 08:50:21 +0000</pubDate></item><item><title>[RFC] [Discussion] array_get and array_has functions</title><link>https://externals.io/message/130740</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-25 21:37, schrieb Barel:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many thanks for your comments regarding the RFC, I have updated it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm seeing you adjusted the text to mention “If any segment is not a &lt;br&gt;
string or integer: throw a TypeError, even if that segment would not be &lt;br&gt;
reached”. This is however not reflected in the example implementation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks for pointing this out. This has been updated in the RFC&lt;/p&gt;
&lt;p&gt;Carlos&lt;/p&gt;
</description><guid>CABVsipiutKgKnQpkRoRd3T_1035g_WCiDdvoYL6rW357_6Rtdg@mail.gmail.com</guid><pubDate>Sat, 02 May 2026 07:28:14 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130739</link><description>&lt;blockquote&gt;
&lt;p&gt;I've drafted an alternative RFC that addresses this directly:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/social-media-policy" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/social-media-policy&lt;/a&gt; &lt;br&gt;
&lt;a href="https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes" rel="nofollow" target="_blank"&gt;https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It establishes Infrastructure Team custody of credentials (with &lt;br&gt;
succession procedures, so this situation does not recur) and &lt;br&gt;
Foundation content authority for official channels. Decisions about &lt;br&gt;
which platforms PHP maintains become content decisions within a &lt;br&gt;
documented process — including the X question, future platforms, and &lt;br&gt;
any reversal of those decisions later.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This doesn't do anything to establish the membership and accountability of either this &amp;quot;Infrastructure Team&amp;quot;, and the &amp;quot;temporary administration&amp;quot; of The PHP Foundation itself has continued to fail to deliver on its nearly five-year-old promise to establish governance procedures of its own, and it appears to be content to continue operating that way indefinitely, so I don't believe it is in the interest of the PHP project to wait for that.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I'd ask that this RFC be deferred until the governance framework is in &lt;br&gt;
place. Removing a link is trivial to do afterwards, should that be the &lt;br&gt;
decision.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Respectfully, no. The governance framework we have now is the RFC process, and even if you want to characterize this as ratifying a decision that was made unilaterally by someone, doing that by RFC is the process we have.&lt;/p&gt;
&lt;p&gt;Cheers.&lt;/p&gt;
&lt;p&gt;Jim&lt;/p&gt;
</description><guid>5b4527cb-0565-493a-b3fc-dbb981296572@app.fastmail.com</guid><pubDate>Fri, 01 May 2026 19:10:33 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130738</link><description>&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Jim &amp;amp; all,&lt;/p&gt;
&lt;p&gt;Currently, the RFC states:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;due to to the current nature of the site, there is no reason for the project to have a presence there &lt;br&gt;
This is unclear -- what exactly about &amp;quot;the current nature of the site&amp;quot; leads to there being &amp;quot;no reason for the project to have a presence there&amp;quot; ? Can you articulate the specifics, for the record, in the PR?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;-- pmj&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Do you really need more details about why X/Twitter is a problem per se? This subject has already been covered in several threads: its owner is a fascist that promotes and enhances fascism with the help of his networks, he deliberately updated the recommendation algorithm to create a personality-cult for his fame, the AI that's bound to this network is p*do-promoting, most of the people that are still there are either fascism-enthusiasts or compliant with what the platform has become (therefore, okay with the statu quo, which means &amp;quot;collaborating with the in-place system&amp;quot;).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Great -- if those are the beliefs of the RFC author, they should go &lt;br&gt;
directly in the RFC as supporting language for the reasoning behind the &lt;br&gt;
RFC.&lt;/p&gt;
&lt;p&gt;Then there's a record of exactly who is voting in agreement with those &lt;br&gt;
statements, and who is not.&lt;/p&gt;
&lt;p&gt;If there is some worry or concern about adding the reasons, that itself &lt;br&gt;
will be quite telling.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don't think I have been coy about the reasons at all, but I have updated the RFC. I'll consider this a major change, so voting will happen after the 14-day cooling period. (So I will send another message about the intent to call the vote in about a week.)&lt;/p&gt;
&lt;p&gt;Cheers.&lt;/p&gt;
&lt;p&gt;Jim&lt;/p&gt;
</description><guid>6b55da44-4a34-46fe-89d7-09ae0458ffd9@app.fastmail.com</guid><pubDate>Fri, 01 May 2026 18:54:37 +0000</pubDate></item><item><title>[VOTE] Display Function Arguments in Errors</title><link>https://externals.io/message/130737</link><description>&lt;p&gt;I'm opening up the vote on this RFC.&lt;/p&gt;
&lt;p&gt;Wiki page: &lt;a href="https://wiki.php.net/rfc/display_error_function_args" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/display_error_function_args&lt;/a&gt; &lt;br&gt;
Internals thread: &lt;a href="https://externals.io/message/130290" rel="nofollow" target="_blank"&gt;https://externals.io/message/130290&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are three votes to cast, and the voting should end on &lt;br&gt;
2026-05-15T21:00:00Z.&lt;/p&gt;
&lt;p&gt;Regards, &lt;br&gt;
Calvin&lt;/p&gt;
</description><guid>FCA3D1D0-8ABF-4069-8934-98F5FDDE6BC7@cmpct.info</guid><pubDate>Fri, 01 May 2026 15:33:07 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130736</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi all,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On May 1, 2026, at 05:27, Alex Pierstoval Rock &lt;a href="mailto:pierstoval@gmail.com"&gt;pierstoval@gmail.com&lt;/a&gt; &lt;br&gt;
wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Jim &amp;amp; all,&lt;/p&gt;
&lt;p&gt;Currently, the RFC states:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;due to to the current nature of the site, there is no reason for the &lt;br&gt;
project to have a presence there&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is unclear -- what exactly about &amp;quot;the current nature of the site&amp;quot; &lt;br&gt;
leads to there being &amp;quot;no reason for the project to have a presence there&amp;quot; ? &lt;br&gt;
Can you articulate the specifics, for the record, in the PR?&lt;/p&gt;
&lt;p&gt;-- pmj&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Do you really need more details about why X/Twitter is a problem per se? &lt;br&gt;
This subject has already been covered in several threads: its owner is a &lt;br&gt;
fascist that promotes and enhances fascism with the help of his networks, &lt;br&gt;
he deliberately updated the recommendation algorithm to create a &lt;br&gt;
personality-cult for his fame, the AI that's bound to this network is &lt;br&gt;
p*do-promoting, most of the people that are still there are either &lt;br&gt;
fascism-enthusiasts or compliant with what the platform has become &lt;br&gt;
(therefore, okay with the statu quo, which means &amp;quot;collaborating with the &lt;br&gt;
in-place system&amp;quot;).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Great -- if those are the beliefs of the RFC author, they should go &lt;br&gt;
directly in the RFC as supporting language for the reasoning behind the RFC.&lt;/p&gt;
&lt;p&gt;Then there's a record of exactly who is voting in agreement with those &lt;br&gt;
statements, and who is not.&lt;/p&gt;
&lt;p&gt;If there is some worry or concern about adding the reasons, that itself &lt;br&gt;
will be quite telling.&lt;/p&gt;
&lt;p&gt;-- pmj&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree with Paul.&lt;/p&gt;
&lt;p&gt;-- &lt;br&gt;
Chase Peeler &lt;br&gt;
&lt;a href="mailto:chasepeeler@gmail.com" rel="nofollow" target="_blank"&gt;chasepeeler@gmail.com&lt;/a&gt; &lt;br&gt;
&lt;a href="https://linktr.ee/chasepeeler" rel="nofollow" target="_blank"&gt;https://linktr.ee/chasepeeler&lt;/a&gt;&lt;/p&gt;
</description><guid>CAPKYkKw=xRb9QYSth-thkojzfy=2zyk_UQV8aYMhvuHfDWAo+Q@mail.gmail.com</guid><pubDate>Fri, 01 May 2026 15:05:16 +0000</pubDate></item><item><title>[RFC] [Discussion] Followup Improvements for ext/uri</title><link>https://externals.io/message/130735</link><description>&lt;p&gt;Hi Máté and all,&lt;/p&gt;
&lt;p&gt;I have no issue with the usage of namespaced functions, on the contrary I &lt;br&gt;
think that they do give a better understanding of the intended API usage. &lt;br&gt;
It is a self contained feature which is fully decoupled from the main URI &lt;br&gt;
classes with 0 side-effects.&lt;/p&gt;
&lt;p&gt;My main goal has always been to provide a better UX over having static &lt;br&gt;
methods on the main URI classes.&lt;/p&gt;
&lt;p&gt;As you pointed out, adding percent-decoding in a later stage seems &lt;br&gt;
reasonable to me, if we can find a way in the meantime to remove the &lt;br&gt;
mis-usage &lt;br&gt;
or mis-understanding you highlighted then at that point adding a new &lt;br&gt;
function will then be a no-brainer. So there will be no pushed back from my &lt;br&gt;
part around &lt;br&gt;
this change.&lt;/p&gt;
&lt;p&gt;In the meantime, I have already updated my polyfill to be inline with your &lt;br&gt;
last changes. As I said earlier, the fact that the introduced Enums can not &lt;br&gt;
be instantiated &lt;br&gt;
from an URI makes their presence in the polyfill required but incomplete as &lt;br&gt;
they can not be used before PHP8.6 since the URI classes are final and no &lt;br&gt;
named &lt;br&gt;
constructors can be attached to them to allow their instantiation from an &lt;br&gt;
actual URI instance.&lt;/p&gt;
&lt;p&gt;see &lt;a href="https://github.com/thephpleague/uri-src/pull/170/changes" rel="nofollow" target="_blank"&gt;https://github.com/thephpleague/uri-src/pull/170/changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Looking forward to your call for voting and its outcome.&lt;/p&gt;
&lt;p&gt;Regards, &lt;br&gt;
Ignace&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Ignace, Tim et al.,&lt;/p&gt;
&lt;p&gt;I've finished updating the RFC once again, after some private discussion &lt;br&gt;
with Tim:&lt;/p&gt;
&lt;p&gt;It turned out that the percent-decoding feature as proposed would have led &lt;br&gt;
to confusing behavior &lt;br&gt;
in some cases. In order to avoid this, I ultimately removed the &lt;br&gt;
percent-decoding support from the &lt;br&gt;
proposal. In the same time, I pivoted from the &amp;quot;instance methods on an &lt;br&gt;
enum” based approach &lt;br&gt;
to a simple namespaced function based solution, because the enums would &lt;br&gt;
only ever have a single &lt;br&gt;
method (even if decoding support is added later, possibly not all the &lt;br&gt;
(Uri|Url)PercentEncoder enum cases &lt;br&gt;
would be applicable for decoding). Let me know if this doesn't work for &lt;br&gt;
you, TBH adding namespaced &lt;br&gt;
functions was my least favorite solution, but I didn't have any &lt;br&gt;
significantly better idea which would have had &lt;br&gt;
the potential to gain traction.&lt;/p&gt;
&lt;p&gt;I have called out one example in the RFC ( &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/uri_followup#percent-encoding_support" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/uri_followup#percent-encoding_support&lt;/a&gt;) which &lt;br&gt;
would be problematic if we had a Uri\Rfc3986\uri_percent_decode() &lt;br&gt;
function, so let me copy-paste it here for reference:&lt;/p&gt;
&lt;p&gt;$uri = new Uri\Rfc3986\Uri(&amp;quot;&lt;a href="https://example.com/?a=b%26c&amp;quot;" rel="nofollow" target="_blank"&gt;https://example.com/?a=b%26c&amp;quot;&lt;/a&gt;);  // The query &lt;br&gt;
is the percent-encoded form of &amp;quot;a=b&amp;amp;c=d&amp;quot;&lt;/p&gt;
&lt;p&gt;echo Uri\Rfc3986\uri_percent_decode( &lt;br&gt;
$uri-&amp;gt;getQuery(), &lt;br&gt;
Uri\Rfc3986\UriPercentEncodingMode::Query &lt;br&gt;
); &lt;br&gt;
// a=b&amp;amp;c&lt;/p&gt;
&lt;p&gt;The result is probably not what we expected, because percent-decoding &lt;br&gt;
changed the meaning of the query component:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Originally, the query contained a parameter “a” with value “b%26c” &lt;br&gt;
(“b&amp;amp;c”)&lt;/li&gt;
&lt;li&gt;Now, there is a parameter “a” with value “b”, as well as a parameter “c” &lt;br&gt;
without value&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And I'm now attempting once again to announce my intention to start the &lt;br&gt;
vote: &lt;br&gt;
If no significant issue comes up this time, then I'll start the vote next &lt;br&gt;
Tuesday evening (according to UTC).&lt;/p&gt;
&lt;p&gt;Regards, &lt;br&gt;
Máté&lt;/p&gt;
&lt;/blockquote&gt;
</description><guid>CAOV5rgahSkdPmOpsAgNCUcshTZeYdf9AY8XK0C33rBGLcqeLxg@mail.gmail.com</guid><pubDate>Fri, 01 May 2026 13:57:37 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130734</link><description>&lt;p&gt;On Fri, May 1, 2026, 9:32 AM Rowan Tommins [IMSoP] &lt;a href="mailto:imsop.php@rwec.co.uk"&gt;imsop.php@rwec.co.uk&lt;/a&gt; &lt;br&gt;
wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;However, I don't understand why unlinking this X account from &lt;a href="http://php.net" rel="nofollow" target="_blank"&gt;php.net&lt;/a&gt; &lt;br&gt;
should wait for all of the bureaucracy to play out first.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For one thing, removing the link doesn't actually solve the problem. The &lt;br&gt;
account is still there for people to find, marked &amp;quot;official&amp;quot;, under the &lt;br&gt;
control of someone who disputes the right of the project to control it.&lt;/p&gt;
&lt;p&gt;If nobody was offering to tackle the problem, it would be a stop-gap, but &lt;br&gt;
Roman &lt;em&gt;is&lt;/em&gt; offering to tackle it.&lt;/p&gt;
&lt;p&gt;I'm not &lt;em&gt;against&lt;/em&gt; removing the link, if it's otherwise unanimous, but it &lt;br&gt;
seems wasteful to have two parallel debates on the same topic.&lt;/p&gt;
&lt;p&gt;Rowan Tommins &lt;br&gt;
[IMSoP]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If I read between the lines correctly, the person who currently controls &lt;br&gt;
the account doesn't dispute the right of the project to control it, rather &lt;br&gt;
the right of the project sans a method of governance to control it.&lt;/p&gt;
&lt;p&gt;If that's an accurate read, the RFC to establish governance, should it be &lt;br&gt;
approved, would solve both issues.&lt;/p&gt;
</description><guid>CAOiAqpTTFddKpymtYJyvE2te_rx5jVPd5uErvY5o0-NKFGjhBA@mail.gmail.com</guid><pubDate>Fri, 01 May 2026 13:35:01 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130733</link><description>&lt;blockquote&gt;
&lt;p&gt;However, I don't understand why unlinking this X account from &lt;a href="http://php.net" rel="nofollow" target="_blank"&gt;php.net&lt;/a&gt; &lt;br&gt;
should wait for all of the bureaucracy to play out first.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For one thing, removing the link doesn't actually solve the problem. The account is still there for people to find, marked &amp;quot;official&amp;quot;, under the control of someone who disputes the right of the project to control it.&lt;/p&gt;
&lt;p&gt;If nobody was offering to tackle the problem, it would be a stop-gap, but Roman &lt;em&gt;is&lt;/em&gt; offering to tackle it.&lt;/p&gt;
&lt;p&gt;I'm not &lt;em&gt;against&lt;/em&gt; removing the link, if it's otherwise unanimous, but it seems wasteful to have two parallel debates on the same topic.&lt;/p&gt;
&lt;p&gt;Rowan Tommins &lt;br&gt;
[IMSoP]&lt;/p&gt;
</description><guid>BA3C4B3F-E256-4660-9B1A-ADC634463D11@rwec.co.uk</guid><pubDate>Fri, 01 May 2026 13:28:53 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130732</link><description>&lt;p&gt;Hi all,&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Jim &amp;amp; all,&lt;/p&gt;
&lt;p&gt;Currently, the RFC states:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;due to to the current nature of the site, there is no reason for the project to have a presence there&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is unclear -- what exactly about &amp;quot;the current nature of the site&amp;quot; leads to there being &amp;quot;no reason for the project to have a presence there&amp;quot; ? Can you articulate the specifics, for the record, in the PR?&lt;/p&gt;
&lt;p&gt;-- pmj&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Do you really need more details about why X/Twitter is a problem per se? This subject has already been covered in several threads: its owner is a fascist that promotes and enhances fascism with the help of his networks, he deliberately updated the recommendation algorithm to create a personality-cult for his fame, the AI that's bound to this network is p*do-promoting, most of the people that are still there are either fascism-enthusiasts or compliant with what the platform has become (therefore, okay with the statu quo, which means &amp;quot;collaborating with the in-place system&amp;quot;).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Great -- if those are the beliefs of the RFC author, they should go directly in the RFC as supporting language for the reasoning behind the RFC.&lt;/p&gt;
&lt;p&gt;Then there's a record of exactly who is voting in agreement with those statements, and who is not.&lt;/p&gt;
&lt;p&gt;If there is some worry or concern about adding the reasons, that itself will be quite telling.&lt;/p&gt;
&lt;p&gt;-- pmj&lt;/p&gt;
</description><guid>73A3BB52-4642-439D-98BD-051416D405CA@pmjones.io</guid><pubDate>Fri, 01 May 2026 12:42:16 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130731</link><description>&lt;blockquote&gt;
&lt;p&gt;I'm all for addressing the long-term governance issue, and I don't think &lt;br&gt;
anyone else has objected to that.&lt;/p&gt;
&lt;p&gt;However, I don't understand why unlinking this X account from &lt;a href="http://php.net" rel="nofollow" target="_blank"&gt;php.net&lt;/a&gt; &lt;br&gt;
should wait for all of the bureaucracy to play out first. The account has &lt;br&gt;
been inactive (or at least hasn't posted anything) for over a decade it &lt;br&gt;
seems, and is currently a liability. To me it's a no-brainer to remove the &lt;br&gt;
link now, and only add it back if/when the situation is resolved.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agreed, let's remove stale/dead account and then separately formulate a &lt;br&gt;
social media policy (platforms, ownership, responsibility). I think some &lt;br&gt;
&amp;quot;political messaging&amp;quot; was added to the original RFC, which caused the &lt;br&gt;
confusion.&lt;/p&gt;
&lt;p&gt;-- &lt;br&gt;
Ilia Alshanetsky &lt;br&gt;
Technologist, CTO, Entrepreneur &lt;br&gt;
E: &lt;a href="mailto:ilia@ilia.ws" rel="nofollow" target="_blank"&gt;ilia@ilia.ws&lt;/a&gt; &lt;br&gt;
T: @iliaa &lt;br&gt;
B: &lt;a href="http://ilia.ws" rel="nofollow" target="_blank"&gt;http://ilia.ws&lt;/a&gt;&lt;/p&gt;
</description><guid>CALkpNnSHNZGBCTzA0DodpqNDOHamE=mPGt2nu4kXRbhxzShp9w@mail.gmail.com</guid><pubDate>Fri, 01 May 2026 12:09:23 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130730</link><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;On Fri, May 1, 2026 at 2:18 PM Rowan Tommins [IMSoP] &lt;a href="mailto:imsop.php@rwec.co.uk"&gt;imsop.php@rwec.co.uk&lt;/a&gt; &lt;br&gt;
wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The account is silent because one credential holder unilaterally &lt;br&gt;
stopped posting and has not transferred or shared access despite &lt;br&gt;
repeated requests. That is a governance failure, not a project &lt;br&gt;
decision. Removing the link in this context does not reflect a project &lt;br&gt;
consensus to abandon the platform — it ratifies the outcome of one &lt;br&gt;
person's unilateral action.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree with Roman here: even if there was unanimous agreement that the X &lt;br&gt;
account should be shut down, we would need to proceed in stages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Agree how official PHP social media accounts should be governed, and &lt;br&gt;
who should have access.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Based on that policy, demand access to the X account called &lt;br&gt;
&amp;quot;php_official&amp;quot; be transferred.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Based on that process, decide whether the X account should be shut &lt;br&gt;
down, and if so, what that should look like (e.g. complete account &lt;br&gt;
deletion, or profile update to link to other active channels).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Otherwise, we're just setting ourselves up for more problems in future: &lt;br&gt;
people creating &amp;quot;official&amp;quot; accounts on other services, then abandoning &lt;br&gt;
them, or worse.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm all for addressing the long-term governance issue, and I don't think &lt;br&gt;
anyone else has objected to that.&lt;/p&gt;
&lt;p&gt;However, I don't understand why unlinking this X account from &lt;a href="http://php.net" rel="nofollow" target="_blank"&gt;php.net&lt;/a&gt; &lt;br&gt;
should wait for all of the bureaucracy to play out first. The account has &lt;br&gt;
been inactive (or at least hasn't posted anything) for over a decade it &lt;br&gt;
seems, and is currently a liability. To me it's a no-brainer to remove the &lt;br&gt;
link now, and only add it back if/when the situation is resolved.&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br&gt;
Andrey.&lt;/p&gt;
</description><guid>CAPhkiZxXUi5m-_DzH42tt_2Hdio9H06uL89vHNabWnuq7ns=1A@mail.gmail.com</guid><pubDate>Fri, 01 May 2026 11:56:41 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130729</link><description>&lt;blockquote&gt;
&lt;p&gt;The account is silent because one credential holder unilaterally &lt;br&gt;
stopped posting and has not transferred or shared access despite &lt;br&gt;
repeated requests. That is a governance failure, not a project &lt;br&gt;
decision. Removing the link in this context does not reflect a project &lt;br&gt;
consensus to abandon the platform — it ratifies the outcome of one &lt;br&gt;
person's unilateral action.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree with Roman here: even if there was unanimous agreement that the X account should be shut down, we would need to proceed in stages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Agree how official PHP social media accounts should be governed, and who should have access.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Based on that policy, demand access to the X account called &amp;quot;php_official&amp;quot; be transferred.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Based on that process, decide whether the X account should be shut down, and if so, what that should look like (e.g. complete account deletion, or profile update to link to other active channels).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Otherwise, we're just setting ourselves up for more problems in future: people creating &amp;quot;official&amp;quot; accounts on other services, then abandoning them, or worse.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Rowan Tommins &lt;br&gt;
[IMSoP]&lt;/p&gt;
</description><guid>A144C00F-4781-4959-B57D-A4F3320E87FE@rwec.co.uk</guid><pubDate>Fri, 01 May 2026 11:15:35 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130728</link><description>&lt;blockquote&gt;
&lt;p&gt;Do you really need more details about why X/Twitter is a problem per se?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Quote from How To Create an RFC page (&lt;a href="https://wiki.php.net/rfc/howto" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/howto&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Listen to the feedback, and try to answer/resolve all questions. Update &lt;br&gt;
your RFC to document &lt;em&gt;all&lt;/em&gt; the issues and discussions. Cover both the &lt;br&gt;
positive and negative arguments.&lt;/p&gt;
&lt;/blockquote&gt;
</description><guid>CAPTD5yFZxU==eiGQN2MzwRyBHGk96dBxn1E3LSsQ4LwExx6ZtA@mail.gmail.com</guid><pubDate>Fri, 01 May 2026 10:37:31 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130727</link><description>&lt;p&gt;Since PHP is community-driven, maybe instead it could be interesting to &lt;br&gt;
create a global PHP-community-wide poll, aside of the &amp;quot;php people with &lt;br&gt;
voting rights&amp;quot;, to gather more sentiment on whether there should be a &lt;br&gt;
&amp;quot;social media policy&amp;quot;, or at least to know whether PHP as an &amp;quot;organized &lt;br&gt;
community with a lead account&amp;quot; (somehow) should be present on X, or on &lt;br&gt;
certain other platforms.&lt;/p&gt;
&lt;p&gt;That would help some people like me and others to definitely show &lt;br&gt;
whether we are a niche amount of people agreeing on the fact that PHP &lt;br&gt;
should leave X, or if there are actual people who care about the image &lt;br&gt;
of the language being active on a fascist platform.&lt;/p&gt;
</description><guid>22f94c3a-69b5-436c-9931-1f49a89c6600@gmail.com</guid><pubDate>Fri, 01 May 2026 10:31:34 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130726</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi Jim &amp;amp; all,&lt;/p&gt;
&lt;p&gt;Currently, the RFC states:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;due to to the current nature of the site, there is no reason for the project to have a presence there &lt;br&gt;
This is unclear -- what exactly about &amp;quot;the current nature of the site&amp;quot; leads to there being &amp;quot;no reason for the project to have a presence there&amp;quot; ? Can you articulate the specifics, for the record, in the PR?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;-- pmj&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Do you really need more details about why X/Twitter is a problem per se? &lt;br&gt;
This subject has already been covered in several threads: its owner is a &lt;br&gt;
fascist that promotes and enhances fascism with the help of his &lt;br&gt;
networks, he deliberately updated the recommendation algorithm to create &lt;br&gt;
a personality-cult for his fame, the AI that's bound to this network is &lt;br&gt;
p*do-promoting, most of the people that are still there are either &lt;br&gt;
fascism-enthusiasts or compliant with what the platform has become &lt;br&gt;
(therefore, okay with the statu quo, which means &amp;quot;collaborating with the &lt;br&gt;
in-place system&amp;quot;).&lt;/p&gt;
</description><guid>5c3b861a-f3ce-476a-8a24-d059069506d8@gmail.com</guid><pubDate>Fri, 01 May 2026 10:27:50 +0000</pubDate></item><item><title>[RFC] __exists(), a magic method for distinguishing "missing" from "set to null"</title><link>https://externals.io/message/130725</link><description>&lt;p&gt;Dear internals,&lt;/p&gt;
&lt;p&gt;It's my pleasure to submit this new RFC to yours. &lt;br&gt;
Please have a look and let me know: &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/exists-magic-method" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/exists-magic-method&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TL;DR: I'm proposing a new opt-in magic method:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function __exists(string $name): bool;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It'd let userland tell &amp;quot;set to null&amp;quot; apart from &amp;quot;missing&amp;quot; on objects, it'd &lt;br&gt;
restore &lt;br&gt;
isset() &amp;lt;=&amp;gt; ?? equivalence on magic properties, and it'd fixe GH-12695 as a &lt;br&gt;
corollary. It's forward-compatible as a regular method on PHP &amp;lt;= 8.5 &lt;br&gt;
(probeable &lt;br&gt;
via &lt;code&gt;method_exists()&lt;/code&gt;), and would be magic on 8.6+.&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br&gt;
Nicolas&lt;/p&gt;
</description><guid>CAOWwgp=sOZKN-ZoC-jUVa32tQHiqa8V+xP6t2Ozte+jmtih02A@mail.gmail.com</guid><pubDate>Fri, 01 May 2026 09:37:43 +0000</pubDate></item><item><title>[RFC] Stream Error Handling Improvements</title><link>https://externals.io/message/130724</link><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I would like to introduce a new stream error handling RFC that is part of &lt;br&gt;
my stream evolution work (PHP Foundation project funded by Sovereign Tech &lt;br&gt;
Fund) :&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/stream_errors" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/stream_errors&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Just a heads up that I plan to open voting on this on Sun 3rd May.&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;p&gt;Jakub&lt;/p&gt;
</description><guid>CAEKnhAFyHvkuvEQYeB9Xp2AOhaKS3uAA-+zD8JS1_OviTn6USg@mail.gmail.com</guid><pubDate>Thu, 30 Apr 2026 21:46:31 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130723</link><description>&lt;p&gt;Hi Jim &amp;amp; all,&lt;/p&gt;
&lt;p&gt;Currently, the RFC states:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;due to to the current nature of the site, there is no reason for the project to have a presence there&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is unclear -- what exactly about &amp;quot;the current nature of the site&amp;quot; leads to there being &amp;quot;no reason for the project to have a presence there&amp;quot; ? Can you articulate the specifics, for the record, in the PR?&lt;/p&gt;
&lt;p&gt;-- pmj&lt;/p&gt;
</description><guid>BC48A843-CED3-4EAA-B63B-C40EF91DF695@pmjones.io</guid><pubDate>Thu, 30 Apr 2026 20:56:08 +0000</pubDate></item><item><title>[RFC] [Discussion] Followup Improvements for ext/uri</title><link>https://externals.io/message/130722</link><description>&lt;p&gt;Hi Ignace, Tim et al.,&lt;/p&gt;
&lt;p&gt;I've finished updating the RFC once again, after some private discussion &lt;br&gt;
with Tim:&lt;/p&gt;
&lt;p&gt;It turned out that the percent-decoding feature as proposed would have led &lt;br&gt;
to confusing behavior &lt;br&gt;
in some cases. In order to avoid this, I ultimately removed the &lt;br&gt;
percent-decoding support from the &lt;br&gt;
proposal. In the same time, I pivoted from the &amp;quot;instance methods on an &lt;br&gt;
enum” based approach &lt;br&gt;
to a simple namespaced function based solution, because the enums would &lt;br&gt;
only ever have a single &lt;br&gt;
method (even if decoding support is added later, possibly not all the &lt;br&gt;
(Uri|Url)PercentEncoder enum cases &lt;br&gt;
would be applicable for decoding). Let me know if this doesn't work for &lt;br&gt;
you, TBH adding namespaced &lt;br&gt;
functions was my least favorite solution, but I didn't have any &lt;br&gt;
significantly better idea which would have had &lt;br&gt;
the potential to gain traction.&lt;/p&gt;
&lt;p&gt;I have called out one example in the RFC ( &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/uri_followup#percent-encoding_support" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/uri_followup#percent-encoding_support&lt;/a&gt;) which &lt;br&gt;
would be problematic if we had a Uri\Rfc3986\uri_percent_decode() function, &lt;br&gt;
so let me copy-paste it here for reference:&lt;/p&gt;
&lt;p&gt;$uri = new Uri\Rfc3986\Uri(&amp;quot;&lt;a href="https://example.com/?a=b%26c&amp;quot;" rel="nofollow" target="_blank"&gt;https://example.com/?a=b%26c&amp;quot;&lt;/a&gt;);  // The query &lt;br&gt;
is the percent-encoded form of &amp;quot;a=b&amp;amp;c=d&amp;quot;&lt;/p&gt;
&lt;p&gt;echo Uri\Rfc3986\uri_percent_decode( &lt;br&gt;
$uri-&amp;gt;getQuery(), &lt;br&gt;
Uri\Rfc3986\UriPercentEncodingMode::Query &lt;br&gt;
); &lt;br&gt;
// a=b&amp;amp;c&lt;/p&gt;
&lt;p&gt;The result is probably not what we expected, because percent-decoding &lt;br&gt;
changed the meaning of the query component:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Originally, the query contained a parameter “a” with value “b%26c” (“b&amp;amp;c”)&lt;/li&gt;
&lt;li&gt;Now, there is a parameter “a” with value “b”, as well as a parameter “c” &lt;br&gt;
without value&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And I'm now attempting once again to announce my intention to start the &lt;br&gt;
vote: &lt;br&gt;
If no significant issue comes up this time, then I'll start the vote next &lt;br&gt;
Tuesday evening (according to UTC).&lt;/p&gt;
&lt;p&gt;Regards, &lt;br&gt;
Máté&lt;/p&gt;
</description><guid>CAH5C8xWAUcforsq4UyjbJt_RU3KVqtdjB3gGGHTRxvCevEwigg@mail.gmail.com</guid><pubDate>Thu, 30 Apr 2026 19:19:11 +0000</pubDate></item><item><title>PHP 8.5.6RC3 available for testing</title><link>https://externals.io/message/130721</link><description>&lt;p&gt;PHP 8.5.6RC3 has just been released and may be downloaded from &lt;br&gt;
&lt;a href="https://downloads.php.net/~daniels/" rel="nofollow" target="_blank"&gt;https://downloads.php.net/~daniels/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Or use the git tag: php-8.5.6RC3&lt;/p&gt;
&lt;p&gt;Windows binaries are available at: &lt;br&gt;
&lt;a href="https://www.php.net/pre-release-builds.php#windows" rel="nofollow" target="_blank"&gt;https://www.php.net/pre-release-builds.php#windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please test it carefully, and report any bugs at &lt;br&gt;
&lt;a href="https://github.com/php/php-src/issues" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/issues&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8.5.6 should be expected in 1 week, i.e. on the 7 May 2026.&lt;/p&gt;
&lt;p&gt;Hash values and PGP signatures can be found below or at &lt;br&gt;
&lt;a href="https://gist.github.com/DanielEScherzer/f7b0c9da6228a0422c18a136c4394864" rel="nofollow" target="_blank"&gt;https://gist.github.com/DanielEScherzer/f7b0c9da6228a0422c18a136c4394864&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you're curious as to why we needed to have another release candidate, or &lt;br&gt;
why that release candidate is 3 instead of 2, I wrote up an explanation on &lt;br&gt;
my &lt;br&gt;
blog: &lt;br&gt;
&lt;a href="https://scherzer.dev/Blog/20260430-php856-rc-3" rel="nofollow" target="_blank"&gt;https://scherzer.dev/Blog/20260430-php856-rc-3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thank you, and happy testing!&lt;/p&gt;
&lt;p&gt;Regards, &lt;br&gt;
Daniel Scherzer, Volker Dusch, and Pierrick Charron&lt;/p&gt;
&lt;p&gt;php-8.5.6RC3.tar.bz2 &lt;br&gt;
SHA256 hash: &lt;br&gt;
7084b65f8a37558950a657654d0cabda0778d9c3b49f1c79a16bf2c9611d109b &lt;br&gt;
PGP signature: &lt;br&gt;
-----BEGIN PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;iQIzBAABCAAdFiEE2VwDvHAr6VFTRK4zdORLyQZ3AaUFAmnysVsACgkQdORLyQZ3 &lt;br&gt;
AaUPAw/+Jt/QJl/2DgSw9R0FOdLsCM54Py9MKMX9LguXNw2xHXL7J3gg+MjyuN+M &lt;br&gt;
zOZHWWAMVNtOtUmKAYidCEmdcB7wGtoDbZzYus3j3Zy6T7zqJk5LtvWmRn0PzXn+ &lt;br&gt;
ziJyHEeZTZoBorP3AZ/vAy+BVaN15LpsGyn83EYhpYYHikaboYMwLJh4894v+745 &lt;br&gt;
0khjSOOJmJSPQAgblnKc4D3ZtWXV9/QqZlhl3PognQjCVa8xC/BblrHC7qgnc2vg &lt;br&gt;
vS2FVtEfb9ttAt2mC5TX/4ojJlX8YKbZ2j5JPoiUAUAnfdku+MyD0X3tOWDQ2Mpt &lt;br&gt;
J3fB+wR78vRa/KyyyS8PDOpQ7EqzZjtRmMO3RO5/WZiPMeRNtwbRgUgKg2re77iI &lt;br&gt;
jh4NXGfqMjUtLKNW5d8Gr9L00vSUWmPnr5+diruacHAViP+LXdbN3mUSqdifTQy6 &lt;br&gt;
3hdN1ZtOpzvWoeT99vCzJzwqP8db1NJ4yyg6UpH1jILlrmkwLwEPDqvVShVm5jGT &lt;br&gt;
g8CgDq0pb/gnM2N2wFN+SoAQqMiLIbGoUj6zUDgqJ/0GWTRRTP08F1Hj79d1zf39 &lt;br&gt;
SFuylG8JB156NYYcr/8pfQevh3rQbgwF1zREoM8HnCec0ftw0Wj7UgUfxca/O4vs &lt;br&gt;
tvXNDCHl03A1JOjXROi5kS+7DfRhHDXwwJsVzmbwfXlk02KEEKs= &lt;br&gt;
=GiDn &lt;br&gt;
-----END PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;php-8.5.6RC3.tar.gz &lt;br&gt;
SHA256 hash: &lt;br&gt;
01e12f91a9c6924d42d208a1d97a32930562caa410f49f0caae62e07bfe014ff &lt;br&gt;
PGP signature: &lt;br&gt;
-----BEGIN PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;iQIzBAABCAAdFiEE2VwDvHAr6VFTRK4zdORLyQZ3AaUFAmnysWAACgkQdORLyQZ3 &lt;br&gt;
AaUzFg//Y9d6qQRYlOXQfE1esb5OMR6nADlk2yS4ZHaznT8bdEBv5erveA5uYHLI &lt;br&gt;
ALowCKzsw9NT0hEW17QAgDuTZtx6ZZWPHseM4tZaSvoyMaFe46EA9xmsfSU/hhHr &lt;br&gt;
Ifum7PaVqBOW4u6Yx4GUxSypE5ClJmaqN4qFFoktzbrwHd6jkJdk5bWEZ7Wq3k9i &lt;br&gt;
CHW/177b40MyQsnC2Ao+Rdvk6QcSZFKWMMAelZTenVPwCQQdsEb3Bh9RK1VCfPIb &lt;br&gt;
CbY53cPkQynYardfmwuSCAssqashk8w9bizG/hCZkhdsye9FUz1jq6V0zZTDLk8Z &lt;br&gt;
qG8zH6eE49nOk9vDKIqZpDb/t4De8F48KsiaeMIZYCAZddtlYNzX0CWQqBAPGVCq &lt;br&gt;
k/ChOTXFFlAMZfh1QwKzeThJTwxFSyo0F27umKlcWgpA061I6ewPNFhHHyhf2HaZ &lt;br&gt;
ezvvD6IzSYC1hFXHTAVUFusBjVON15tWr1dmdzXVvu2+qEVQnS64AbnbNWMvVGGO &lt;br&gt;
g79XhNPnk/37N+6wUhL22umAABDYQTCNcfVBD9BhslmTmSQaeYdaAUg3wK5N8Vha &lt;br&gt;
TslCELkUrTAUAz0j6/JMCck5r8GiOcKcnOhf83eMOYcnoEanCbxw86ERYQFevMVx &lt;br&gt;
O2JlA25+W53oZ0WqF7iLAc8m5dBZD9PtRe873SydTPbYCbYCYiE= &lt;br&gt;
=rm9G &lt;br&gt;
-----END PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;php-8.5.6RC3.tar.xz &lt;br&gt;
SHA256 hash: &lt;br&gt;
5faeca2a67e766f897a51c7a93414706d168d75c862f86343f6c4658c318eee5 &lt;br&gt;
PGP signature: &lt;br&gt;
-----BEGIN PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;iQIzBAABCAAdFiEE2VwDvHAr6VFTRK4zdORLyQZ3AaUFAmnysWAACgkQdORLyQZ3 &lt;br&gt;
AaXgbxAAtuAZ6dcuxD8Av3D9Bp5XYE+IBLQukILgPzus8pyfCBjzzDkIh8W2pEVm &lt;br&gt;
7tIJjD1v8s2/YT1X3HpArOG2p/VRWih7jd+jiyowmyojeYnCdEwgls2+97muKyB2 &lt;br&gt;
GJzkJsPeOOnbJTwWKN6ZOx4ZpA15+3cPsWw2GBscmAX0IDucCGkYa1Qn3rwqOjVp &lt;br&gt;
l6TgewvpWQQM2QRfv1yxUmOaXFhtQAcrRTWxYNI8I+b5ggXIeqkOxS2CH9M45RQv &lt;br&gt;
ShiH+qOC8MA/3/EM3P5aOO+5WlIz6jUqy+dAsLcUr/aRfgBo4CyP27gEwlh6a8Bp &lt;br&gt;
Hp1mAqmD/6Rt5evyA8skDbE5WZPrHb7MW5xdTUEbmuNwBM6tHHBH1cTlBRVWyGtB &lt;br&gt;
vTSw1h3MxlnXlv3w+1GUttwEjUvwXQRlg1ojTp0CMClcShNsqN5xJUTAQG6gGCIV &lt;br&gt;
QxuMKeAqBSaz7fTI1b0FNou4DSg3XH3n+Sa8cgSWuLD/OotAZLnHY/UKFHD4eiVS &lt;br&gt;
/Qc7sP5aDjj5NU5dZHO5+/0yzXnblbEI8AXY/XhUOtKoi69hzaq5lMgVV+9z5hJr &lt;br&gt;
yOuSuqEYG5txVt+jQSI2yEXttps3Lx2v6u25xkXrJxDNMeujgDXEJFfSsSSj8lB/ &lt;br&gt;
wh05EfE+pZGtZ/ZFzfoPWe3W8VejaZOFMahrcJQszWr1LqJvzFk= &lt;br&gt;
=D8/g &lt;br&gt;
-----END PGP SIGNATURE&lt;/p&gt;
</description><guid>CALaXqqQezSJkNyN942o-JtT9Rd8sE=koh7k7hqM3p-u94PEjiA@mail.gmail.com</guid><pubDate>Thu, 30 Apr 2026 18:28:11 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130720</link><description>&lt;blockquote&gt;
&lt;p&gt;Removing the link in this context does not reflect a project &lt;br&gt;
consensus to abandon the platform — it ratifies the outcome of one &lt;br&gt;
person's unilateral action.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Leaving Xitter would be appreciated though: some people do in fact give a &lt;br&gt;
damn.&lt;/p&gt;
&lt;p&gt;Marco Pivetta&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mastodon.social/@ocramius" rel="nofollow" target="_blank"&gt;https://mastodon.social/@ocramius&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ocramius.github.io/" rel="nofollow" target="_blank"&gt;https://ocramius.github.io/&lt;/a&gt;&lt;/p&gt;
</description><guid>CADyq6s+ob5=eeNj7CU+kacUg6xXQaabZCN6v_j6spz69A5tTwg@mail.gmail.com</guid><pubDate>Thu, 30 Apr 2026 15:59:29 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130719</link><description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/remove-link-to-x-from-php-net" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/remove-link-to-x-from-php-net&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The RFC describes the account as dormant and implies the project has &lt;br&gt;
chosen not to post on X. Neither is accurate as stated.&lt;/p&gt;
&lt;p&gt;The account is silent because one credential holder unilaterally &lt;br&gt;
stopped posting and has not transferred or shared access despite &lt;br&gt;
repeated requests. That is a governance failure, not a project &lt;br&gt;
decision. Removing the link in this context does not reflect a project &lt;br&gt;
consensus to abandon the platform — it ratifies the outcome of one &lt;br&gt;
person's unilateral action.&lt;/p&gt;
&lt;p&gt;That precedent matters beyond X: it establishes that any credential &lt;br&gt;
holder for any project asset can force a project-wide outcome by &lt;br&gt;
simply becoming non-responsive. The link will be removed, the account &lt;br&gt;
will be marked as no longer official, and the underlying procedural &lt;br&gt;
failure gets retroactively legitimized as a &amp;quot;decision&amp;quot;.&lt;/p&gt;
&lt;p&gt;Larry mentioned earlier in this thread that PHP has never had formal &lt;br&gt;
procedures for defining &amp;quot;official&amp;quot; accounts. The correct response to &lt;br&gt;
that observation is to establish those procedures, not to treat their &lt;br&gt;
absence as license for any individual outcome that happened to result.&lt;/p&gt;
&lt;p&gt;The link itself represents a project-level commitment that one person &lt;br&gt;
should not be able to unilaterally undo through inaction. Until the &lt;br&gt;
credentials question is resolved through a defined process, removing &lt;br&gt;
the link records the wrong outcome and embeds the wrong precedent.&lt;/p&gt;
&lt;p&gt;I've drafted an alternative RFC that addresses this directly:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/social-media-policy" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/social-media-policy&lt;/a&gt; &lt;br&gt;
&lt;a href="https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes" rel="nofollow" target="_blank"&gt;https://github.com/pronskiy/php-rfc-social-media-policy/pull/1/changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It establishes Infrastructure Team custody of credentials (with &lt;br&gt;
succession procedures, so this situation does not recur) and &lt;br&gt;
Foundation content authority for official channels. Decisions about &lt;br&gt;
which platforms PHP maintains become content decisions within a &lt;br&gt;
documented process — including the X question, future platforms, and &lt;br&gt;
any reversal of those decisions later.&lt;/p&gt;
&lt;p&gt;I'd ask that this RFC be deferred until the governance framework is in &lt;br&gt;
place. Removing a link is trivial to do afterwards, should that be the &lt;br&gt;
decision.&lt;/p&gt;
&lt;p&gt;-Roman&lt;/p&gt;
</description><guid>CALrFCSwr=aK649H2Om2=Vcrfz642JsiNBfCgDVY8U1Z27KDcNg@mail.gmail.com</guid><pubDate>Thu, 30 Apr 2026 15:55:00 +0000</pubDate></item><item><title>`COM_RESET_CONNECTION` support in `mysqlnd`</title><link>https://externals.io/message/130718</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-27 20:09, schrieb Eric Norris:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Personally, given that both of these versions are EOL, this feels &lt;br&gt;
acceptable, but I'm curious what others think.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree that it is a reasonable expectation from users to use the latest &lt;br&gt;
(or at least: a supported) version of third party software when they &lt;br&gt;
want to use the latest PHP version. Especially since my understanding is &lt;br&gt;
that in this instance, the communication would also not be broken &lt;br&gt;
entirely, but users would just need to disable persistent connections, &lt;br&gt;
no? This means if they want to upgrade PHP, without being able to &lt;br&gt;
upgrade their MySQL version they would potentially need to give up some &lt;br&gt;
performance optimization, but other than that it would work unchanged?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's a great point, and correct - users can still upgrade, they just &lt;br&gt;
will need to give up persistent connections.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Somewhat relatedly, see: &lt;br&gt;
&lt;a href="https://github.com/php/php-src/pull/21159#issuecomment-4111691063" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/pull/21159#issuecomment-4111691063&lt;/a&gt;. I &lt;br&gt;
think it would be good to decide both cases at the same time, since they &lt;br&gt;
are reasonably similar.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That could make sense, and how would you suggest we proceed to decide &lt;br&gt;
the case? I'll admit that I'd be hesitant to need to resolve that via &lt;br&gt;
an RFC, since if the RFC failed I'd need to potentially make another &lt;br&gt;
RFC just for my change + some INI setting, and so it'd be quite some &lt;br&gt;
time until I could get this merged. That's not to say we shouldn't do &lt;br&gt;
it, I'm just noting my hesitation.&lt;/p&gt;
</description><guid>CA+NMNO2Y=BjuiP84Kv+4MUMTo2-EHrz8HwO5bViJRw-b9Mt8cg@mail.gmail.com</guid><pubDate>Thu, 30 Apr 2026 14:11:58 +0000</pubDate></item><item><title>Pre-RFC discussion about adding friendship to PHP</title><link>https://externals.io/message/130717</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;I'd like to add support for friendship in PHP. I don't mean friendship &lt;br&gt;
in the PSR-8 huggable way,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aw, but why not?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;but rather in the C++ way of allowing access &lt;br&gt;
to non-public parts of a class without needing to use Reflection.&lt;/p&gt;
&lt;p&gt;I haven't started work on implementing this yet, but there is a big &lt;br&gt;
question about how to indicate friendship that I wanted to get some &lt;br&gt;
feedback on. Specifically, should it be added with a new keyword, or &lt;br&gt;
with an attribute?&lt;/p&gt;
&lt;p&gt;Keyword&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;matches C++&lt;/li&gt;
&lt;li&gt;suggests that friends are aspects of the class, like properties and &lt;br&gt;
constants and methods&lt;/li&gt;
&lt;li&gt;but would look a bit ugly if we added support for friends that are &lt;br&gt;
just for specific properties/methods/constants&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Attribute&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;matches how other metadata is added to classes&lt;/li&gt;
&lt;li&gt;would make it look cleaner if subsequently support was added for &lt;br&gt;
friendship being applied to specific properties/methods/constants&lt;/li&gt;
&lt;li&gt;would differ from the current builtin attributes in that it doesn't &lt;br&gt;
just add/remove warnings, but changes some functionality&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a more in-depth explanation of the inspiration and these two &lt;br&gt;
potential approaches, see &lt;br&gt;
&lt;a href="https://scherzer.dev/Blog/20260309-php-friends" rel="nofollow" target="_blank"&gt;https://scherzer.dev/Blog/20260309-php-friends&lt;/a&gt;. To be clear, I have not &lt;br&gt;
yet written an implementation, much less the RFC, but I wanted to get &lt;br&gt;
some initial feedback on if people would prefer a new keyword, or an &lt;br&gt;
attribute, for declaring friends.&lt;/p&gt;
&lt;p&gt;-Daniel&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There was a lot of related discussion around module/package/file visibility not too long ago that is also worth reviewing.  Currently I am highly skeptical of friend classes, as I believe module-level visibility is more useful than class-level, in general.&lt;/p&gt;
&lt;p&gt;That said, were we to go this route, I agree that keywords would be the way to go for the reasons given in the blog post.  Also, there's some plumbing already i place via aviz, at least for properties.  In concept, the following should be possible:&lt;/p&gt;
&lt;p&gt;class User { &lt;br&gt;
friend UserFactory;&lt;/p&gt;
&lt;p&gt;public friend(set) string $name; &lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;class UserFactory { &lt;br&gt;
public function makeUser($name) { &lt;br&gt;
$u = new User(); &lt;br&gt;
$u-&amp;gt;name = $name; // This is OK, because UserFactory is a friend. &lt;br&gt;
return $u; &lt;br&gt;
} &lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;$factory =  new UserFactory(); &lt;br&gt;
$u = $factory-&amp;gt;makeUser('Larry');&lt;/p&gt;
&lt;p&gt;print $u-&amp;gt;name; // OK, because public get &lt;br&gt;
$u-&amp;gt;name = 'Daniel'; // Error, because not a friend.&lt;/p&gt;
&lt;p&gt;Whether that makes sense to extend to methods, I don't know.&lt;/p&gt;
&lt;p&gt;--Larry Garfield&lt;/p&gt;
</description><guid>5686cf60-1920-4f0f-b8f3-9df788f759bf@app.fastmail.com</guid><pubDate>Thu, 30 Apr 2026 14:08:01 +0000</pubDate></item><item><title>Pre-RFC discussion about adding friendship to PHP</title><link>https://externals.io/message/130716</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;I'd like to add support for friendship in PHP. I don't mean friendship in the PSR-8 huggable way, but rather in the C++ way of allowing access to non-public parts of a class without needing to use Reflection.&lt;/p&gt;
&lt;p&gt;I haven't started work on implementing this yet, but there is a big question about how to indicate friendship that I wanted to get some feedback on. Specifically, should it be added with a new keyword, or with an attribute?&lt;/p&gt;
&lt;p&gt;Keyword&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;matches C++&lt;/li&gt;
&lt;li&gt;suggests that friends are aspects of the class, like properties and constants and methods&lt;/li&gt;
&lt;li&gt;but would look a bit ugly if we added support for friends that are just for specific properties/methods/constants&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Attribute&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;matches how other metadata is added to classes&lt;/li&gt;
&lt;li&gt;would make it look cleaner if subsequently support was added for friendship being applied to specific properties/methods/constants&lt;/li&gt;
&lt;li&gt;would differ from the current builtin attributes in that it doesn't just add/remove warnings, but changes some functionality&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a more in-depth explanation of the inspiration and these two potential approaches, see &lt;a href="https://scherzer.dev/Blog/20260309-php-friends" rel="nofollow" target="_blank"&gt;https://scherzer.dev/Blog/20260309-php-friends&lt;/a&gt;. To be clear, I have not yet written an implementation, much less the RFC, but I wanted to get some initial feedback on if people would prefer a new keyword, or an attribute, for declaring friends.&lt;/p&gt;
&lt;p&gt;-Daniel&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hi Daniel,&lt;/p&gt;
&lt;p&gt;We saw some friendship discussions in my nested class RFC, where nested classes implicitly became friends of the outer class. I'd recommend checking those threads for feedback about friendship and scope.&lt;/p&gt;
&lt;p&gt;— Rob&lt;/p&gt;
</description><guid>880fe036-4cfd-46a7-949d-9d7f5664b678@app.fastmail.com</guid><pubDate>Thu, 30 Apr 2026 10:59:57 +0000</pubDate></item><item><title>[RFC] Context Managers</title><link>https://externals.io/message/130715</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-30 09:42, schrieb Rob Landers:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I'd argue CMs are mechanisms, not policies. They encode setup and &lt;br&gt;
teardown. Suppression is an error-handling policy decision that should &lt;br&gt;
be visible at the call site, not mixed with the concerns of setting up &lt;br&gt;
and tearing down resources.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree here and noted something similar in the “RAII vs Context &lt;br&gt;
Manager” thread: &lt;a href="https://news-web.php.net/php.internals/129463" rel="nofollow" target="_blank"&gt;https://news-web.php.net/php.internals/129463&lt;/a&gt; (last &lt;br&gt;
paragraph).&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>c6fc6b059465806af3d4fa22019ef50d@bastelstu.be</guid><pubDate>Thu, 30 Apr 2026 07:52:26 +0000</pubDate></item><item><title>`COM_RESET_CONNECTION` support in `mysqlnd`</title><link>https://externals.io/message/130714</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-27 20:09, schrieb Eric Norris:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Personally, given that both of these versions are EOL, this feels &lt;br&gt;
acceptable, but I'm curious what others think.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree that it is a reasonable expectation from users to use the latest &lt;br&gt;
(or at least: a supported) version of third party software when they &lt;br&gt;
want to use the latest PHP version. Especially since my understanding is &lt;br&gt;
that in this instance, the communication would also not be broken &lt;br&gt;
entirely, but users would just need to disable persistent connections, &lt;br&gt;
no? This means if they want to upgrade PHP, without being able to &lt;br&gt;
upgrade their MySQL version they would potentially need to give up some &lt;br&gt;
performance optimization, but other than that it would work unchanged?&lt;/p&gt;
&lt;p&gt;Somewhat relatedly, see: &lt;br&gt;
&lt;a href="https://github.com/php/php-src/pull/21159#issuecomment-4111691063" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/pull/21159#issuecomment-4111691063&lt;/a&gt;. I &lt;br&gt;
think it would be good to decide both cases at the same time, since they &lt;br&gt;
are reasonably similar.&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>3ff59f9b3d7a872dc0159651848dace8@bastelstu.be</guid><pubDate>Thu, 30 Apr 2026 07:49:32 +0000</pubDate></item><item><title>Pre-RFC discussion about adding friendship to PHP</title><link>https://externals.io/message/130713</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-29 19:30, schrieb Daniel Scherzer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I haven't started work on implementing this yet, but there is a big &lt;br&gt;
question about how to indicate friendship that I wanted to get some &lt;br&gt;
feedback on. Specifically, should it be added with a new keyword, or &lt;br&gt;
with &lt;br&gt;
an attribute?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It should be a proper keyword for the reasons that are also mentioned in &lt;br&gt;
your blog post: Attributes are not part of the public API and thus do &lt;br&gt;
not contribute to e.g. LSP checks. They are also expected to gracefully &lt;br&gt;
degrade when they do not exist, which means that running code written &lt;br&gt;
with friendship in mind on older PHP versions will silently expose a &lt;br&gt;
different API instead of failing in a visible way.&lt;/p&gt;
&lt;p&gt;See also the reasoning that I provided in the #[\Override] RFC: &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/marking_overriden_methods#why_an_attribute_and_not_a_keyword" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/marking_overriden_methods#why_an_attribute_and_not_a_keyword&lt;/a&gt;. &lt;br&gt;
I think the related mailing list discussion provides additional context&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;and I seem to remember I wrote something similar in some other RFC &lt;br&gt;
discussion as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>68afbf850e65a3f07e8b922a9fefa0a8@bastelstu.be</guid><pubDate>Thu, 30 Apr 2026 07:43:26 +0000</pubDate></item><item><title>[RFC] Context Managers</title><link>https://externals.io/message/130712</link><description>&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I think a key question to answer here is: Do we care to differentiate between CM errors and underlying errors?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don't think we need to differentiate at the CM level. Suppression is &lt;br&gt;
a policy decision that belongs to the caller, not the context manager. &lt;br&gt;
The CM's job is cleanup: rollback the transaction, close the file, &lt;br&gt;
release the lock, etc. Whether the exception continues propagating &lt;br&gt;
after that is the caller's call, and &lt;code&gt;try using&lt;/code&gt; already provides &lt;br&gt;
exactly that:&lt;/p&gt;
&lt;p&gt;try using ($db-&amp;gt;transaction() =&amp;gt; $conn) { &lt;br&gt;
$conn-&amp;gt;execute('INSERT INTO orders ...'); &lt;br&gt;
} catch (ValidationException $e) { &lt;br&gt;
// Caller chooses to suppress this here &lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;That makes &lt;code&gt;exitContext()&lt;/code&gt; simple: return void, do your cleanup, and &lt;br&gt;
get out. If cleanup fails, it throws naturally, and the desugared form &lt;br&gt;
can chain the original exception as &lt;code&gt;$previous&lt;/code&gt; so the root cause isn't &lt;br&gt;
lost. If the caller wants to suppress or differentiate, they already &lt;br&gt;
have &lt;code&gt;try using&lt;/code&gt; for exactly that.&lt;/p&gt;
&lt;p&gt;It's worth noting that every example in the RFC (database transactions, &lt;br&gt;
file locks, error handler swaps, async scopes) does cleanup and &lt;br&gt;
propagates. None of them actually need the power to suppress. If a &lt;br&gt;
context manager wants to give callers a clean exception hierarchy to &lt;br&gt;
catch against, it can wrap underlying exceptions in their own types &lt;br&gt;
during cleanup. That's just normal exception design, no special syntax &lt;br&gt;
required.&lt;/p&gt;
&lt;p&gt;— Rob&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Just to make sure I'm following you, you're arguing that a CM should not have any way at all to suppress an exception?  I don't think I'd agree with that, personally.  Even if it's a rare case, I do believe it's a feature that should remain.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'd argue CMs are mechanisms, not policies. They encode setup and teardown. Suppression is an error-handling policy decision that should be visible at the call site, not mixed with the concerns of setting up and tearing down resources.&lt;/p&gt;
&lt;p&gt;If CM's could suppress arbitrary exceptions, from a developer stepping over the code, they'd see the code randomly appear to jump out of the using block after a suppressed exception ... at seemingly arbitrary points. There would be no way to trust what you were reading without having the CM's code in front of you as well.&lt;/p&gt;
&lt;p&gt;— Rob&lt;/p&gt;
</description><guid>c8cfc3a8-5155-46fd-95b8-e4c07605a3a1@app.fastmail.com</guid><pubDate>Thu, 30 Apr 2026 07:42:24 +0000</pubDate></item><item><title>[RFC] [Discussion] array_get and array_has functions</title><link>https://externals.io/message/130711</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-25 21:37, schrieb Barel:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many thanks for your comments regarding the RFC, I have updated it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm seeing you adjusted the text to mention “If any segment is not a &lt;br&gt;
string or integer: throw a TypeError, even if that segment would not be &lt;br&gt;
reached”. This is however not reflected in the example implementation.&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
&lt;p&gt;PS: Don't forget to cut your quotes when replying :-)&lt;/p&gt;
</description><guid>186bc870ee3e713cefab18a6d45d4dcb@bastelstu.be</guid><pubDate>Thu, 30 Apr 2026 07:34:51 +0000</pubDate></item><item><title>Pre-RFC discussion about adding friendship to PHP</title><link>https://externals.io/message/130710</link><description>&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;I'd like to add support for friendship in PHP. I don't mean friendship in &lt;br&gt;
the PSR-8 huggable way, but rather in the C++ way of allowing access to &lt;br&gt;
non-public parts of a class without needing to use Reflection.&lt;/p&gt;
&lt;p&gt;I haven't started work on implementing this yet, but there is a big &lt;br&gt;
question about how to indicate friendship that I wanted to get some &lt;br&gt;
feedback on. Specifically, should it be added with a new keyword, or with &lt;br&gt;
an attribute?&lt;/p&gt;
&lt;p&gt;Keyword&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;matches C++&lt;/li&gt;
&lt;li&gt;suggests that friends are aspects of the class, like properties and &lt;br&gt;
constants and methods&lt;/li&gt;
&lt;li&gt;but would look a bit ugly if we added support for friends that are just &lt;br&gt;
for specific properties/methods/constants&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Attribute&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;matches how other metadata is added to classes&lt;/li&gt;
&lt;li&gt;would make it look cleaner if subsequently support was added for &lt;br&gt;
friendship being applied to specific properties/methods/constants&lt;/li&gt;
&lt;li&gt;would differ from the current builtin attributes in that it doesn't just &lt;br&gt;
add/remove warnings, but changes some functionality&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a more in-depth explanation of the inspiration and these two potential &lt;br&gt;
approaches, see &lt;a href="https://scherzer.dev/Blog/20260309-php-friends" rel="nofollow" target="_blank"&gt;https://scherzer.dev/Blog/20260309-php-friends&lt;/a&gt;. To be &lt;br&gt;
clear, I have not yet written an implementation, much less the RFC, but I &lt;br&gt;
wanted to get some initial feedback on if people would prefer a new &lt;br&gt;
keyword, or an attribute, for declaring friends.&lt;/p&gt;
&lt;p&gt;-Daniel&lt;/p&gt;
</description><guid>CALaXqqQ-J=_r4X2ENXehU6TDLBbgkuqPk=LguLLEdTYbwmsumQ@mail.gmail.com</guid><pubDate>Wed, 29 Apr 2026 17:30:33 +0000</pubDate></item><item><title>[RFC] Context Managers</title><link>https://externals.io/message/130709</link><description>&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I think a key question to answer here is: Do we care to differentiate between CM errors and underlying errors?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don't think we need to differentiate at the CM level. Suppression is &lt;br&gt;
a policy decision that belongs to the caller, not the context manager. &lt;br&gt;
The CM's job is cleanup: rollback the transaction, close the file, &lt;br&gt;
release the lock, etc. Whether the exception continues propagating &lt;br&gt;
after that is the caller's call, and &lt;code&gt;try using&lt;/code&gt; already provides &lt;br&gt;
exactly that:&lt;/p&gt;
&lt;p&gt;try using ($db-&amp;gt;transaction() =&amp;gt; $conn) { &lt;br&gt;
$conn-&amp;gt;execute('INSERT INTO orders ...'); &lt;br&gt;
} catch (ValidationException $e) { &lt;br&gt;
// Caller chooses to suppress this here &lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;That makes &lt;code&gt;exitContext()&lt;/code&gt; simple: return void, do your cleanup, and &lt;br&gt;
get out. If cleanup fails, it throws naturally, and the desugared form &lt;br&gt;
can chain the original exception as &lt;code&gt;$previous&lt;/code&gt; so the root cause isn't &lt;br&gt;
lost. If the caller wants to suppress or differentiate, they already &lt;br&gt;
have &lt;code&gt;try using&lt;/code&gt; for exactly that.&lt;/p&gt;
&lt;p&gt;It's worth noting that every example in the RFC (database transactions, &lt;br&gt;
file locks, error handler swaps, async scopes) does cleanup and &lt;br&gt;
propagates. None of them actually need the power to suppress. If a &lt;br&gt;
context manager wants to give callers a clean exception hierarchy to &lt;br&gt;
catch against, it can wrap underlying exceptions in their own types &lt;br&gt;
during cleanup. That's just normal exception design, no special syntax &lt;br&gt;
required.&lt;/p&gt;
&lt;p&gt;— Rob&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Just to make sure I'm following you, you're arguing that a CM should not have any way at all to suppress an exception?  I don't think I'd agree with that, personally.  Even if it's a rare case, I do believe it's a feature that should remain.&lt;/p&gt;
&lt;p&gt;--Larry Garfield&lt;/p&gt;
</description><guid>e84561a6-be65-4561-b256-f67338accc1c@app.fastmail.com</guid><pubDate>Wed, 29 Apr 2026 15:04:55 +0000</pubDate></item><item><title>[RFC] Context Managers</title><link>https://externals.io/message/130708</link><description>&lt;blockquote&gt;
&lt;p&gt;I think a key question to answer here is: Do we care to differentiate between CM errors and underlying errors?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don't think we need to differentiate at the CM level. Suppression is a policy decision that belongs to the caller, not the context manager. The CM's job is cleanup: rollback the transaction, close the file, release the lock, etc. Whether the exception continues propagating after that is the caller's call, and &lt;code&gt;try using&lt;/code&gt; already provides exactly that:&lt;/p&gt;
&lt;p&gt;try using ($db-&amp;gt;transaction() =&amp;gt; $conn) { &lt;br&gt;
$conn-&amp;gt;execute('INSERT INTO orders ...'); &lt;br&gt;
} catch (ValidationException $e) { &lt;br&gt;
// Caller chooses to suppress this here &lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;That makes &lt;code&gt;exitContext()&lt;/code&gt; simple: return void, do your cleanup, and get out. If cleanup fails, it throws naturally, and the desugared form can chain the original exception as &lt;code&gt;$previous&lt;/code&gt; so the root cause isn't lost. If the caller wants to suppress or differentiate, they already have &lt;code&gt;try using&lt;/code&gt; for exactly that.&lt;/p&gt;
&lt;p&gt;It's worth noting that every example in the RFC (database transactions, file locks, error handler swaps, async scopes) does cleanup and propagates. None of them actually need the power to suppress. If a context manager wants to give callers a clean exception hierarchy to catch against, it can wrap underlying exceptions in their own types during cleanup. That's just normal exception design, no special syntax required.&lt;/p&gt;
&lt;p&gt;— Rob&lt;/p&gt;
</description><guid>8ab92f4f-0fce-4239-9732-2d5c7ae1159d@app.fastmail.com</guid><pubDate>Wed, 29 Apr 2026 14:30:57 +0000</pubDate></item><item><title>[RFC] Context Managers</title><link>https://externals.io/message/130707</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-22 20:28, schrieb Larry Garfield:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Ways of handling a single method's returns&lt;/h2&gt;
&lt;p&gt;Possible ways to do so off the top of my head, in no particular order:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don't currently have the time to digest this email in detail, but I &lt;br&gt;
wanted to mention an alternative you didn't before I forget: Making the &lt;br&gt;
exception an in-out parameter. That would be functionally similar to a &lt;br&gt;
return value, but more strongly default to “don't make a change”, &lt;br&gt;
because “doing nothing” will just work.&lt;/p&gt;
&lt;p&gt;i.e.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; public function exitContext(?\Throwable &amp;amp;$e): void {
     // Assign null to suppress.
     $e = null;
 }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>018193fa191faf95bb065a35a9a4d2a3@bastelstu.be</guid><pubDate>Wed, 29 Apr 2026 13:15:20 +0000</pubDate></item><item><title>RFC karma request</title><link>https://externals.io/message/130706</link><description>&lt;p&gt;Hi Roman&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I kindly request RFC Karma for my wiki account &lt;code&gt;pronskiy&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I'd like to publish a proposal on Social Media and Marketing &lt;br&gt;
Communications Policy: &lt;br&gt;
&lt;a href="https://gist.github.com/pronskiy/995feaf238cd7ae33c7d2461cd929d70" rel="nofollow" target="_blank"&gt;https://gist.github.com/pronskiy/995feaf238cd7ae33c7d2461cd929d70&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;RFC karma was granted. Good luck!&lt;/p&gt;
&lt;p&gt;Ilija&lt;/p&gt;
</description><guid>1e7b85b0-fa40-4825-a23c-ac4ea0154d73@gmail.com</guid><pubDate>Tue, 28 Apr 2026 15:46:16 +0000</pubDate></item><item><title>RFC karma request</title><link>https://externals.io/message/130705</link><description>&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;I kindly request RFC Karma for my wiki account &lt;code&gt;pronskiy&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I'd like to publish a proposal on Social Media and Marketing &lt;br&gt;
Communications Policy: &lt;br&gt;
&lt;a href="https://gist.github.com/pronskiy/995feaf238cd7ae33c7d2461cd929d70" rel="nofollow" target="_blank"&gt;https://gist.github.com/pronskiy/995feaf238cd7ae33c7d2461cd929d70&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-Roman&lt;/p&gt;
</description><guid>CALrFCSzxihdejR5TP3f-iBqyN9cv2Tq88X8CT2NBF1eyaqUFig@mail.gmail.com</guid><pubDate>Tue, 28 Apr 2026 15:16:27 +0000</pubDate></item><item><title>`COM_RESET_CONNECTION` support in `mysqlnd`</title><link>https://externals.io/message/130704</link><description>&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;I've created a PR to send &lt;code&gt;COM_RESET_CONNECTION&lt;/code&gt; in &lt;code&gt;mysqlnd&lt;/code&gt; when &lt;br&gt;
reusing a persistent connection [1]. This ensures that the connection &lt;br&gt;
is in a blank-slate state, and not possibly in a transaction or &lt;br&gt;
operating with any variables set from a previous request, etc.&lt;/p&gt;
&lt;p&gt;Tim had opened a GitHub issue for this a while back [2]. A user &lt;br&gt;
commented there to point out that &lt;code&gt;COM_RESET_CONNECTION&lt;/code&gt; is supported &lt;br&gt;
in MySQL 5.7.3+ and MariaDB 10.2+, and so my implementation would &lt;br&gt;
necessitate at least those versions as a minimum supported version.&lt;/p&gt;
&lt;p&gt;Personally, given that both of these versions are EOL, this feels &lt;br&gt;
acceptable, but I'm curious what others think. Notably, if we were to &lt;br&gt;
implement configuration for this we'd likely need to introduce yet &lt;br&gt;
another INI variable; I have an impression that PHP maintainers are &lt;br&gt;
somewhat skeptical of adding new INI settings.&lt;/p&gt;
&lt;p&gt;Secondly, I'm curious what people think about implementing this in &lt;br&gt;
both PDO &lt;em&gt;and&lt;/em&gt; &lt;code&gt;mysqlnd&lt;/code&gt;. In PDO, we can replace the liveness check &lt;br&gt;
with this command, which would act as both a liveness check and a &lt;br&gt;
reset for no additional round-trip cost.&lt;/p&gt;
&lt;p&gt;Please take a look and let me know what you think. I would like to &lt;br&gt;
think this is something that is possible without submitting an RFC, &lt;br&gt;
but of course if people feel that is necessary I'm able to go that &lt;br&gt;
route.&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;
&lt;p&gt;[1] &lt;a href="https://github.com/php/php-src/pull/21857" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/pull/21857&lt;/a&gt; &lt;br&gt;
[2] &lt;a href="https://github.com/php/php-src/issues/20225" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/issues/20225&lt;/a&gt;&lt;/p&gt;
</description><guid>CA+NMNO2WouLYZ9PKQSvdf=8s9WoJeod_PbwWdc6zQh8WUovhyg@mail.gmail.com</guid><pubDate>Mon, 27 Apr 2026 18:09:48 +0000</pubDate></item><item><title>[RFC] Display Function Arguments in Errors</title><link>https://externals.io/message/130703</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;Based on the feedback I had from my proposal for function arguments in &lt;br&gt;
errors last week, I'd like to introduce an RFC for it. Please let me &lt;br&gt;
know what you think and please raise any possible issues.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/display_error_function_args" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/display_error_function_args&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Regards, &lt;br&gt;
Calvin&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Per feature-proposals, this is an Intent to Vote message.&lt;/p&gt;
&lt;p&gt;I intend to start the vote on Friday, around the evening in Europe.&lt;/p&gt;
</description><guid>7E4FCDED-AD0D-4C8C-9876-EB0722B42B75@cmpct.info</guid><pubDate>Mon, 27 Apr 2026 16:05:44 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130702</link><description>&lt;blockquote&gt;
&lt;p&gt;﻿ &lt;br&gt;
Any response about reasonable alternative RFC? &lt;br&gt;
&lt;a href="https://gist.github.com/pronskiy/995feaf238cd7ae33c7d2461cd929d70" rel="nofollow" target="_blank"&gt;https://gist.github.com/pronskiy/995feaf238cd7ae33c7d2461cd929d70&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My response is that if Roman wants to propose his own RFC and have it discussed here, he knows where the list is.&lt;/p&gt;
&lt;p&gt;Jim&lt;/p&gt;
</description><guid>051D6DB0-745E-4E8F-AC37-DF0BBDF1EF09@trainedmonkey.com</guid><pubDate>Sun, 26 Apr 2026 23:19:01 +0000</pubDate></item><item><title>PHP Foundation Discord channel</title><link>https://externals.io/message/130701</link><description>&lt;p&gt;Hi everyone&lt;/p&gt;
&lt;p&gt;Quick heads-up: &lt;a href="http://phpc.chat" rel="nofollow" target="_blank"&gt;phpc.chat&lt;/a&gt; has graciously allowed the PHP Foundation to &lt;br&gt;
host a channel on their Discord server for non-technical questions &lt;br&gt;
addressed at the foundation, more specifically at Elizabeth and the &lt;br&gt;
board.&lt;/p&gt;
&lt;p&gt;You can join the server via &lt;a href="https://phpc.chat/" rel="nofollow" target="_blank"&gt;https://phpc.chat/&lt;/a&gt; and find the &lt;br&gt;
#the-php-foundation channel in the &amp;quot;community&amp;quot; section.&lt;/p&gt;
&lt;p&gt;Announcement: &lt;a href="https://phpc.social/@thephpf/116330924522419959" rel="nofollow" target="_blank"&gt;https://phpc.social/@thephpf/116330924522419959&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cheers &lt;br&gt;
Ilija&lt;/p&gt;
</description><guid>CAPyj-LDcKDC6t0_tEBg-1U_fT24-081u6X1dt0uGO2FLct0z9A@mail.gmail.com</guid><pubDate>Sun, 26 Apr 2026 22:23:43 +0000</pubDate></item><item><title>VCS Account Request: iliaa</title><link>https://externals.io/message/130700</link><description>&lt;p&gt;Thanks&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Ilia&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Fixing bugs, adding some performance improvements and &lt;br&gt;
tightening/checking security. Maybe some new features in the future.&lt;/p&gt;
&lt;p&gt;I would also like to modernize/maintain some of my old PECL extensions &lt;br&gt;
(statgrab, lchash, etc...).&lt;/p&gt;
&lt;p&gt;Requesting VCS access for my existing &lt;a href="mailto:iliaa@php.net" rel="nofollow" target="_blank"&gt;iliaa@php.net&lt;/a&gt; account via my &lt;br&gt;
GitHub iliaal account.&lt;/p&gt;
&lt;p&gt;P.S. Couldn't use &lt;a href="https://www.php.net/git-php.php" rel="nofollow" target="_blank"&gt;https://www.php.net/git-php.php&lt;/a&gt;, since already have &lt;br&gt;
an account&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Given your many contributions to PHP in its earlier days, your request &lt;br&gt;
was approved.&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;-- &lt;br&gt;
Ilia Alshanetsky &lt;br&gt;
Technologist, CTO, Entrepreneur &lt;br&gt;
E: &lt;a href="mailto:ilia@ilia.ws" rel="nofollow" target="_blank"&gt;ilia@ilia.ws&lt;/a&gt; &lt;br&gt;
T: @iliaa &lt;br&gt;
B: &lt;a href="http://ilia.ws" rel="nofollow" target="_blank"&gt;http://ilia.ws&lt;/a&gt;&lt;/p&gt;
</description><guid>CALkpNnS5ZPwaat82MnjB6viLxnxDYtZx-UnHEu5nZURn=4XVUA@mail.gmail.com</guid><pubDate>Sun, 26 Apr 2026 21:47:37 +0000</pubDate></item><item><title>VCS Account Request: iliaa</title><link>https://externals.io/message/130699</link><description>&lt;p&gt;Hi Ilia&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Fixing bugs, adding some performance improvements and tightening/checking security. Maybe some new features in the future.&lt;/p&gt;
&lt;p&gt;I would also like to modernize/maintain some of my old PECL extensions (statgrab, lchash, etc...).&lt;/p&gt;
&lt;p&gt;Requesting VCS access for my existing &lt;a href="mailto:iliaa@php.net" rel="nofollow" target="_blank"&gt;iliaa@php.net&lt;/a&gt; account via my GitHub iliaal account.&lt;/p&gt;
&lt;p&gt;P.S. Couldn't use &lt;a href="https://www.php.net/git-php.php" rel="nofollow" target="_blank"&gt;https://www.php.net/git-php.php&lt;/a&gt;, since already have an account&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Given your many contributions to PHP in its earlier days, your request &lt;br&gt;
was approved.&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
</description><guid>CAPyj-LBYQXDd98apSEynogC_R9iJmGh+wTyjDw-J+TQMkbB+_Q@mail.gmail.com</guid><pubDate>Sun, 26 Apr 2026 21:43:26 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130698</link><description>&lt;p&gt;Any response about reasonable alternative RFC? &lt;br&gt;
&lt;a href="https://gist.github.com/pronskiy/995feaf238cd7ae33c7d2461cd929d70" rel="nofollow" target="_blank"&gt;https://gist.github.com/pronskiy/995feaf238cd7ae33c7d2461cd929d70&lt;/a&gt;&lt;/p&gt;
</description><guid>CAPTD5yHZky-iU92n5saW9CCWRa26mLRfPbEV5Mwrk-d=_jia4w@mail.gmail.com</guid><pubDate>Sun, 26 Apr 2026 17:59:01 +0000</pubDate></item><item><title>[RFC] Remove the links to X.com from PHP.net</title><link>https://externals.io/message/130697</link><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I intend to start the vote on this RFC next Saturday, May 2nd.&lt;/p&gt;
&lt;p&gt;Thanks.&lt;/p&gt;
&lt;p&gt;Jim&lt;/p&gt;
</description><guid>3771c267-facb-491e-aab2-1752482cb380@app.fastmail.com</guid><pubDate>Sun, 26 Apr 2026 17:17:24 +0000</pubDate></item><item><title>[RFC] Polling API</title><link>https://externals.io/message/130696</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-03-31 15:23, schrieb Jakub Zelenka:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is actually no internal API for hooks so it would require using &lt;br&gt;
object handlers (which is from the user space point of view just &lt;br&gt;
__get). It &lt;br&gt;
means no stubs declaration either. We also don't have an internal &lt;br&gt;
policy &lt;br&gt;
where to use hooks and where methods. So there are still lots of &lt;br&gt;
blockers &lt;br&gt;
to start using it in core.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While I agree with the conclusion that using hooks internally is &lt;br&gt;
complicated and there is no real policy there, Valentin was actually &lt;br&gt;
making a good point: We could use regular &lt;code&gt;readonly&lt;/code&gt; properties for &lt;br&gt;
those cases where we're just exposing a “constructor parameter”. &lt;br&gt;
Specifically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Context::getBackend() -&amp;gt; public readonly Backend $backend;&lt;/li&gt;
&lt;li&gt;Watcher::getHandle() -&amp;gt; public readonly Handle $handle;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Potentially Watcher::$data could also be a regular (non-readonly) &lt;br&gt;
property, or does &lt;code&gt;modifyData()&lt;/code&gt; contain additional logic that is not &lt;br&gt;
just “store the value somewhere”?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I tried to convert few but it resulted in quite ugly inconsistent mess. &lt;br&gt;
Some of those need back calls to backend so they are really not ideal for &lt;br&gt;
this. So I will stick with the current getters as the API is a bit nicer &lt;br&gt;
with them IMO.&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Jakub&lt;/p&gt;
</description><guid>CAEKnhAFp9f8QZZ3n_aM0fkTeLVBS48h31XKshXi3u8D0nxk2qw@mail.gmail.com</guid><pubDate>Sat, 25 Apr 2026 22:04:33 +0000</pubDate></item><item><title>[RFC] Polling API</title><link>https://externals.io/message/130695</link><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Sorry for the late feedback, it's hard juggling all the different RFCs &lt;br&gt;
that are in progress to provide meaningful feedback.&lt;/p&gt;
&lt;p&gt;Am 2026-03-11 22:07, schrieb Jakub Zelenka:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I also think that there is not really much use case for user space to &lt;br&gt;
implement their own handles so such interface would be used only &lt;br&gt;
internally &lt;br&gt;
anyway.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This applies equally to interfaces and abstract methods. The abstract &lt;br&gt;
base class however will make it much weirder when a specific (future) &lt;br&gt;
handle might need to implement additional interfaces or abstract &lt;br&gt;
classes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In addition interface would effectively expose the internal stream fd &lt;br&gt;
which &lt;br&gt;
is currently hidden and makes harder messing up with stream fd which &lt;br&gt;
might &lt;br&gt;
cause various issues.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don't understand that point. For both an interface and an abstract &lt;br&gt;
method, the method would exist on the child class and thus can be &lt;br&gt;
called &lt;br&gt;
by a developer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well if it is abstract, then the method can be protected and because &lt;br&gt;
the &lt;br&gt;
classes are final, user spaces cannot call it. But for interface I &lt;br&gt;
would&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Protected methods of internal classes should still be accessible to &lt;br&gt;
Reflection.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Good point.&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;need to make it public which means that StreamHandle would need to &lt;br&gt;
expose &lt;br&gt;
callabable (public) method. I know that I could just return 0 and use &lt;br&gt;
different handling internally but I think this would be surprising and &lt;br&gt;
created obvious inconsistency. I mean it's fine if the calls happen &lt;br&gt;
internally but if the exposed methods are just dummy and return &lt;br&gt;
nonsense &lt;br&gt;
for user space, then I don't think it would be a good design.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It's equally weird that there is a protected method that is effectively &lt;br&gt;
internally called by an unrelated class (Context) that is not supposed &lt;br&gt;
to know about it. Perhaps the correct solution would then be removing &lt;br&gt;
the &lt;code&gt;getFileDescriptor()&lt;/code&gt; method from the public API entirely and change &lt;br&gt;
&lt;code&gt;Handle&lt;/code&gt; to be an empty “marker interface” that cannot be implemented in &lt;br&gt;
userland (similarly to Throwable) to leave all options open for the &lt;br&gt;
future?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This (marker interface just for internal classes) is actually a really &lt;br&gt;
good idea. Will change it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I just implemented this and it's much better so thanks for this. RFC &lt;br&gt;
updated as well.&lt;/p&gt;
</description><guid>CAEKnhAHp7t6LxkWtzKqH5mcxkxVmE23zcN_f8QdWZR5DV9xE8Q@mail.gmail.com</guid><pubDate>Sat, 25 Apr 2026 21:58:30 +0000</pubDate></item><item><title>[RFC] [Discussion] array_get and array_has functions</title><link>https://externals.io/message/130694</link><description>&lt;p&gt;Tim,&lt;/p&gt;
&lt;p&gt;Many thanks for your comments regarding the RFC, I have updated it. &lt;br&gt;
Regarding the issue of throwing errors if a path cannot be traversed due to &lt;br&gt;
an intermediate step not being an array, I tend to agree with Larry so I am &lt;br&gt;
leaving this as it is for the time being&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;p&gt;Carlos&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-20 17:18, schrieb Larry Garfield:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Just to make sure we're talking about the same thing here.  Tim, you're &lt;br&gt;
suggesting that this:&lt;/p&gt;
&lt;p&gt;$a = ['foo' =&amp;gt; 'bar']; &lt;br&gt;
$val = array_path_get($a, ['foo', 'bar', 'baz']);&lt;/p&gt;
&lt;p&gt;Should error rather than returning null?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If the array were clearly, consistently, and properly structured, we &lt;br&gt;
could reliably just do $a['foo']['bar'] and move on with life. &lt;br&gt;
[…] &lt;br&gt;
So in that sort of case, I'm not sure it's useful to distinguish &lt;br&gt;
between &amp;quot;There is no baz key on the array at &lt;a href="http://foo.bar" rel="nofollow" target="_blank"&gt;foo.bar&lt;/a&gt;&amp;quot; and &amp;quot;&lt;a href="http://foo.bar" rel="nofollow" target="_blank"&gt;foo.bar&lt;/a&gt; is a &lt;br&gt;
string, not an array, wat?&amp;quot; […]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The goal of the RFC is replacing &lt;code&gt;$a['foo']['bar']&lt;/code&gt; where the &lt;em&gt;path is &lt;br&gt;
dynamic&lt;/em&gt;. Quoting right from the introduction of the RFC:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When the structure of the array is known in advance and the exact &lt;br&gt;
element to retrieve is hardcoded, existing PHP syntax works well […]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And quoting further from the introduction:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;array_path_get() retrieves a value from a deeply nested array and &lt;br&gt;
returns a default value if the path does not exist.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm arguing that a “(value at) path does not exist” is something &lt;br&gt;
fundamentally different from “value encountered on path cannot be &lt;br&gt;
traversed further”.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;converting to an object&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree that the correct solution in the general case is “use a proper &lt;br&gt;
object mapper” (such as Valinor) and don't see much personal value in &lt;br&gt;
having the proposed functions. But if they exist, I would want them to &lt;br&gt;
behave as safely as possible and that includes erroring if they cannot &lt;br&gt;
make sense of the data. Emitting a Warning when encountering an &lt;br&gt;
improperly typed value across the path would also work for me, but I &lt;br&gt;
suppose that others won't be in favor of &lt;em&gt;that&lt;/em&gt; :-)&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
&lt;/blockquote&gt;
</description><guid>CABVsipgWoX1bNa69wUi0AmGK4-62WkNsaWj965QT4ocyz9_wCg@mail.gmail.com</guid><pubDate>Sat, 25 Apr 2026 19:37:02 +0000</pubDate></item><item><title>VCS Account Request: iliaa</title><link>https://externals.io/message/130693</link><description>&lt;blockquote&gt;
&lt;p&gt;Fixing bugs, adding some performance improvements and tightening/checking &lt;br&gt;
security. Maybe some new features in the future.&lt;/p&gt;
&lt;p&gt;I would also like to modernize/maintain some of my old PECL extensions &lt;br&gt;
(statgrab, lchash, etc...).&lt;/p&gt;
&lt;p&gt;Requesting VCS access for my existing &lt;a href="mailto:iliaa@php.net" rel="nofollow" target="_blank"&gt;iliaa@php.net&lt;/a&gt; account via my GitHub &lt;br&gt;
iliaal account.&lt;/p&gt;
&lt;p&gt;P.S. Couldn't use &lt;a href="https://www.php.net/git-php.php" rel="nofollow" target="_blank"&gt;https://www.php.net/git-php.php&lt;/a&gt;, since already have an &lt;br&gt;
account&lt;/p&gt;
&lt;p&gt;-- &lt;br&gt;
Ilia Alshanetsky &lt;br&gt;
E: &lt;a href="mailto:ilia@ilia.ws" rel="nofollow" target="_blank"&gt;ilia@ilia.ws&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I don't think you need VCS access for these actions. You can just submit a &lt;br&gt;
PR with your changes.&lt;/p&gt;
</description><guid>CAGBsUrfc1NSNX0nNvPUmknJ=NpyVbG5=ZTvzXFsJVMkGNf5ZBg@mail.gmail.com</guid><pubDate>Sat, 25 Apr 2026 14:30:33 +0000</pubDate></item><item><title>VCS Account Request: iliaa</title><link>https://externals.io/message/130692</link><description>&lt;p&gt;Fixing bugs, adding some performance improvements and tightening/checking &lt;br&gt;
security. Maybe some new features in the future.&lt;/p&gt;
&lt;p&gt;I would also like to modernize/maintain some of my old PECL extensions &lt;br&gt;
(statgrab, lchash, etc...).&lt;/p&gt;
&lt;p&gt;Requesting VCS access for my existing &lt;a href="mailto:iliaa@php.net" rel="nofollow" target="_blank"&gt;iliaa@php.net&lt;/a&gt; account via my GitHub &lt;br&gt;
iliaal account.&lt;/p&gt;
&lt;p&gt;P.S. Couldn't use &lt;a href="https://www.php.net/git-php.php" rel="nofollow" target="_blank"&gt;https://www.php.net/git-php.php&lt;/a&gt;, since already have an &lt;br&gt;
account&lt;/p&gt;
&lt;p&gt;-- &lt;br&gt;
Ilia Alshanetsky &lt;br&gt;
E: &lt;a href="mailto:ilia@ilia.ws" rel="nofollow" target="_blank"&gt;ilia@ilia.ws&lt;/a&gt;&lt;/p&gt;
</description><guid>CALkpNnQ8ZvMUY8vN9jpVse=iv4XN749fY1_=UsCzH-L3fxSrgQ@mail.gmail.com</guid><pubDate>Sat, 25 Apr 2026 12:56:57 +0000</pubDate></item><item><title>[RFC] Deprecate Metaphone Function</title><link>https://externals.io/message/130691</link><description>&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;Currently, PHP core maintains the oldest and least accurate version of the metaphone algorithm in C in the metaphone function. It was superseded by more accurate algorithms, namely Double Metaphone and Metaphone 3, and only limited to English pronunciation rules. There are already robust and actively maintained userland libraries available via Composer that implement Double Metaphone and Metaphone 3 &lt;a href="https://packagist.org/packages/carloswph/linguistics"&gt;1&lt;/a&gt;&lt;a href="https://packagist.org/packages/noodlesnz/double-metaphone"&gt;3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I therefore would like to introduce a RFC to deprecate the metaphone function. Maintaining this legacy function in the core provides little value to modern PHP applications, and users could be advised to switch to more accurate alternatives. Even in the case where strict backward compatibility with core functions is preferred, people can still use soundex instead.&lt;/p&gt;
&lt;p&gt;RFC link: &lt;a href="https://wiki.php.net/rfc/deprecate-metaphone" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/deprecate-metaphone&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I am happy to know your thoughts on this.&lt;/p&gt;
&lt;p&gt;— Weilin Du &amp;&lt;a href="mailto:lt;1372449351@qq.com" rel="nofollow" target="_blank"&gt;lt;1372449351@qq.com&lt;/a&gt;, &lt;a href="mailto:lamentxu@163.com" rel="nofollow" target="_blank"&gt;lamentxu@163.com&lt;/a&gt;&amp;gt;&lt;/p&gt;
</description><guid>tencent_CEA6D213EF5659BC4B37BA14F12982375707@qq.com</guid><pubDate>Sat, 25 Apr 2026 10:33:22 +0000</pubDate></item><item><title>[VOTE] Oniguruma maintenance end and end of mbregex</title><link>https://externals.io/message/130690</link><description>&lt;p&gt;2026年4月11日(土) 13:09 youkidearitai &lt;a href="mailto:youkidearitai@gmail.com"&gt;youkidearitai@gmail.com&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;2026年4月10日(金) 14:42 Matteo Beccati &lt;a href="mailto:php@beccati.com"&gt;php@beccati.com&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Il 10/04/2026 02:41, youkidearitai ha scritto:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi, Internals&lt;/p&gt;
&lt;p&gt;I started voting for &amp;quot;Deprecate mbregex 8.6 and delete 9.0&amp;quot;. &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/eol-oniguruma" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/eol-oniguruma&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thanks for your clarifications: I'm in favour of the proposal.&lt;/p&gt;
&lt;p&gt;The deprecation message might require some tweaking to better fit the &lt;br&gt;
English grammar, but that's just a minor thing ;-)&lt;/p&gt;
&lt;h2&gt;Cheers&lt;/h2&gt;
&lt;p&gt;Matteo&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hi, Matteo &lt;br&gt;
Thank you for your feedback.&lt;/p&gt;
&lt;p&gt;Indeed, We need to change the description message. &lt;br&gt;
Change that message if this voting is accepted.&lt;/p&gt;
&lt;p&gt;Regards &lt;br&gt;
Yuya&lt;/p&gt;
&lt;h2&gt;--&lt;/h2&gt;
&lt;p&gt;Yuya Hamada (tekimen)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tekitoh-memdhoi.info" rel="nofollow" target="_blank"&gt;https://tekitoh-memdhoi.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/youkidearitai" rel="nofollow" target="_blank"&gt;https://github.com/youkidearitai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hi, Internals &lt;br&gt;
This vote is ended. 24 yes, 0 no, 0 abstain. &lt;br&gt;
This RFC is accepted.&lt;/p&gt;
&lt;p&gt;Thank you very much for voting.&lt;/p&gt;
&lt;p&gt;Regards &lt;br&gt;
Yuya&lt;/p&gt;
&lt;h2&gt;--&lt;/h2&gt;
&lt;p&gt;Yuya Hamada (tekimen)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tekitoh-memdhoi.info" rel="nofollow" target="_blank"&gt;https://tekitoh-memdhoi.info&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/youkidearitai" rel="nofollow" target="_blank"&gt;https://github.com/youkidearitai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><guid>CAEPPVa3P-Ve6N_GgQ3C88x5Gr-tPMijB=wMPyqHqvnd_3ZRYQg@mail.gmail.com</guid><pubDate>Sat, 25 Apr 2026 00:32:40 +0000</pubDate></item><item><title>[RFC] Secure Session Configuration Defaults</title><link>https://externals.io/message/130689</link><description>&lt;p&gt;Thanks Gina for input. I see it as an improvement as well and would be &lt;br&gt;
happy to help with it. However, I like to keep things separated in this RFC.&lt;/p&gt;
&lt;p&gt;If no new comments will arrive I would like to move to voting phase next &lt;br&gt;
week.&lt;/p&gt;
&lt;p&gt;Kind regards, &lt;br&gt;
Jorg&lt;/p&gt;
</description><guid>CAPTD5yF5ssVHJ4F2pDJGX=Ax=Y+xDZGz5uv_pehzvmXOBfi6Kw@mail.gmail.com</guid><pubDate>Fri, 24 Apr 2026 07:40:38 +0000</pubDate></item><item><title>PHP 8.5.6RC1 available for testing</title><link>https://externals.io/message/130688</link><description>&lt;p&gt;PHP 8.5.6RC1 has just been released and may be downloaded from &lt;br&gt;
&lt;a href="https://downloads.php.net/~daniels/" rel="nofollow" target="_blank"&gt;https://downloads.php.net/~daniels/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Or use the git tag: php-8.5.6RC1&lt;/p&gt;
&lt;p&gt;Windows binaries are available at: &lt;br&gt;
&lt;a href="https://www.php.net/pre-release-builds.php#windows" rel="nofollow" target="_blank"&gt;https://www.php.net/pre-release-builds.php#windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please test it carefully, and report any bugs at &lt;br&gt;
&lt;a href="https://github.com/php/php-src/issues" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/issues&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8.5.6 should be expected in 2 weeks, i.e. on the 7 May 2026.&lt;/p&gt;
&lt;p&gt;Hash values and PGP signatures can be found below or at &lt;br&gt;
&lt;a href="https://gist.github.com/DanielEScherzer/108510dd1016e1c63946309e0dd245d9" rel="nofollow" target="_blank"&gt;https://gist.github.com/DanielEScherzer/108510dd1016e1c63946309e0dd245d9&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thank you, and happy testing!&lt;/p&gt;
&lt;p&gt;Regards, &lt;br&gt;
Daniel Scherzer, Volker Dusch, and Pierrick Charron&lt;/p&gt;
&lt;p&gt;php-8.5.6RC1.tar.bz2 &lt;br&gt;
SHA256 hash: &lt;br&gt;
c1dc3dfc7be00aff78e92419b990cc99a447a338be213a3c542030bd08dd717a &lt;br&gt;
PGP signature: &lt;br&gt;
-----BEGIN PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;iQIzBAABCAAdFiEE2VwDvHAr6VFTRK4zdORLyQZ3AaUFAmnn7KUACgkQdORLyQZ3 &lt;br&gt;
AaULhw//VU3E0Jq7uWU81ZQnqmRozaxtKfvFntCyuXqxknXFK3oZc1adwGeNhulF &lt;br&gt;
hMABZ5KqAko1yNi2pcJ/4KC+GVkGPWXwUrzr6/rT+99bwtfExpt1LG5WYDtg8pGV &lt;br&gt;
zmZ7+Ud85MxCzk/5QlGdpZJmyWDX/pV6haI12tOI/ZI8QQQuAHtopOB2ew+raGnH &lt;br&gt;
A7p/qNHfAUGb39d5JXGlKzeBc3mJLLwl4rEg6UoxS0QTphUTgtXimcR0hDIsbbOu &lt;br&gt;
kXWLOQA3pUWXJF3nohYJa+6iHV3ZpyCVxj7KfJmIpAfHD6J9XcC6OgLs2+Ne/WLJ &lt;br&gt;
EUv3+vPMSUHEcBnsFITdCs0A+SElGm+1E5/YkId8KvD2rDDPstO/+OikgHx7MTxQ &lt;br&gt;
0suurrfior318zY4jjHgxCO0iEtNEcHhN+7GASQ+b1jv0+xv4qOmEpBISIXbzRZ7 &lt;br&gt;
eZOifeOQo7Mq/lWkqngnzLNjHgk85TR3oLN+6MpDVWcly5qQS6eQ51YRbE+Ma6CH &lt;br&gt;
fcCzLTbcIpuUC2E4D/r5/n2Vd0rYpIS9436ljH4+J9ogK0+AmZb0i7xKvqqwP8ko &lt;br&gt;
0utXw8nAAmHERhJQqltDpd8FY3I3wp7VmOjyfq1ldVQ9RBID0XF3XrIAsYYOzV8Z &lt;br&gt;
ChvemxTW15jjKZCSOuXT/L6kNtqf3eGQHBiHoPMYU0vuERv9VEo= &lt;br&gt;
=+qHF &lt;br&gt;
-----END PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;php-8.5.6RC1.tar.gz &lt;br&gt;
SHA256 hash: &lt;br&gt;
dc1cf05cd4533b81506074c208db1ce33b643ce30108392233cae21a5c841734 &lt;br&gt;
PGP signature: &lt;br&gt;
-----BEGIN PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;iQIzBAABCAAdFiEE2VwDvHAr6VFTRK4zdORLyQZ3AaUFAmnn7K0ACgkQdORLyQZ3 &lt;br&gt;
AaVHORAAv3meqz6caNiO87R6QyX/q014Ulnce7q5fpKMKuSERXi+c0nISm7XFFbO &lt;br&gt;
F/lNBJDilV/zpjV4dumzrhV7Z6JTq0CUovVjzZxYfLsHGv9m9J1J0cfo21j1q+Gz &lt;br&gt;
x7xbl+E4ja0CQxJNZxUKKBzEjOLipFkGHhXresQamJzebRmJTL2VtYOjrTyynJ+v &lt;br&gt;
i8nYEg+2+1AUzjg3uELYt5faaxohfsC3P8zceJ4vADV9MIK+pTn/zN+woD6RC9kU &lt;br&gt;
2T/MFByekKZm+PJ+zC+O0tQoS22JeCEA/Yu6gwtb8vs1mer1Dj2PiCTYB1vmeyEN &lt;br&gt;
wYDyXb+XDu6YrUZfTYUqbYfCuQew1Bzv3yztGyP4m3aESw09/bnJTLahQLd3MeZA &lt;br&gt;
MmDlfbn+H/huzvLzSxxruBSjrRxJ8zO9O9QISgVOJHS67ZpqZdwWzif1ynaGXHWd &lt;br&gt;
DvrfW0kj2YAjfRK6FqInPUqaM8djVjXgA9YaN2CVx2lSaacpJ1ZfkLwK+IA188xA &lt;br&gt;
agNv8xIyY4KX9HmxmZaDRYdewCjVNrUgvcuuHNDbVXt1BNDg1laZUCzsFLOH8UhS &lt;br&gt;
dfJc5eG/YrBaomoun4bHOYKyQZwpcaqd9kiFzbBwj4eqXe2aht64bAs4mlB/3+vX &lt;br&gt;
FHiQj5PxST04mopmFszEP5DDggnoY548o9iTNIuxr4VykLTFtZw= &lt;br&gt;
=Z664 &lt;br&gt;
-----END PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;php-8.5.6RC1.tar.xz &lt;br&gt;
SHA256 hash: &lt;br&gt;
d57fa52541f8f2dd9511efb42e2b9307af49189a64f07cb69ae078371f70b4dc &lt;br&gt;
PGP signature: &lt;br&gt;
-----BEGIN PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;iQIzBAABCAAdFiEE2VwDvHAr6VFTRK4zdORLyQZ3AaUFAmnn7K0ACgkQdORLyQZ3 &lt;br&gt;
AaUYLA//TJtl4E82Uq6rUtpSDUqKXNdmjP2TrGXG4yXbJnVUaR5H0tgOAh5iH05W &lt;br&gt;
h5wl9Uiwdy0mzzkRsSZ23sa4WSYNrTj1Kcw5MANR2Pb8qxCAPWURHMsIcmdJdyk1 &lt;br&gt;
Fs4XhJDRxgLa/nCLWChB+vBy8hv0DKk21LrOo/fqSeyr0KeFNujFrbt9EjfgU6Hx &lt;br&gt;
YdEorMZ3R13gCmZFqrsMw62PKdnypVvVeS9thPzuhrDXZud4LsfOdkDU7xDBP29U &lt;br&gt;
FMo79/l06SFq2gbNBfXORJWcWoIskTV+veugmhU14fzE3sK8YUDrxU/SUv92PYDx &lt;br&gt;
Uuez6+3KcHO0B8ZHbmMNzPUBVjbJjrrEP2hZ4KjXPJMjORcSziqHQUezZTdI+UpI &lt;br&gt;
TXfh1CWDboz9Tb8DuhZw6CKoVwFej1TUSldceMOaQScB0t46wN9UvUWkI/xj+HeW &lt;br&gt;
0ghWR2wPStz0hiItQuHwKCNmM2ly3ulfe5fVf6m7lMJyvnBN3qV/f5AjvRC4x+Mw &lt;br&gt;
5jtlkBSP1Kklo/KHtHoFnEik6fx6VBqC9OPdRjEJ2Cfwh2ONl43aYUF+/+JzwTLv &lt;br&gt;
pYcSeBDZIvFTaHpw1YDbqMByMc5QvgLjYePyi4f58PWWl6DSsXSIZ1Ar7z75WH/w &lt;br&gt;
zfB2STMWsBcqw1JsupPP8E4Bw8hDyto1zRomy08Twx+rbEsLEXg= &lt;br&gt;
=xxIa &lt;br&gt;
-----END PGP SIGNATURE&lt;/p&gt;
</description><guid>CALaXqqRwtqwM05AFX6i1kbGXsoDZkPa0DYeLX-jngdsF631P+A@mail.gmail.com</guid><pubDate>Fri, 24 Apr 2026 00:09:21 +0000</pubDate></item><item><title>PHP 8.4.21RC1 Ready for testing</title><link>https://externals.io/message/130687</link><description>&lt;p&gt;PHP 8.4.21RC1 has just been released and may be downloaded from &lt;br&gt;
&lt;a href="https://downloads.php.net/~calvinb/" rel="nofollow" target="_blank"&gt;https://downloads.php.net/~calvinb/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Or use the git tag: php-8.4.21RC1&lt;/p&gt;
&lt;p&gt;Windows binaries are available at: &lt;a href="https://www.php.net/pre-release-builds.php#windows" rel="nofollow" target="_blank"&gt;https://www.php.net/pre-release-builds.php#windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please test it carefully, and report any bugs at &lt;a href="https://github.com/php/php-src/issues" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/issues&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;8.4.21 should be expected in 2 weeks, i.e. on the 7th.&lt;/p&gt;
&lt;p&gt;Hash values and PGP signatures can be found below or at &lt;br&gt;
&lt;a href="https://gist.github.com/NattyNarwhal/2bf59791bd5e09f6c7b5b98c55a84b39" rel="nofollow" target="_blank"&gt;https://gist.github.com/NattyNarwhal/2bf59791bd5e09f6c7b5b98c55a84b39&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thank you, and happy testing!&lt;/p&gt;
&lt;p&gt;Regards, &lt;br&gt;
Calvin Buckley, Saki Takamachi, and Eric Mann&lt;/p&gt;
&lt;p&gt;php-8.4.21RC1.tar.bz2 &lt;br&gt;
SHA256 hash: 92be1ab180946fb6fe21456cfae08190fe556fb643d56043bd56f034ae145368 &lt;br&gt;
PGP signature: &lt;br&gt;
-----BEGIN PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;iJEEABYKADkWIQSdf5mgy48FyKaVjWJWqXr3YAo5pgUCaeehshsUgAAAAAAEAA5t &lt;br&gt;
YW51MiwyLjUrMS4xMSwwLDMACgkQVql692AKOabB6AEA0m8SfXYY37qj0AY5Dg/q &lt;br&gt;
wjHUnhrUvzh0lrcHQD7BUZMBAJSM6OecwxT+fgz50b/guz7mgnJNLOOH02p6aiVP &lt;br&gt;
FZcE &lt;br&gt;
=s2Y5 &lt;br&gt;
-----END PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;php-8.4.21RC1.tar.gz &lt;br&gt;
SHA256 hash: e4c3eb09b3948bda0a0e41c73424a73c1d3ca6c7ee81efb22f26f07cb7476929 &lt;br&gt;
PGP signature: &lt;br&gt;
-----BEGIN PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;iJEEABYKADkWIQSdf5mgy48FyKaVjWJWqXr3YAo5pgUCaeehshsUgAAAAAAEAA5t &lt;br&gt;
YW51MiwyLjUrMS4xMSwwLDMACgkQVql692AKOabNggEAxisNSy/zWE1g4efIvBMn &lt;br&gt;
TUrLzBvyVMUeD/jj4buwue8BAIHXC/D7Zi5i1t21D8xKLTUkyU8Uf5sTWYIXluqT &lt;br&gt;
2GAO &lt;br&gt;
=JyLs &lt;br&gt;
-----END PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;php-8.4.21RC1.tar.xz &lt;br&gt;
SHA256 hash: c1a77cbbfe2dc7dd37b11f88ff68f112dbed6eaa9ba2d232e0a1b57852c93096 &lt;br&gt;
PGP signature: &lt;br&gt;
-----BEGIN PGP SIGNATURE-----&lt;/p&gt;
&lt;p&gt;iJEEABYKADkWIQSdf5mgy48FyKaVjWJWqXr3YAo5pgUCaeehshsUgAAAAAAEAA5t &lt;br&gt;
YW51MiwyLjUrMS4xMSwwLDMACgkQVql692AKOaatkAD9HzOE7TFKGfY+XanuEsQg &lt;br&gt;
BaiRbpWgVwLhnHn0Ki1yU5gA/08S7dv8iNELqx+6ff/vUs5f9kh0fGPMPojJmTtJ &lt;br&gt;
CZQO &lt;br&gt;
=n3/7 &lt;br&gt;
-----END PGP SIGNATURE&lt;/p&gt;
</description><guid>36D066AB-2CAC-4219-8BFC-565420C4D67E@cmpct.info</guid><pubDate>Thu, 23 Apr 2026 19:53:57 +0000</pubDate></item><item><title>wiki maintenance</title><link>https://externals.io/message/130686</link><description>&lt;blockquote&gt;
&lt;p&gt;TLDR: &lt;a href="http://wiki.php.net" rel="nofollow" target="_blank"&gt;wiki.php.net&lt;/a&gt; will be down for maintenance for about 15 minutes &lt;br&gt;
commencing Thursday April 23rd, 2026, from 13:00 UTC onwards.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This has now been completed.&lt;/p&gt;
&lt;p&gt;If you encounter any problem afterwards, please file a ticket at &lt;a href="https://github.com/php/infrastructure/issues" rel="nofollow" target="_blank"&gt;https://github.com/php/infrastructure/issues&lt;/a&gt; using the &amp;quot;property: wiki&amp;quot; label.&lt;/p&gt;
&lt;p&gt;cheers, &lt;br&gt;
Derick&lt;/p&gt;
</description><guid>45BB5C75-B91D-4409-AB1A-DDFFD4247B06@php.net</guid><pubDate>Thu, 23 Apr 2026 13:54:49 +0000</pubDate></item><item><title>[RFC] Context Managers</title><link>https://externals.io/message/130685</link><description>&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;ol start="3"&gt;
&lt;li&gt;I will say it is weird to have exitContext return an exception; but what happens if an exception is thrown during exitContext? Why not just have it return void and throw if you need to throw instead of having two paths to the same thing?&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;There's a subtle but important difference here: An exception passed through exitContext() is the original exception from lower in the call stack, and its backtrace will be the original location of the error.  An exception thrown from within exitContext() itself indicates a failure that the Context Manager is responsible for, usually an error in the exitContext() logic itself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PHP collects traces when exceptions are constructed, not when they're &lt;br&gt;
thrown, so this is a distinction without a difference. From the &lt;br&gt;
outside, it's impossible to tell the difference between &amp;quot;return $e;&amp;quot; &lt;br&gt;
and &amp;quot;throw $e;&amp;quot;.&lt;/p&gt;
&lt;p&gt;That means you have the following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;throw the passed exception unchanged&lt;/li&gt;
&lt;li&gt;return the passed exception, which is equivalent to throwing it&lt;/li&gt;
&lt;li&gt;throw a new exception, or fail to catch an exception in the cleanup &lt;br&gt;
logic, which as Rob points out will hide the passed exception unless &lt;br&gt;
you remember to attach it as $previous&lt;/li&gt;
&lt;li&gt;return a new exception, which according to the current RFC text will &lt;br&gt;
be completely ignored (is &amp;quot;throw $e&amp;quot; supposed to say &amp;quot;throw $__ret&amp;quot;?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It does seem like it would be more straightforward to have the return &lt;br&gt;
value be &amp;quot;void&amp;quot;, and leave it to the implementation to throw or not.&lt;/p&gt;
&lt;p&gt;In practice, as you say, &amp;quot;throw unchanged&amp;quot; will be common, but unless &lt;br&gt;
that's the behaviour of a &lt;em&gt;null&lt;/em&gt; return (i.e. the default if not opted &lt;br&gt;
out), &amp;quot;throw $e;&amp;quot; seems the natural boilerplate for that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Since this seems like a contentious area, let me go back to first principles and try to explore the problem space.  (This is an essay; meaning I don't know where it's going to end up yet as I write this.)&lt;/p&gt;
&lt;h2&gt;The problem space&lt;/h2&gt;
&lt;p&gt;A context manager may exit in one of two conditions: Success or Failure.&lt;/p&gt;
&lt;p&gt;There are three types of code that a CM may want to run, but not always all of them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code that happens on success.&lt;/li&gt;
&lt;li&gt;Code that happens on failure.&lt;/li&gt;
&lt;li&gt;Code that happens on both.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the case of Success, there is no value to propagate.&lt;/p&gt;
&lt;p&gt;In the case of Failure, there is a value (exception) to conditionally propagate, but the default case should be propagate.&lt;/p&gt;
&lt;p&gt;The CM may have its own error, in which case it will want to propagate that error (as a throwable).&lt;/p&gt;
&lt;p&gt;Would a CM ever want to wrap-and-rethrow a lower-level exception, rather than just passing it on itself?  I suppose it's possible, though I'm not sure of a specific example off hand.&lt;/p&gt;
&lt;h2&gt;Python's answer&lt;/h2&gt;
&lt;p&gt;The Python answer is a single &lt;code&gt;__exit__&lt;/code&gt; method, which may be passed optional exception information.  In Python, not returning anything is equivalent to returning null, which is falsy, so &amp;quot;return true to stop propagation or do nothing to continue propagation&amp;quot; is reasonable and ergonomic.  That is not the case in PHP, however; a function with a typed return MUST have a &lt;code&gt;return&lt;/code&gt; statement in it, and it's not immediately obvious to a user what true-vs-false will do. (Does true mean &amp;quot;yes propagate&amp;quot; or &amp;quot;yes suppress&amp;quot;?)  It also makes the return value meaningless in the success case, which is not immediately obvious.  So mimicking Pythong in this case is not a viable approach.&lt;/p&gt;
&lt;h2&gt;Basic structure&lt;/h2&gt;
&lt;p&gt;In PHP, we could have the three different code paths in one, two, or three methods.&lt;/p&gt;
&lt;p&gt;The three method approach would be something like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function contextSuccess() {
  // Do stuff only on a success case.
}

public function contextFail(Throwable $e): bool {
  // Do stuff only on a failure case, you must return a value.
}

public function contextExit() {
  // Do stuff in any case.
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That approach has 2 problems:  One, contextExit() must then be called either before or after the success/fail callback, always, which may not support the desired cleanup process.  Two, if all three are on the CM interface then they all must be implemented, even if there's nothing for them to do.  That's bad ergonomics.  (Side note: interface-default-methods would help a ton here.)&lt;/p&gt;
&lt;p&gt;The second point could be resolved by making them all magic methods rather than an interface, but that brings with it all the lack-of-introspection challenges of magic methods.&lt;/p&gt;
&lt;p&gt;The two method approach would be:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function contextSuccess() {
  // Do stuff only on a success case.
  // Do common stuff here.
}

public function contextFail(Throwable $e): bool {
  // Do stuff only on a failure case, you must return a value.
  // Do common stuff here, redundantly.
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or alternatively, call out to a separate common method from both.  This would probably work, but again has two problems: One, it makes common actions harder to do, as it requires either redundancy or another method (which may not always be viable in context).  Two, the same &amp;quot;must define both of them even if you don't care&amp;quot; problem exists.  (Again, interface-default-methods would solve this.)&lt;/p&gt;
&lt;p&gt;The single method approach is what the RFC currently proposes:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function contextExit(?Throwable $e) {
  // Do whatever you want, in whatever order, and if ($e === null) to differentiate success/failure.
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This approach resolves both issues of the previous models, but creates one more: the exit condition (return, throw, etc.) from this method is quite complex:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In a Success case, there is no exit condition (return and continue)&lt;/li&gt;
&lt;li&gt;In a Failure case, there is a binary exit condition (propagate or suppress)&lt;/li&gt;
&lt;li&gt;In the case contextExit() itself has a failure, it would need to throw its own exception, which implies suppressing the original.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I do believe the single-method approach is the least-bad, if we can resolve the exit condition question.&lt;/p&gt;
&lt;h2&gt;Ways of handling a single method's returns&lt;/h2&gt;
&lt;p&gt;Possible ways to do so off the top of my head, in no particular order:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Return True to suppress, return False to propagate, return Null on success, throw on CM error.  (This is what earlier versions of the RFC had.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pro: Clear delineation for each pathway.&lt;br /&gt;
Con: Needlessly complex in practice and not self-documenting.  Doesn't differentiate between CM exception and underlying exception.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function exitContext(?Throwable $e): ?bool {
  if ($e) { 
    // Error cleanup
  } else {
    // Success cleanup
  }

  // Oops, something went wrong.
  throw CMException();

  // Common cleanup

  return $e === null;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Same as previous, but use enums.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pro: more self-documenting.&lt;br /&gt;
Con: Still needlessly complex, now more verbose, too!  Doesn't differentiate between CM exceptions and underlying exceptions.  Returning one of the Failure case values on a Success case would, uh, just ignore it?  That's not great.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function exitContext(?Throwable $e): ?bool {
  if ($e) { 
    // Error cleanup
  } else {
    // Success cleanup
  }

  // Oops, something went wrong.
  throw CMException();

  // Common cleanup

  if ($e) { 
   if (something) {
      return CMResult::Propagate;
    }
    return CMResult::Suppress;
  } else {
    return CMResult::Success;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Return an exception to cause it to throw, or null to not throw.  This folds the return value into a single line in most cases.  (This is what the RFC says right now.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pro: Ergonomically very convenient.&lt;br /&gt;
Con: &lt;code&gt;return $e&lt;/code&gt; and &lt;code&gt;throw $e&lt;/code&gt; become effectively the same thing, so it's not clear when you'd use one or the other.  Doesn't differentiate between CM exception and underlying exception.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function exitContext(?Throwable $e): ?Throwable {
  if ($e) { 
    // Error cleanup
  } else {
    // Success cleanup
  }

  // Oops, something went wrong.
  throw CMException();

  // Common cleanup

   return $e;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;As Rowan suggested, void return, only propagate on throw.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pro: Folds different pathways together in a natural way.&lt;br /&gt;
Con: The most common case (propagate exception) is the one that requires additional work, not the rare case (not propagating), so I can see it being very common for people to forget to rethrow.  Doesn't differentiate between CM exception and underlying exception.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function exitContext(?Throwable $e): void {
  if ($e) { 
    // Error cleanup
    throw $e;
  } else {
    // Success cleanup
  }

  // Oops, something went wrong.
  throw CMException();

  // Common cleanup
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Follow event-dispatcher patterns, like PSR-14, and call a built-in method to prevent propagation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pro: In the typical case where you want to allow propagation, there's literally nothing to do.  That makes the common case very ergonomic.&lt;br /&gt;
Con: This would necessitate either a ContextManager base class instead of interface, or some black magic where adding the interface magically adds this method.  (Side note: interface-default-methods would probably help here.)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function exitContext(?Throwable $e): void {
  if ($e) { 
    // Error cleanup
    throw $e;
  } else {
    // Success cleanup
  }

  // Oops, something went wrong.
  throw CMException();

  // Common cleanup

  // $e will get propagated unless this is called.
  $this-&amp;gt;stopPropagation();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Totally wild thought: throw a special &amp;quot;don't throw anything else&amp;quot; exception, which gets special handling.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pro: In the typical case where you want to allow propagation, there's literally nothing to do.  That makes the common case very ergonomic. &lt;br&gt;
Con: Throwing an exception to prevent an exception from being thrown is just... weird.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function exitContext(?Throwable $e): void {
  if ($e) { 
    // Error cleanup
  } else {
    // Success cleanup
  }

  // Oops, something went wrong.
  throw CMException();

  // Common cleanup
  
  // If this line is missing, $e gets rethrown.
  throw new StopPropagationException();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;None of these allow differentiating at runtime between a CM error and an underlying error.  In most it could be differentiated in static analysis, but not at runtime.  Whether or not that is a problem is, I think, an open question.&lt;/p&gt;
&lt;p&gt;The Python PEP for context managers suggests that if one cares, it's possible to avoid &lt;code&gt;using&lt;/code&gt; and call it manually, allowing for that differentiation.  If we use the &lt;code&gt;return $e&lt;/code&gt; approach, a manual/higher-order CM could make the differentiation by calling the CM methods itself, rather than relying on &lt;code&gt;using&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;try {
  $cm = new SomeCM();
  $cv = $cm-&amp;gt;enterContext();
  
  // Do code here.
  
  $e = $cm-&amp;gt;exitContext($e);
  if ($e !== null) {
      // body failed, exit success
  }
} catch (\Throwable $e) {
  // body failed, exit failed too
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However, the whole point of &lt;code&gt;using&lt;/code&gt; blocks is to not need to do that, so if it's a common need, that would be highly sub-optimal.  It also wouldn't be available in the other approaches.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I think a key question to answer here is: Do we care to differentiate between CM errors and underlying errors?  If not being able to do so is a non-issue, or small enough that we don't care, then we have more options.  I'm not sure which of the last 3 I like most/dislike least: &amp;quot;always rethrow&amp;quot;, &amp;quot;call method to suppress&amp;quot;, &amp;quot;throw special to suppress&amp;quot;.  They all have pros and cons.&lt;/p&gt;
&lt;p&gt;If we do care, then we may need to adapt the materialized code and expand the syntax in some way to allow for it.  I'm not sure yet what that would look like.&lt;/p&gt;
&lt;p&gt;I will stop here, however, and ask for input from the audience.  (Not just the regulars in this thread of late, but all of you reading this.)  Including if you have an alternate approach to the three listed above that would have notably fewer cons.&lt;/p&gt;
&lt;p&gt;--Larry Garfield&lt;/p&gt;
</description><guid>3b2b863d-d179-40c9-ad26-8605e854a331@app.fastmail.com</guid><pubDate>Wed, 22 Apr 2026 18:28:15 +0000</pubDate></item><item><title>wiki maintenance</title><link>https://externals.io/message/130684</link><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;TLDR: &lt;a href="http://wiki.php.net" rel="nofollow" target="_blank"&gt;wiki.php.net&lt;/a&gt; will be down for maintenance for about 15 minutes &lt;br&gt;
commencing Thursday April 23rd, 2026, from 13:00 UTC onwards.&lt;/p&gt;
&lt;p&gt;Long form:&lt;/p&gt;
&lt;p&gt;We're upgrading all our machines to a newer Debian (13), which will also &lt;br&gt;
have the benefit of having PHP 8.4 installed. Instead of upgrading &lt;br&gt;
existing machines, we are republishing each website property on a new &lt;br&gt;
VM, and this requires:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;stopping the web server on the old machine&lt;/li&gt;
&lt;li&gt;running a back up of the data (As things might have changed since the &lt;br&gt;
nightly backup run)&lt;/li&gt;
&lt;li&gt;restoring the backup on the new machine&lt;/li&gt;
&lt;li&gt;switching DNS to the new machine, and wait&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As an experiment, at the same time we are also switching to a different &lt;br&gt;
CDN provider for the wiki. This will not give any extra down time, and &lt;br&gt;
if it doesn't work out, changing back to our existing provider will not &lt;br&gt;
cause any downtime either, as the origin server won't be changing at the &lt;br&gt;
same time.&lt;/p&gt;
&lt;p&gt;I will send an email here when the DNS switch has been accomplished, but &lt;br&gt;
it then might take some time with some ISPs for them to refresh their &lt;br&gt;
own caches.&lt;/p&gt;
&lt;p&gt;If you encounter any problem afterwards, please file a ticket at &lt;br&gt;
&lt;a href="https://github.com/php/infrastructure/issues" rel="nofollow" target="_blank"&gt;https://github.com/php/infrastructure/issues&lt;/a&gt; using the &amp;quot;property: wiki&amp;quot; &lt;br&gt;
label.&lt;/p&gt;
&lt;p&gt;cheers, &lt;br&gt;
Derick&lt;/p&gt;
</description><guid>1d1cd2e2-ae36-0909-72ea-1e54676b203c@php.net</guid><pubDate>Wed, 22 Apr 2026 16:26:55 +0000</pubDate></item><item><title>[VOTE] SNMP extension improvements</title><link>https://externals.io/message/130683</link><description>&lt;blockquote&gt;
&lt;p&gt;Il 21/04/2026 14:15, Steven Wilton ha scritto:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I have started voting for the &amp;quot;SNMP Improvements&amp;quot;  RFC&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/snmp_improvements_2026" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/snmp_improvements_2026&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The voting end is 2026-05-08 00:00:00 UTC&lt;/p&gt;
&lt;p&gt;I didn't get any responses to my post regarding discussion of this &lt;br&gt;
RFC, but I'm hoping that the code is straightforward enough that &lt;br&gt;
people can vote on it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think there's a problem with the voting widget.&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I've just changed the closedon/closed flags on the votes.  Is it working &lt;br&gt;
now?&lt;/p&gt;
</description><guid>820e1113-0900-4ee8-b6a2-dbbab7b98529@fluentit.au</guid><pubDate>Wed, 22 Apr 2026 12:22:50 +0000</pubDate></item><item><title>[RFC] Partial Function Application: Handling of Optional Parameters</title><link>https://externals.io/message/130682</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;as part of the design for a “PFA for $this” RFC, Arnaud and I came &lt;br&gt;
across one issue in the original design of PFA that makes it hard to do &lt;br&gt;
the “PFA for $this” follow-up in a way that does not violate user &lt;br&gt;
expectations. Specifically the handling of “optional parameters”. With &lt;br&gt;
the support of Larry as one of the original authors of the PFA RFC, we &lt;br&gt;
would like to propose an amendment to the PFA RFC that is unlikely to &lt;br&gt;
affect real-world use-cases, but that will enable these follow-ups and &lt;br&gt;
that will result in a more predictable behavior overall.&lt;/p&gt;
&lt;p&gt;Please find all details in the RFC at: &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/partial_function_application_optional_placeholder" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/partial_function_application_optional_placeholder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Unless significant discussion happens, I expect the RFC to go to vote in &lt;br&gt;
2 weeks, so that it can be incorporated in the PFA implementation right &lt;br&gt;
away.&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>2cc2c10757984ec617b72cb3f766d04d@bastelstu.be</guid><pubDate>Tue, 21 Apr 2026 17:52:06 +0000</pubDate></item><item><title>[VOTE] SNMP extension improvements</title><link>https://externals.io/message/130681</link><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Il 21/04/2026 14:15, Steven Wilton ha scritto:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I have started voting for the &amp;quot;SNMP Improvements&amp;quot;  RFC&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/snmp_improvements_2026" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/snmp_improvements_2026&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The voting end is 2026-05-08 00:00:00 UTC&lt;/p&gt;
&lt;p&gt;I didn't get any responses to my post regarding discussion of this RFC, &lt;br&gt;
but I'm hoping that the code is straightforward enough that people can &lt;br&gt;
vote on it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think there's a problem with the voting widget.&lt;/p&gt;
&lt;h2&gt;Cheers&lt;/h2&gt;
&lt;p&gt;Matteo&lt;/p&gt;
</description><guid>9c37b8f2-f450-4351-83dd-196393113b6a@beccati.com</guid><pubDate>Tue, 21 Apr 2026 12:37:36 +0000</pubDate></item><item><title>[RFC] Context Managers</title><link>https://externals.io/message/130680</link><description>&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;ol start="3"&gt;
&lt;li&gt;I will say it is weird to have exitContext return an exception; but what happens if an exception is thrown during exitContext? Why not just have it return void and throw if you need to throw instead of having two paths to the same thing?&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;There's a subtle but important difference here: An exception passed through exitContext() is the original exception from lower in the call stack, and its backtrace will be the original location of the error.  An exception thrown from within exitContext() itself indicates a failure that the Context Manager is responsible for, usually an error in the exitContext() logic itself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PHP collects traces when exceptions are constructed, not when they're thrown, so this is a distinction without a difference. From the outside, it's impossible to tell the difference between &amp;quot;return $e;&amp;quot; and &amp;quot;throw $e;&amp;quot;.&lt;/p&gt;
&lt;p&gt;That means you have the following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;throw the passed exception unchanged&lt;/li&gt;
&lt;li&gt;return the passed exception, which is equivalent to throwing it&lt;/li&gt;
&lt;li&gt;throw a new exception, or fail to catch an exception in the cleanup logic, which as Rob points out will hide the passed exception unless you remember to attach it as $previous&lt;/li&gt;
&lt;li&gt;return a new exception, which according to the current RFC text will be completely ignored (is &amp;quot;throw $e&amp;quot; supposed to say &amp;quot;throw $__ret&amp;quot;?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It does seem like it would be more straightforward to have the return value be &amp;quot;void&amp;quot;, and leave it to the implementation to throw or not.&lt;/p&gt;
&lt;p&gt;In practice, as you say, &amp;quot;throw unchanged&amp;quot; will be common, but unless that's the behaviour of a &lt;em&gt;null&lt;/em&gt; return (i.e. the default if not opted out), &amp;quot;throw $e;&amp;quot; seems the natural boilerplate for that.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Rowan Tommins &lt;br&gt;
[IMSoP]&lt;/p&gt;
</description><guid>88716CA9-38E4-45CA-9471-2D8928CF4DE2@rwec.co.uk</guid><pubDate>Tue, 21 Apr 2026 12:16:22 +0000</pubDate></item><item><title>[VOTE] SNMP extension improvements</title><link>https://externals.io/message/130679</link><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I have started voting for the &amp;quot;SNMP Improvements&amp;quot;  RFC&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.php.net/rfc/snmp_improvements_2026" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/snmp_improvements_2026&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The voting end is 2026-05-08 00:00:00 UTC&lt;/p&gt;
&lt;p&gt;I didn't get any responses to my post regarding discussion of this RFC, &lt;br&gt;
but I'm hoping that the code is straightforward enough that people can &lt;br&gt;
vote on it.&lt;/p&gt;
&lt;p&gt;regards&lt;/p&gt;
&lt;p&gt;Steve&lt;/p&gt;
</description><guid>4e8bde4f-039c-4864-a06e-fe9d95cea0b9@fluentit.au</guid><pubDate>Tue, 21 Apr 2026 12:15:47 +0000</pubDate></item><item><title>DocComments for internal functions</title><link>https://externals.io/message/130678</link><description>&lt;p&gt;Am 10.04.2026 um 23:47 schrieb Christian Schneider &lt;a href="mailto:cschneid@cschneid.com"&gt;cschneid@cschneid.com&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Am 10.04.2026 um 17:40 schrieb Derick Rethans &lt;a href="mailto:derick@php.net"&gt;derick@php.net&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Am 10.04.2026 um 12:54 schrieb Gina P. Banyard &lt;a href="mailto:internals@gpb.moe"&gt;internals@gpb.moe&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The implementation can be examined at &lt;br&gt;
&lt;a href="https://github.com/php/php-src/compare/master...chschneider:php-src:internal-functions-doccomments" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/compare/master...chschneider:php-src:internal-functions-doccomments&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I am not &lt;em&gt;fully&lt;/em&gt; convinced that we should add DocComments for internal parameters/functions/classes/constants, as this feels like a lot of complexity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What kind of complexity are you thinking about? Code-wise? Integration into the build process?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm wondering how much this does to increase the size of the PHP compiled binaries.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On my machine it adds about 2M (7%) as the sapi/cli/php binary increases from ~28M to ~30M for a build with default ./configure and &lt;br&gt;
CFLAGS=&amp;quot;-O3 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64&amp;quot;&lt;/p&gt;
&lt;p&gt;I would assume this is mostly in a read-only data section and hence shareable between processes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I checked again for more extensions (end hence more doc comments) enabled and surprisingly the difference was not as big as I first reported.&lt;/p&gt;
&lt;p&gt;Here are the configure options I used: &lt;br&gt;
CFLAGS='-O3 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' &lt;br /&gt;
CXXFLAGS='-O3 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' &lt;br /&gt;
CPPFLAGS='-O3 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' &lt;br /&gt;
'./configure' &lt;br /&gt;
'--enable-bcmath' &lt;br /&gt;
'--enable-debug=no' &lt;br /&gt;
'--enable-exif' &lt;br /&gt;
'--enable-intl' &lt;br /&gt;
'--enable-pcntl' &lt;br /&gt;
'--enable-soap' &lt;br /&gt;
'--with-zip' &lt;br /&gt;
'--enable-mbstring' &lt;br /&gt;
'--with-curl' &lt;br /&gt;
'--with-freetype' &lt;br /&gt;
'--enable-gd' &lt;br /&gt;
'--with-gettext' &lt;br /&gt;
'--with-iconv' &lt;br /&gt;
'--with-jpeg' &lt;br /&gt;
'--with-webp' &lt;br /&gt;
'--with-ldap' &lt;br /&gt;
'--with-mysqli' &lt;br /&gt;
'--with-openssl' &lt;br /&gt;
'--with-pear' &lt;br /&gt;
'--with-pgsql' &lt;br /&gt;
'--with-pdo-mysql' &lt;br /&gt;
'--with-zlib' \&lt;/p&gt;
&lt;p&gt;Result:&lt;/p&gt;
&lt;p&gt;a) No file size difference!? Not 100% what that means:&lt;/p&gt;
&lt;p&gt;$  ls -l php.{master,doccomments} &lt;br&gt;
-rwxrwxr-x 1 cschneid trusted 32287008 Apr 21 10:55 php.doccomments &lt;br&gt;
-rwxrwxr-x 1 cschneid trusted 32287008 Apr 21 10:55 php.master&lt;/p&gt;
&lt;p&gt;b) About 500k difference in the .rodata segment:&lt;/p&gt;
&lt;p&gt;$ diff -u &amp;lt;(eu-size -d -A php.master) &amp;lt;(eu-size -d -A php.doccomments)&lt;/p&gt;
&lt;p&gt;-php.master: &lt;br&gt;
+php.doccomments: &lt;br&gt;
-.text                         8629549              6322432 &lt;br&gt;
+.text                         8629293              6322432 &lt;br&gt;
-.rodata                      14933412             18874368 &lt;br&gt;
+.rodata                      15459140             18874368 &lt;br&gt;
-.eh_frame_hdr                  163060             33807780 &lt;br&gt;
+.eh_frame_hdr                  163052             34333508 &lt;br&gt;
-.eh_frame                      955472             33970840 &lt;br&gt;
+.eh_frame                      955424             34496560 &lt;br&gt;
-Total                        26223763 &lt;br&gt;
+Total                        26749179&lt;/p&gt;
&lt;p&gt;============&lt;/p&gt;
&lt;p&gt;Now so far I got no input in how to proceed: Should I create an RFC or directly a PR?&lt;/p&gt;
&lt;p&gt;I see the following possible outcomes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The whole idea is rejected by the maintainers / community&lt;/li&gt;
&lt;li&gt;The foundation to generate PHP binaries with doc comments for internal functions is added and documented but not enabled&lt;/li&gt;
&lt;li&gt;In addition to 2) before each release the doc comments are generated / updated from the current doc-en repository (and committed?)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Adding doc comments to the source currently requires calling &lt;br&gt;
./build/add_doccomments.php &amp;amp;&amp;amp; ./build/gen_stub.php --force&lt;/p&gt;
&lt;p&gt;The current implementation can be examined at &lt;br&gt;
&lt;a href="https://github.com/php/php-src/compare/master...chschneider:php-src:internal-func-doccomments" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/compare/master...chschneider:php-src:internal-func-doccomments&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I'd appreciate any thoughts,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chris&lt;/li&gt;
&lt;/ul&gt;
</description><guid>A15EC55E-6F48-4FAB-81B8-E1A3B190DF34@cschneid.com</guid><pubDate>Tue, 21 Apr 2026 09:33:41 +0000</pubDate></item><item><title>[RFC] Context Managers</title><link>https://externals.io/message/130677</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-15 16:52, schrieb Larry Garfield:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The finally path is only reached in case of a successful exit.&lt;br /&gt;
Therefore there is no exception to pass in, and thus returning an &lt;br&gt;
exception is meaningless. […]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's not at all how I understood the RFC text (and I admittedly didn't &lt;br&gt;
look at the desugaring):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If exitContext() returns a throwable (either a new one or the one it &lt;br&gt;
was passed), it will be rethrown.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I understood the “it” in “it will be rethrown” as “the returned &lt;br&gt;
Throwable is thrown”, not “the Throwable that was caught is thrown”. &lt;br&gt;
That is also what is mentioned in your email &lt;br&gt;
&lt;a href="https://news-web.php.net/php.internals/130413" rel="nofollow" target="_blank"&gt;https://news-web.php.net/php.internals/130413&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;or a throwable, which will then get thrown&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If there's a reason to wrap and rethrow the exception, do that and &lt;br&gt;
return the new exception&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And that is what the second half of my email &lt;br&gt;
&lt;a href="https://news-web.php.net/php.internals/130479" rel="nofollow" target="_blank"&gt;https://news-web.php.net/php.internals/130479&lt;/a&gt; is based on, particularly &lt;br&gt;
the joke in the footnote. Why has this misunderstanding not been pointed &lt;br&gt;
out back then?&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;So based on the desugaring that Rob thankfully looked at, of all the &lt;br&gt;
information in a &lt;code&gt;?\Throwable&lt;/code&gt; return type, only a single bit is used - &lt;br&gt;
and only in some cases. I don't see how we can meaningfully explain to &lt;br&gt;
users that throwing away all the other information is the expected behavior.&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>6dddead1-cee2-43e6-b943-ca45823f30b9@bastelstu.be</guid><pubDate>Mon, 20 Apr 2026 20:09:36 +0000</pubDate></item><item><title>[RFC] [Discussion] array_get and array_has functions</title><link>https://externals.io/message/130676</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-20 17:18, schrieb Larry Garfield:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Just to make sure we're talking about the same thing here.  Tim, you're &lt;br&gt;
suggesting that this:&lt;/p&gt;
&lt;p&gt;$a = ['foo' =&amp;gt; 'bar']; &lt;br&gt;
$val = array_path_get($a, ['foo', 'bar', 'baz']);&lt;/p&gt;
&lt;p&gt;Should error rather than returning null?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If the array were clearly, consistently, and properly structured, we &lt;br&gt;
could reliably just do $a['foo']['bar'] and move on with life. &lt;br&gt;
[…] &lt;br&gt;
So in that sort of case, I'm not sure it's useful to distinguish &lt;br&gt;
between &amp;quot;There is no baz key on the array at &lt;a href="http://foo.bar" rel="nofollow" target="_blank"&gt;foo.bar&lt;/a&gt;&amp;quot; and &amp;quot;&lt;a href="http://foo.bar" rel="nofollow" target="_blank"&gt;foo.bar&lt;/a&gt; is a &lt;br&gt;
string, not an array, wat?&amp;quot; […]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The goal of the RFC is replacing &lt;code&gt;$a['foo']['bar']&lt;/code&gt; where the &lt;em&gt;path is &lt;br&gt;
dynamic&lt;/em&gt;. Quoting right from the introduction of the RFC:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When the structure of the array is known in advance and the exact &lt;br&gt;
element to retrieve is hardcoded, existing PHP syntax works well […]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And quoting further from the introduction:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;array_path_get() retrieves a value from a deeply nested array and &lt;br&gt;
returns a default value if the path does not exist.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm arguing that a “(value at) path does not exist” is something &lt;br&gt;
fundamentally different from “value encountered on path cannot be &lt;br&gt;
traversed further”.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;converting to an object&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree that the correct solution in the general case is “use a proper &lt;br&gt;
object mapper” (such as Valinor) and don't see much personal value in &lt;br&gt;
having the proposed functions. But if they exist, I would want them to &lt;br&gt;
behave as safely as possible and that includes erroring if they cannot &lt;br&gt;
make sense of the data. Emitting a Warning when encountering an &lt;br&gt;
improperly typed value across the path would also work for me, but I &lt;br&gt;
suppose that others won't be in favor of &lt;em&gt;that&lt;/em&gt; :-)&lt;/p&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>df6ddecef3b8f61583977721dcf9976f@bastelstu.be</guid><pubDate>Mon, 20 Apr 2026 17:04:55 +0000</pubDate></item><item><title>PHP Manual: Including phpc.tv PeerTube on the Tutorial What's Next page</title><link>https://externals.io/message/130675</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;I've proposed an update to the &amp;quot;What's Next&amp;quot; section of the Tutorial in &lt;br&gt;
the PHP Documentation which includes, among other resources, a link to &lt;br&gt;
&lt;a href="https://phpc.tv" rel="nofollow" target="_blank"&gt;https://phpc.tv&lt;/a&gt; - a community run PeerTube video site.&lt;/p&gt;
&lt;p&gt;It's been raised that this should perhaps be discussed on internals &lt;br&gt;
before inclusion.&lt;/p&gt;
&lt;p&gt;PR: &lt;a href="https://github.com/php/doc-en/pull/5491" rel="nofollow" target="_blank"&gt;https://github.com/php/doc-en/pull/5491&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I think it's particularly valuable in this section of the manual because &lt;br&gt;
it fulfills multiple purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Content includes video tutorials, for those who prefer them&lt;/li&gt;
&lt;li&gt;Showcases a variety of current tools, frameworks and libraries&lt;/li&gt;
&lt;li&gt;Advertises podcasts people can follow&lt;/li&gt;
&lt;li&gt;Conference talks (in this regard it effectively replaces &lt;a href="http://talks.php.net" rel="nofollow" target="_blank"&gt;talks.php.net&lt;/a&gt; &lt;br&gt;
on this page, which hasn't had any new talks uploaded in recent years, &lt;br&gt;
and only includes the slides)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PHP site and manual is already including links to wider community &lt;br&gt;
content, such as Composer / Packagist, and various community run sites / &lt;br&gt;
Discords on the &amp;quot;Help&amp;quot; page.&lt;/p&gt;
&lt;p&gt;It's run by prominent community members (under the PHPC Collective[0] &lt;br&gt;
who also run the &lt;a href="http://phpc.social" rel="nofollow" target="_blank"&gt;phpc.social&lt;/a&gt; Mastodon ) and I know that Anna Filina &lt;br&gt;
specifically is one of the people working directly on it[1].&lt;/p&gt;
&lt;p&gt;Given who runs it, I consider it a safe resource that's likely to show &lt;br&gt;
up-to-date content for a significant amount of time.&lt;/p&gt;
&lt;p&gt;Does anyone feel &lt;a href="https://phpc.tv" rel="nofollow" target="_blank"&gt;https://phpc.tv&lt;/a&gt; should not be included in the official &lt;br&gt;
documentation here? Other thoughts?&lt;/p&gt;
&lt;p&gt;(Any further suggestions for the revised What's Next page are welcome too)&lt;/p&gt;
&lt;p&gt;[0] &lt;a href="https://opencollective.com/phpcommunity/projects/phpc-social" rel="nofollow" target="_blank"&gt;https://opencollective.com/phpcommunity/projects/phpc-social&lt;/a&gt; &lt;br&gt;
[1] &lt;a href="https://afilina.com/why-phpc-tv" rel="nofollow" target="_blank"&gt;https://afilina.com/why-phpc-tv&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This makes sense to me, and I support linking to &lt;a href="http://phpc.tv" rel="nofollow" target="_blank"&gt;phpc.tv&lt;/a&gt;.  Perhaps as a v2, the Foundation could create an account on there and create curated playlists of already existing content that can be linked to?  (And those playlists can be easily updated over time as the language changes and different things become relevant or out of date.)&lt;/p&gt;
&lt;p&gt;--Larry Garfield&lt;/p&gt;
</description><guid>e3286e1f-6d10-428d-a5ec-5f79bf40a7b4@app.fastmail.com</guid><pubDate>Mon, 20 Apr 2026 15:20:42 +0000</pubDate></item><item><title>[RFC] [Discussion] array_get and array_has functions</title><link>https://externals.io/message/130674</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-18 08:06, schrieb Barel:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I am still unconvinced about this. Your proposal seems to give the &lt;br&gt;
&lt;code&gt;null&lt;/code&gt; &lt;br&gt;
a special value and I think that in general the full semantics are less&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;null being a value indicating absence is by no means “special” in my &lt;br&gt;
suggestion. As previously mentioned, it's the semantics of &lt;code&gt;isset()&lt;/code&gt;. &lt;br&gt;
It's also what &lt;code&gt;array_find()&lt;/code&gt; and &lt;code&gt;array_find_key()&lt;/code&gt; return. It has &lt;br&gt;
special syntax in types with the questionmark in &lt;code&gt;?Type&lt;/code&gt;. It's what you &lt;br&gt;
get when you read a non-existent value.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;clear. And I don't really like the function throwing errors for paths, &lt;br&gt;
I &lt;br&gt;
think that this function is great for defensive access to values, where &lt;br&gt;
you &lt;br&gt;
can be sure that you don't need to be checking the path all the time. &lt;br&gt;
The&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Defensive access to me also implies throwing errors &lt;em&gt;where appropriate&lt;/em&gt;, &lt;br&gt;
namely trying to perform an operation that is not meaningful. Trying to &lt;br&gt;
access an array offset on a string is not meaningful and trying to do &lt;br&gt;
&lt;em&gt;something&lt;/em&gt; is not likely what the user intended to do. Similarly users &lt;br&gt;
passing in &lt;code&gt;ArrayAccess&lt;/code&gt; objects might reasonably expect them to “just &lt;br&gt;
work”. Returning a default value instead of a clear error will likely &lt;br&gt;
lead to them thinking they found a bug in PHP.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Just to make sure we're talking about the same thing here.  Tim, you're suggesting that this:&lt;/p&gt;
&lt;p&gt;$a = ['foo' =&amp;gt; 'bar']; &lt;br&gt;
$val = array_path_get($a, ['foo', 'bar', 'baz']);&lt;/p&gt;
&lt;p&gt;Should error rather than returning null?&lt;/p&gt;
&lt;p&gt;If so, then I do not agree.  The purpose of these functions, as I see it, is for dealing with inconsistently structured, wonky, arguably stupidly-designed data.  (Which is a lot of REST APIs in the wild, sadly.)  If the array were clearly, consistently, and properly structured, we could reliably just do $a['foo']['bar'] and move on with life.  Or trivially convert it to a properly typed object.  These functions are for cases where those are not viable or convenient options, meaning cases where a given value could be a string or an array, because the data model author hates you.  (As noted in a previous reply, I have run into such structures where the value of a JSON key is string|string{}.  It bloody well sucks.)&lt;/p&gt;
&lt;p&gt;So in that sort of case, I'm not sure it's useful to distinguish between &amp;quot;There is no baz key on the array at &lt;a href="http://foo.bar" rel="nofollow" target="_blank"&gt;foo.bar&lt;/a&gt;&amp;quot; and &amp;quot;&lt;a href="http://foo.bar" rel="nofollow" target="_blank"&gt;foo.bar&lt;/a&gt; is a string, not an array, wat?&amp;quot;  If that was a distinction that mattered, I'd be using ?? or converting to an object or whatever else already.&lt;/p&gt;
&lt;p&gt;--Larry Garfield&lt;/p&gt;
</description><guid>8dca7d45-fce4-4d6a-ac56-956046ef20a6@app.fastmail.com</guid><pubDate>Mon, 20 Apr 2026 15:18:16 +0000</pubDate></item><item><title>PQC readiness beyond OpenSSL/sodium</title><link>https://externals.io/message/130673</link><description>&lt;p&gt;Hi!&lt;/p&gt;
&lt;p&gt;I recently read Paragon Initiative's post &amp;quot;Post-Quantum Cryptography for &lt;br&gt;
the PHP Community&amp;quot; [1] and have been following the broader PQC &lt;br&gt;
discussions, particularly Google's and Cloudflare's migration timelines, &lt;br&gt;
which seem to be pulling the industry's expectations forward quite a bit.&lt;/p&gt;
&lt;p&gt;I want to stress upfront: I am not a security expert, and this question &lt;br&gt;
may be naive. I'm asking to understand whether there's anything that needs &lt;br&gt;
to be done on the language/runtime side.&lt;/p&gt;
&lt;p&gt;My working assumption has been that the heavy lifting for PQC in PHP will &lt;br&gt;
come through the libraries that ext/openssl and ext/sodium wrap, in other &lt;br&gt;
words, that once OpenSSL ships stable ML-KEM / ML-DSA / hybrid primitives &lt;br&gt;
and libsodium follows suit, exposing them in PHP is largely a matter of &lt;br&gt;
binding new functions and constants, similar to how past algorithms were &lt;br&gt;
added. Paragon's ext-pqcrypto and pqcrypto_compat seem to cover the gap in &lt;br&gt;
the meantime.&lt;/p&gt;
&lt;p&gt;What I'm less sure about is whether there are PHP-specific concerns beyond &lt;br&gt;
&amp;quot;wait for the libraries.&amp;quot; A few things I've wondered about, though I may &lt;br&gt;
be framing them wrong:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Whether the substantially larger key/signature/ciphertext sizes of PQC &lt;br&gt;
algorithms interact badly with any internal assumptions in PHP (string &lt;br&gt;
handling is presumably fine, but things like stream buffer defaults, &lt;br&gt;
TLS-related INI defaults, or session serialization come to mind).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Whether anything in the bundled extensions that does its own crypto &lt;br&gt;
(PHAR signatures, password_hash, openssl_* wrappers, PHP's own TLS stream &lt;br&gt;
context options) will need design-level decisions rather than just new &lt;br&gt;
constants — e.g., how hybrid KEMs get surfaced in stream contexts, or &lt;br&gt;
whether PHAR will gain PQ signature support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Whether there's an expectation that PHP tracks a minimum OpenSSL version &lt;br&gt;
that supports PQC by some date, and what that might mean for distros.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Whether any of this warrants an RFC-level discussion now rather than &lt;br&gt;
closer to 2029.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Is any of the above already being tracked or discussed? Are there concerns &lt;br&gt;
I'm missing entirely? I'd rather ask a possibly-dumb question now than &lt;br&gt;
find out in 2028 that something obvious was overlooked. :-)&lt;/p&gt;
&lt;p&gt;Thanks for your time, &lt;br&gt;
Sebastian&lt;/p&gt;
&lt;p&gt;-- &lt;br&gt;
Sebastian Bergmann                                 &lt;a href="https://phpunit.expert" rel="nofollow" target="_blank"&gt;https://phpunit.expert&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Stay up to date with PHPUnit: &lt;a href="https://phpunit.expert/newsletter" rel="nofollow" target="_blank"&gt;https://phpunit.expert/newsletter&lt;/a&gt;&lt;/p&gt;
</description><guid>3a29a00b-6841-4af7-b1db-848d9e42b7da@phpunit.de</guid><pubDate>Mon, 20 Apr 2026 13:47:06 +0000</pubDate></item><item><title>[IDEA for RFC] class_uses and optionally returning traits for parent classes</title><link>https://externals.io/message/130672</link><description>&lt;blockquote&gt;
&lt;p&gt;I think that &lt;code&gt;class_uses()&lt;/code&gt; should never have been implemented, because &lt;br&gt;
it gives a false sense of symmetry with &lt;code&gt;class_implements()&lt;/code&gt; and &lt;br&gt;
&lt;code&gt;class_parents()&lt;/code&gt;. Implemented interfaces and parent classes can be used &lt;br&gt;
as types on the corresponding object (and types are inherited), while &lt;br&gt;
used traits cannot. Those are fundamentally different concepts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I agree&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If, for some reason, you want to “cheat” and use traits as if they were &lt;br&gt;
inherited types, you are free to do that, but I don’t think that PHP &lt;br&gt;
should provide a built-in function that goes beyond what traits are &lt;br&gt;
intended for. &lt;br&gt;
That won't even work reliably. You can rename trait methods and override &lt;br&gt;
them with methods with incompatible signatures and do other similar &lt;br&gt;
stuff to make this use case a nightmare.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Therefore this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;and then where needed checking for the existence of &lt;br&gt;
the trait to tell if the functionality is supported or not (think &lt;br&gt;
along the lines of if a trait could implement an interface).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;is totally impossible to do. A trait with a method does not guarantee &lt;br&gt;
you that the method is available.&lt;/p&gt;
&lt;p&gt;Anton&lt;/p&gt;
</description><guid>TY1PPF18F5FBD30DC31E19A20A2639119CEDB2F2@TY1PPF18F5FBD30.apcprd04.prod.outlook.com</guid><pubDate>Mon, 20 Apr 2026 11:54:29 +0000</pubDate></item><item><title>[IDEA for RFC] class_uses and optionally returning traits for parent classes</title><link>https://externals.io/message/130671</link><description>&lt;blockquote&gt;
&lt;p&gt;Le 19 avr. 2026 à 21:01, Robert Humphries &lt;a href="mailto:contact@developer-rob.co.uk"&gt;contact@developer-rob.co.uk&lt;/a&gt; a écrit :&lt;/p&gt;
&lt;p&gt;I think this is &lt;br&gt;
the strongest argument for making such a change to &lt;code&gt;class_uses&lt;/code&gt; - &lt;br&gt;
currently it is inconsistent with the other SPL functions (and I &lt;br&gt;
wouldn't say that modifying the function is going to cause millions of &lt;br&gt;
developers to start using the function, it is more about making the &lt;br&gt;
behaviour a little more consistent).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think that &lt;code&gt;class_uses()&lt;/code&gt; should never have been implemented, because it gives a false sense of symmetry with &lt;code&gt;class_implements()&lt;/code&gt; and &lt;code&gt;class_parents()&lt;/code&gt;. Implemented interfaces and parent classes can be used as types on the corresponding object (and types are inherited), while used traits cannot. Those are fundamentally different concepts.&lt;/p&gt;
&lt;p&gt;If, for some reason, you want to “cheat” and use traits as if they were inherited types, you are free to do that, but I don’t think that PHP should provide a built-in function that goes beyond what traits are intended for.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(As a quick side note, what I am really looking for proposal 2 from &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/traits-with-interfaces" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/traits-with-interfaces&lt;/a&gt; (or a form of &lt;code&gt;trait&lt;/code&gt; &lt;br&gt;
that does this) and then using traits with interfaces for composition, &lt;br&gt;
however from what I can see on activity such as GH-11435 technical &lt;br&gt;
reasons mean this isn't likely to proceed).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;See also &lt;a href="https://wiki.php.net/rfc/interface-default-methods" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/interface-default-methods&lt;/a&gt;, which is, I think, what is really needed.&lt;/p&gt;
&lt;p&gt;—Claude&lt;/p&gt;
</description><guid>0AC29ACC-3CC5-4285-B5AF-093DD022253B@gmail.com</guid><pubDate>Mon, 20 Apr 2026 09:32:03 +0000</pubDate></item><item><title>[RFC][Discussion] Add MariaDB-specific features to mysqlnd and mysqli</title><link>https://externals.io/message/130670</link><description>&lt;p&gt;Hi Robert,&lt;/p&gt;
&lt;p&gt;When I designed and wrote mysqli (and parts of libmysql 4.1) nearly 25 &lt;br&gt;
years ago, the computing landscape was fundamentally different. Memory was &lt;br&gt;
a severe constraint; allocating large buffers to send data all at once was &lt;br&gt;
often impossible. This necessitated the use of mysql_stmt_send_long_data to &lt;br&gt;
stream larger BLOBs in portions—which was a primary reason for requiring &lt;br&gt;
the explicit types specification in mysqli_stmt::bind_param.&lt;/p&gt;
&lt;p&gt;Furthermore, CPU power was significantly more limited. The overhead of &lt;br&gt;
converting types between the client and server was expensive. By providing &lt;br&gt;
explicit type hints (like &amp;quot;isss&amp;quot;), we gave the engine a shortcut, bypassing &lt;br&gt;
the need for the driver to &amp;quot;guess&amp;quot; or perform trial-and-error casts, thus &lt;br&gt;
saving precious cycles at both ends of the connection.&lt;/p&gt;
&lt;p&gt;Twenty-five years later, the landscape has evolved. Physical memory is &lt;br&gt;
rarely the bottleneck; we are now primarily limited by the &lt;br&gt;
max_allowed_packet size. Modern hardware and the maturity of libraries mean &lt;br&gt;
that the CPU cost of internal type-juggling is now negligible for the vast &lt;br&gt;
majority of applications.&lt;/p&gt;
&lt;p&gt;However, we must avoid the &amp;quot;sledgehammer&amp;quot; approach of deprecation. In &lt;br&gt;
high-speed, high-concurency environments where packet size and execution &lt;br&gt;
speed remain fundamental requirements, the ability to explicitly define &lt;br&gt;
types is still important. It allows for the most efficient binary &lt;br&gt;
serialization possible, which is critical for the &amp;quot;power-user&amp;quot; tier of the &lt;br&gt;
PHP ecosystem.&lt;/p&gt;
&lt;p&gt;/Georg&lt;/p&gt;
&lt;p&gt;On Sun, Apr 19, 2026 at 3:45 PM Robert Humphries &amp;lt; &lt;br&gt;
&lt;a href="mailto:contact@developer-rob.co.uk" rel="nofollow" target="_blank"&gt;contact@developer-rob.co.uk&lt;/a&gt;&amp;gt; wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Despite your convincing arguments for better network utilization by &lt;br&gt;
providing the types, I still think we should not offer the possibility &lt;br&gt;
of specifying the types. I don't know what other PHP developers on &lt;br&gt;
this mailing list think about it, but for me the type feature goes &lt;br&gt;
against the nature of PHP. Making the parameter optional is very good &lt;br&gt;
choice and eases my concerns slightly, so if I am outnumbered in my &lt;br&gt;
opinion, I won't be upset. &lt;br&gt;
The number of mysqli users grows increasingly smaller. Out of this, &lt;br&gt;
the number of people who will use execute_many and who will need to &lt;br&gt;
optimize for TINYINT is unbelievably tiny. Any string easily &lt;br&gt;
overshadows the numerical data. Thus, this feature won't see much &lt;br&gt;
legitimate use.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think the risk here is that currently the &lt;code&gt;types&lt;/code&gt; parameter is &lt;br&gt;
supported in existing code (via &lt;code&gt;bind_param&lt;/code&gt;); and it is not &lt;br&gt;
deprecated / no warnings exist on its usage in the manual. I think &lt;br&gt;
having the parameter in new code be optional was a sensible change; &lt;br&gt;
but until &lt;code&gt;mysqli_stmt::bind_param&lt;/code&gt; is deprecated or the &lt;code&gt;types&lt;/code&gt; &lt;br&gt;
parameter is removed there; allowing users to specify the types in new &lt;br&gt;
functions where there is a benefit to doing so (even if only a small &lt;br&gt;
number of people will use the benefit) makes sense to do unless there &lt;br&gt;
are technical or other reasons not to. If setting types for a prepared &lt;br&gt;
statement shouldn't be done in PHP, then where that currently can be &lt;br&gt;
done should be deprecated and in the future removed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;-- &lt;br&gt;
Georg Richter, Staff Software Engineer &lt;br&gt;
Client Connectivity &lt;br&gt;
MariaDB Corporation Ab&lt;/p&gt;
</description><guid>CAANVRFiN9t_kLyQjmHomGYNZ-w6F5uq_tw5ufKB66RKXP9Yb0g@mail.gmail.com</guid><pubDate>Sun, 19 Apr 2026 21:07:15 +0000</pubDate></item><item><title>[IDEA for RFC] class_uses and optionally returning traits for parent classes</title><link>https://externals.io/message/130669</link><description>&lt;p&gt;Sorry for the delay here, been quite busy with other work related tasks.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Frankly I don't like the existence of these 3 functions in SPL. &lt;br&gt;
This is very much in Reflection territory, and it should only ever be in Reflection. &lt;br&gt;
SPL is already a mess of badly designed &amp;quot;features&amp;quot; trying to cohabitate. &lt;br&gt;
The Reflection extension is designed to give you access to do introspection with a well-defined API.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don't necessarily disagree with this, especially about SPL in &lt;br&gt;
general; however we are at a point where we have them currently (and &lt;br&gt;
the functions are not deprecated/warned against use/etc). That said, I &lt;br&gt;
certainly wouldn't be suggesting adding the function if it didn't &lt;br&gt;
already exist.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But more over I don't even think you addition makes that much sense. &lt;br&gt;
Traits are not part of the inheritance hierarchy, that's because the &amp;quot;composition&amp;quot; of traits is effectively just copy and paste. &lt;br&gt;
Interfaces are fully inherited onto any child class, so there is no need to iterate through the parents to gather all interfaces. &lt;br&gt;
Traits do not work this way, any &amp;quot;prior&amp;quot; use information is not transmitted due to the copy and paste nature of them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Note with this, the same constraints apply to parent classes in terms &lt;br&gt;
of the information stored in C - and &lt;code&gt;ReflectionClass&lt;/code&gt; will return &lt;br&gt;
only the parent as opposed to grandparents/etc; but &lt;code&gt;class_parents&lt;/code&gt; &lt;br&gt;
returns the parent class / grandparent class / etc. I think this is &lt;br&gt;
the strongest argument for making such a change to &lt;code&gt;class_uses&lt;/code&gt; - &lt;br&gt;
currently it is inconsistent with the other SPL functions (and I &lt;br&gt;
wouldn't say that modifying the function is going to cause millions of &lt;br&gt;
developers to start using the function, it is more about making the &lt;br&gt;
behaviour a little more consistent).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The current API doesn't even tell you if used traits also use other traits. &lt;br&gt;
As per your example, &lt;code&gt;ReflectionClass::getTraits&lt;/code&gt; also does not tell &lt;br&gt;
you about any traits used by other traits, you need to query the &lt;br&gt;
ReflectionClass for the trait returned by 'getTraits'. &lt;code&gt;class_uses&lt;/code&gt; &lt;br&gt;
will also accept a trait for &lt;code&gt;$object_or_class&lt;/code&gt;, returning the traits &lt;br&gt;
that trait uses. I would suggest that if a change was made to &lt;br&gt;
class_uses to support optionally returning inherited traits then it &lt;br&gt;
returning traits used on traits or the parent class would make sense.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I don't even know how it handles trait aliases, or if it even cares about them. &lt;br&gt;
And that's not even going through overridden trait methods/props/constants at any stage of the inheritance chain. &lt;br&gt;
&lt;code&gt;class_uses&lt;/code&gt; seems to just return the names of the traits (mirroring &lt;br&gt;
&lt;code&gt;getTraitNames&lt;/code&gt; on &lt;code&gt;ReflectionClass&lt;/code&gt; as far as I can tell).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;So I'm very much not convinced about this, nor do I see really the utility of wanting this information? &lt;br&gt;
But anyway here is a small snippet that will fetch all used traits: &lt;a href="https://3v4l.org/kvQGR" rel="nofollow" target="_blank"&gt;https://3v4l.org/kvQGR&lt;/a&gt; &lt;br&gt;
In a private / tightly controlled codebase we are using a set of &lt;br&gt;
traits to implement certain functionality at a higher level in the &lt;br&gt;
inheritance chain; and then where needed checking for the existence of &lt;br&gt;
the trait to tell if the functionality is supported or not (think &lt;br&gt;
along the lines of if a trait could implement an interface). There are &lt;br&gt;
various reasons why it isn't easily possible to use interfaces &lt;br&gt;
directly on the relevant classes themselves in the particular codebase &lt;br&gt;
(mainly related to refactoring work required as opposed to technical &lt;br&gt;
reasons) - currently we have gone with a reduced version of the &lt;br&gt;
example code (as we only need to know the names of traits implemented &lt;br&gt;
by the classes as opposed to from traits using traits for our exact &lt;br&gt;
use-case).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(As a quick side note, what I am really looking for proposal 2 from &lt;br&gt;
&lt;a href="https://wiki.php.net/rfc/traits-with-interfaces" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/traits-with-interfaces&lt;/a&gt; (or a form of &lt;code&gt;trait&lt;/code&gt; &lt;br&gt;
that does this) and then using traits with interfaces for composition, &lt;br&gt;
however from what I can see on activity such as GH-11435 technical &lt;br&gt;
reasons mean this isn't likely to proceed).&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I guess the important questions is that regardless of the people's &lt;br&gt;
thoughts on the functions themselves, what are the &lt;br&gt;
benefits/disadvantages of making the change to the pre-existing &lt;br&gt;
function (and if there are more benefits compared to disadvantages, do &lt;br&gt;
those benefits justify introducing the change)? The example code &lt;br&gt;
proves that the information can be gained from userland code; but the &lt;br&gt;
code isn't a straight forward example - and I suspect it is a lot &lt;br&gt;
slower (however you are not likely to do a large number of calls to &lt;br&gt;
the userland or internals code). I still think personally is the &lt;br&gt;
biggest benefit is it brings the behaviour of the three &lt;code&gt;class_XXXX&lt;/code&gt; &lt;br&gt;
functions in SPL fully inline with each other (that they all return &lt;br&gt;
the parents/interfaces/traits that the class or any related &lt;br&gt;
classes/traits use); and I am not seeing any disadvantages except that &lt;br&gt;
the change not necessary (but I don't think any implementation would &lt;br&gt;
be complex or hard to maintain - my thoughts here would it would &lt;br&gt;
basically be the &lt;code&gt;while&lt;/code&gt; in &lt;code&gt;php_spl.c&lt;/code&gt; lines 125-128 (in &lt;br&gt;
&lt;code&gt;class_parents&lt;/code&gt;) plus if it was decided to include traits included by &lt;br&gt;
traits then a similar check or recursive call to get traits used by &lt;br&gt;
each trait in the array).&lt;/p&gt;
</description><guid>CADjdLZ+BueegAdq6mOC401kku+WK-pgi30Nqi60BX6F83qHdUw@mail.gmail.com</guid><pubDate>Sun, 19 Apr 2026 19:01:40 +0000</pubDate></item><item><title>PHP Manual: Including phpc.tv PeerTube on the Tutorial What's Next page</title><link>https://externals.io/message/130668</link><description>&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;I've proposed an update to the &amp;quot;What's Next&amp;quot; section of the Tutorial in &lt;br&gt;
the PHP Documentation which includes, among other resources, a link to &lt;br&gt;
&lt;a href="https://phpc.tv" rel="nofollow" target="_blank"&gt;https://phpc.tv&lt;/a&gt; - a community run PeerTube video site.&lt;/p&gt;
&lt;p&gt;It's been raised that this should perhaps be discussed on internals &lt;br&gt;
before inclusion.&lt;/p&gt;
&lt;p&gt;PR: &lt;a href="https://github.com/php/doc-en/pull/5491" rel="nofollow" target="_blank"&gt;https://github.com/php/doc-en/pull/5491&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I think it's particularly valuable in this section of the manual because &lt;br&gt;
it fulfills multiple purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Content includes video tutorials, for those who prefer them&lt;/li&gt;
&lt;li&gt;Showcases a variety of current tools, frameworks and libraries&lt;/li&gt;
&lt;li&gt;Advertises podcasts people can follow&lt;/li&gt;
&lt;li&gt;Conference talks (in this regard it effectively replaces &lt;a href="http://talks.php.net" rel="nofollow" target="_blank"&gt;talks.php.net&lt;/a&gt; &lt;br&gt;
on this page, which hasn't had any new talks uploaded in recent years, &lt;br&gt;
and only includes the slides)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PHP site and manual is already including links to wider community &lt;br&gt;
content, such as Composer / Packagist, and various community run sites / &lt;br&gt;
Discords on the &amp;quot;Help&amp;quot; page.&lt;/p&gt;
&lt;p&gt;It's run by prominent community members (under the PHPC Collective[0] &lt;br&gt;
who also run the &lt;a href="http://phpc.social" rel="nofollow" target="_blank"&gt;phpc.social&lt;/a&gt; Mastodon ) and I know that Anna Filina &lt;br&gt;
specifically is one of the people working directly on it[1].&lt;/p&gt;
&lt;p&gt;Given who runs it, I consider it a safe resource that's likely to show &lt;br&gt;
up-to-date content for a significant amount of time.&lt;/p&gt;
&lt;p&gt;Does anyone feel &lt;a href="https://phpc.tv" rel="nofollow" target="_blank"&gt;https://phpc.tv&lt;/a&gt; should not be included in the official &lt;br&gt;
documentation here? Other thoughts?&lt;/p&gt;
&lt;p&gt;(Any further suggestions for the revised What's Next page are welcome too)&lt;/p&gt;
&lt;p&gt;[0] &lt;a href="https://opencollective.com/phpcommunity/projects/phpc-social" rel="nofollow" target="_blank"&gt;https://opencollective.com/phpcommunity/projects/phpc-social&lt;/a&gt; &lt;br&gt;
[1] &lt;a href="https://afilina.com/why-phpc-tv" rel="nofollow" target="_blank"&gt;https://afilina.com/why-phpc-tv&lt;/a&gt;&lt;/p&gt;
</description><guid>d5b32f9b-a45a-451b-b37c-5dd145f78541@allenjb.me.uk</guid><pubDate>Sun, 19 Apr 2026 16:17:08 +0000</pubDate></item><item><title>[RFC] [Discussion] array_get and array_has functions</title><link>https://externals.io/message/130667</link><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-18 08:06, schrieb Barel:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;array_path_exists&lt;/code&gt;. I have preferred to keep &lt;code&gt;get&lt;/code&gt; in the function &lt;br&gt;
name &lt;br&gt;
because I think that &lt;code&gt;array_path&lt;/code&gt; is less clear about what the function &lt;br&gt;
does. RFC and implementation have been updated.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;No strong preference regarding the &lt;code&gt;_get()&lt;/code&gt; suffix from my side.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I am still unconvinced about this. Your proposal seems to give the &lt;br&gt;
&lt;code&gt;null&lt;/code&gt; &lt;br&gt;
a special value and I think that in general the full semantics are less&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;null being a value indicating absence is by no means “special” in my &lt;br&gt;
suggestion. As previously mentioned, it's the semantics of &lt;code&gt;isset()&lt;/code&gt;. &lt;br&gt;
It's also what &lt;code&gt;array_find()&lt;/code&gt; and &lt;code&gt;array_find_key()&lt;/code&gt; return. It has &lt;br&gt;
special syntax in types with the questionmark in &lt;code&gt;?Type&lt;/code&gt;. It's what you &lt;br&gt;
get when you read a non-existent value.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;clear. And I don't really like the function throwing errors for paths, &lt;br&gt;
I &lt;br&gt;
think that this function is great for defensive access to values, where &lt;br&gt;
you &lt;br&gt;
can be sure that you don't need to be checking the path all the time. &lt;br&gt;
The&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Defensive access to me also implies throwing errors &lt;em&gt;where appropriate&lt;/em&gt;, &lt;br&gt;
namely trying to perform an operation that is not meaningful. Trying to &lt;br&gt;
access an array offset on a string is not meaningful and trying to do &lt;br&gt;
&lt;em&gt;something&lt;/em&gt; is not likely what the user intended to do. Similarly users &lt;br&gt;
passing in &lt;code&gt;ArrayAccess&lt;/code&gt; objects might reasonably expect them to “just &lt;br&gt;
work”. Returning a default value instead of a clear error will likely &lt;br&gt;
lead to them thinking they found a bug in PHP.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;existing implementations in Laravel and Lodash do not throw any error &lt;br&gt;
if an &lt;br&gt;
intermediate value is not an array (or object for Lodash) and instead &lt;br&gt;
return the default, so I think it is best to keep this behaviour&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don't think that lodash is quite comparable here, because JavaScript &lt;br&gt;
is quite different to PHP in that &lt;em&gt;everything&lt;/em&gt; is an object. Thus &lt;br&gt;
&lt;code&gt;_.get({&amp;quot;foo&amp;quot;: &amp;quot;bar&amp;quot;}, &amp;quot;foo.length.toString&amp;quot;)&lt;/code&gt; is meaningful (namely it &lt;br&gt;
returns &lt;code&gt;Number.prototype.toString()&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;As for the Laravel comparison, from what I see, they &lt;em&gt;do&lt;/em&gt; support any &lt;br&gt;
&lt;code&gt;ArrayAccess&lt;/code&gt;, so the function is also not comparable.&lt;/p&gt;
&lt;p&gt;I've also taken another look at the RFC and have the following &lt;br&gt;
additional comments:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The “Invalid array path segments” example is outdated, &lt;code&gt;stdClass&lt;/code&gt; in &lt;br&gt;
the path should throw.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The types of the path-segments should be pre-validated for consistent &lt;br&gt;
error reporting. Meaning:&lt;/p&gt;
&lt;p&gt;array_path_get($array, ['foo', 'bar', new stdClass()])&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;should consistently throw, independent of whether &lt;code&gt;$array&lt;/code&gt; is &lt;code&gt;[]&lt;/code&gt;, &lt;br&gt;
&lt;code&gt;[&amp;quot;foo&amp;quot; =&amp;gt; []]&lt;/code&gt;, &lt;code&gt;[&amp;quot;foo&amp;quot; =&amp;gt; [&amp;quot;bar&amp;quot; =&amp;gt; []]&lt;/code&gt; or something else.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I also wonder if &lt;code&gt;$path&lt;/code&gt; should just be &lt;code&gt;string[]&lt;/code&gt; instead of &lt;br&gt;
&lt;code&gt;(int|string)[]&lt;/code&gt;. In the context of array keys, &lt;code&gt;&amp;quot;123&amp;quot;&lt;/code&gt; is equivalent to &lt;br&gt;
&lt;code&gt;123&lt;/code&gt; anyways.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Best regards &lt;br&gt;
Tim Düsterhus&lt;/p&gt;
</description><guid>4f684a4fbad3a7ddb797e24e3c1a882a@bastelstu.be</guid><pubDate>Sun, 19 Apr 2026 15:06:19 +0000</pubDate></item><item><title>[RFC][Discussion] Add MariaDB-specific features to mysqlnd and mysqli</title><link>https://externals.io/message/130666</link><description>&lt;blockquote&gt;
&lt;p&gt;Despite your convincing arguments for better network utilization by &lt;br&gt;
providing the types, I still think we should not offer the possibility &lt;br&gt;
of specifying the types. I don't know what other PHP developers on &lt;br&gt;
this mailing list think about it, but for me the type feature goes &lt;br&gt;
against the nature of PHP. Making the parameter optional is very good &lt;br&gt;
choice and eases my concerns slightly, so if I am outnumbered in my &lt;br&gt;
opinion, I won't be upset. &lt;br&gt;
The number of mysqli users grows increasingly smaller. Out of this, &lt;br&gt;
the number of people who will use execute_many and who will need to &lt;br&gt;
optimize for TINYINT is unbelievably tiny. Any string easily &lt;br&gt;
overshadows the numerical data. Thus, this feature won't see much &lt;br&gt;
legitimate use.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think the risk here is that currently the &lt;code&gt;types&lt;/code&gt; parameter is &lt;br&gt;
supported in existing code (via &lt;code&gt;bind_param&lt;/code&gt;); and it is not &lt;br&gt;
deprecated / no warnings exist on its usage in the manual. I think &lt;br&gt;
having the parameter in new code be optional was a sensible change; &lt;br&gt;
but until &lt;code&gt;mysqli_stmt::bind_param&lt;/code&gt; is deprecated or the &lt;code&gt;types&lt;/code&gt; &lt;br&gt;
parameter is removed there; allowing users to specify the types in new &lt;br&gt;
functions where there is a benefit to doing so (even if only a small &lt;br&gt;
number of people will use the benefit) makes sense to do unless there &lt;br&gt;
are technical or other reasons not to. If setting types for a prepared &lt;br&gt;
statement shouldn't be done in PHP, then where that currently can be &lt;br&gt;
done should be deprecated and in the future removed.&lt;/p&gt;
</description><guid>CADjdLZ+VY8A-LY2vSKm3YOcMrTswsX4763q3kSTC20pFT1BJWw@mail.gmail.com</guid><pubDate>Sun, 19 Apr 2026 13:44:48 +0000</pubDate></item><item><title>[RFC] [Discussion] `#[\Override]` for class constants</title><link>https://externals.io/message/130665</link><description>&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;I have updated the RFC to resolve the open issue about &lt;code&gt;#[\Override]&lt;/code&gt; on &lt;br&gt;
enum cases - when marked with &lt;code&gt;#[\Override]&lt;/code&gt;, the enum case must be &lt;br&gt;
overriding an inherited class constant. The fact that this is so uncommon &lt;br&gt;
makes it all the more important that when it is intentional, it can be made &lt;br&gt;
clear.&lt;/p&gt;
&lt;p&gt;This qualifies as a &amp;quot;major change&amp;quot; to the RFC and triggers a 14 day &lt;br&gt;
cooldown period.&lt;/p&gt;
&lt;p&gt;-Daniel&lt;/p&gt;
&lt;p&gt;On Mon, Mar 30, 2026 at 4:36 PM Daniel Scherzer &lt;a href="mailto:daniel.e.scherzer@gmail.com"&gt;daniel.e.scherzer@gmail.com&lt;/a&gt; &lt;br&gt;
wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;I'd like to start the discussion for a new RFC about adding support for &lt;br&gt;
&lt;code&gt;#[\Override]&lt;/code&gt; for class constants.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RFC: &lt;a href="https://wiki.php.net/rfc/override_constants" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/override_constants&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Implementation: &lt;a href="https://github.com/php/php-src/pull/20478" rel="nofollow" target="_blank"&gt;https://github.com/php/php-src/pull/20478&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'd also like to draw specific attention to the open question, which I am &lt;br&gt;
soliciting feedback on: how should &lt;code&gt;#[\Override]&lt;/code&gt; work for enum cases? See &lt;br&gt;
the RFC page for details.&lt;/p&gt;
&lt;p&gt;Thanks, &lt;br&gt;
-Daniel&lt;/p&gt;
&lt;/blockquote&gt;
</description><guid>CALaXqqTdLxB8+61oLUKvSOaFQMrMOeD=p3TTtvDc-592ywpXhA@mail.gmail.com</guid><pubDate>Sun, 19 Apr 2026 01:19:45 +0000</pubDate></item><item><title>[RFC] [Discussion] array_get and array_has functions</title><link>https://externals.io/message/130664</link><description>&lt;blockquote&gt;
&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Am 2026-04-14 19:06, schrieb Barel:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;I see the point that Tim made about the function names, I have &lt;br&gt;
updated &lt;br&gt;
them to array_get_path() and array_has_path()&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Similarly to Rob's tongue in cheek comment, I think I would also prefer &lt;br&gt;
having a common prefix for the functions, since this improves &lt;br&gt;
discoverability. While there are some inconsistencies in the array API &lt;br&gt;
due to its age, I think there is a reasonably similar precedent with the &lt;br&gt;
&lt;code&gt;array_key_*()&lt;/code&gt; functions. In fact looking at those, I wonder if the &lt;br&gt;
following pair of names would make sense for your proposed feature:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;array_path()&lt;/li&gt;
&lt;li&gt;array_path_exists()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From what I see, the functions in the array API don't mention “get” as &lt;br&gt;
the default operation, e.g. it's &lt;code&gt;array_first()&lt;/code&gt;, not &lt;br&gt;
&lt;code&gt;array_get_first()&lt;/code&gt;. And for “existence checks” there's the obvious &lt;br&gt;
precedent with &lt;code&gt;array_key_exists()&lt;/code&gt; which is also used in the example &lt;br&gt;
implementation in your RFC.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tim, thanks again for your comments. I did not like using &lt;code&gt;array_path._...&lt;/code&gt; &lt;br&gt;
because the function name reads less naturally, but I agree that it &lt;br&gt;
improves discoverability and is more in line with existing functions like &lt;br&gt;
&lt;code&gt;array_key_exists&lt;/code&gt;. Also agree that using &lt;code&gt;exists&lt;/code&gt; instead of &lt;code&gt;has&lt;/code&gt; is &lt;br&gt;
better. So I updated the function names to &lt;code&gt;array_path_get&lt;/code&gt; and &lt;br&gt;
&lt;code&gt;array_path_exists&lt;/code&gt;. I have preferred to keep &lt;code&gt;get&lt;/code&gt; in the function name &lt;br&gt;
because I think that &lt;code&gt;array_path&lt;/code&gt; is less clear about what the function &lt;br&gt;
does. RFC and implementation have been updated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Regarding the issue of returning the default if an intermediate &lt;br&gt;
segment &lt;br&gt;
is not an array, the philosophy of the function is: if the path exists, &lt;br&gt;
return the value, otherwise return the default. This cover uses cases &lt;br&gt;
like &lt;br&gt;
this: in yaml configuration many times you set a config option to ~ &lt;br&gt;
(null) &lt;br&gt;
and this many times indicates &amp;quot;use the default config&amp;quot;. So you may have &lt;br&gt;
something like:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;database: &lt;br&gt;
config: ~&lt;/p&gt;
&lt;p&gt;Indicating that you want to use the default database config. If you &lt;br&gt;
convert &lt;br&gt;
this yaml file to an array an use the array_get_path function to get a &lt;br&gt;
value, for example array_get_path($config, ['database', 'config', &lt;br&gt;
'port'], &lt;br&gt;
7766), you want to get 7766, not an exception or error. Tim points out &lt;br&gt;
that &lt;br&gt;
intermediate segments might be objects which implement ArrayAccess, but &lt;br&gt;
allowing this would complicate the code of the function a lot without &lt;br&gt;
much &lt;br&gt;
practical gain.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Perhaps the right solution is using “isset”-like semantics instead: &lt;br&gt;
&lt;code&gt;null&lt;/code&gt; is treated as an absent entry (it can be debated if an explicit &lt;br&gt;
&lt;code&gt;null&lt;/code&gt; at the end of the path should be treated as &lt;code&gt;null&lt;/code&gt; rather than &lt;br&gt;
the default), array allows the traversal to continue and everything else &lt;br&gt;
results in a clear error. This would then allow to extend support to &lt;br&gt;
anything ArrayAccess in the future without a compatibility break. &lt;br&gt;
Generally “throwing an error” is always a safe option.&lt;/p&gt;
&lt;p&gt;But saying that &lt;code&gt;array_get_path(['foo' =&amp;gt; '???'], ['foo', 'bar'], 'default');&lt;/code&gt; should result in &lt;code&gt;'default'&lt;/code&gt; doesn't make sense to me and - &lt;br&gt;
staying with the config example - might mask configuration errors:&lt;/p&gt;
&lt;p&gt;As an example, a user might accidentally configure a &amp;quot;DSN&amp;quot;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; database:
     connection: &amp;quot;&lt;a href="mysql://root@db.example.com" rel="nofollow" target="_blank"&gt;mysql://root@db.example.com&lt;/a&gt;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;when in reality the library expects separate components:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; database:
     connection:
         driver: mysql
         host: &lt;a href="http://db.example.com" rel="nofollow" target="_blank"&gt;db.example.com&lt;/a&gt;
         user: root
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now extracting the host with &lt;code&gt;array_get_path($config, ['database', 'connection', 'host'], 'localhost')&lt;/code&gt; would erroneously fall back to &lt;br&gt;
default values instead of reporting a clear error.&lt;/p&gt;
&lt;p&gt;I am still unconvinced about this. Your proposal seems to give the &lt;code&gt;null&lt;/code&gt; &lt;br&gt;
a special value and I think that in general the full semantics are less &lt;br&gt;
clear. And I don't really like the function throwing errors for paths, I &lt;br&gt;
think that this function is great for defensive access to values, where you &lt;br&gt;
can be sure that you don't need to be checking the path all the time. The &lt;br&gt;
existing implementations in Laravel and Lodash do not throw any error if an &lt;br&gt;
intermediate value is not an array (or object for Lodash) and instead &lt;br&gt;
return the default, so I think it is best to keep this behaviour&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;p&gt;Carlos&lt;/p&gt;
</description><guid>CABVsiph+=CeAkAL6XwzD57qDPt=24r8sh4HV32BOPmRFXfTqSw@mail.gmail.com</guid><pubDate>Sat, 18 Apr 2026 06:06:54 +0000</pubDate></item><item><title>[VOTE] RFC: Debugable Enums</title><link>https://externals.io/message/130663</link><description>&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;I forgot to do the needful yesterday, but the RFC passed! Final result was &lt;br&gt;
16 votes in favor, 2 votes against, and 5 abstentions.&lt;/p&gt;
&lt;p&gt;I'll land the implementation soon.&lt;/p&gt;
&lt;p&gt;-Daniel&lt;/p&gt;
&lt;p&gt;On Thu, Apr 2, 2026 at 10:01 AM Daniel Scherzer &lt;a href="mailto:daniel.e.scherzer@gmail.com"&gt;daniel.e.scherzer@gmail.com&lt;/a&gt; &lt;br&gt;
wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi internals,&lt;/p&gt;
&lt;p&gt;Voting is now open for this RFC.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RFC: &lt;a href="https://wiki.php.net/rfc/debugable-enums" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/debugable-enums&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Discussion thread: &lt;a href="https://news-web.php.net/php.internals/130303" rel="nofollow" target="_blank"&gt;https://news-web.php.net/php.internals/130303&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voting will end 2026-04-16 at end-of-day UTC.&lt;/p&gt;
&lt;p&gt;-Daniel&lt;/p&gt;
&lt;/blockquote&gt;
</description><guid>CALaXqqSjazPhWYpKMh-g35GmrV6NdCWsbK9RPhCiyQqmzB9H6w@mail.gmail.com</guid><pubDate>Sat, 18 Apr 2026 00:35:32 +0000</pubDate></item><item><title>[RFC proposal] Syntactic sugar for array push()</title><link>https://externals.io/message/130662</link><description>&lt;blockquote&gt;
&lt;p&gt;Can someone create 2 votes?:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[-] for array_pop&lt;/li&gt;
&lt;li&gt;[+] for array_push&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don't have an account and rights; and let the discussion have a practical &lt;br&gt;
outcome (whether with a positive or negative result)?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hi Dušan,&lt;/p&gt;
&lt;p&gt;Anyone is free to propose a change or feature, but before it goes to a vote, it has to be presented in a standard way, called an RFC. Writing that proposal is only a small amount of work, and we can help with parts you done understand, but it's unlikely that somebody will do it all for you.&lt;/p&gt;
&lt;p&gt;If you would be interested in following up this proposal, you can see the instructions for creating an RFC here: &lt;a href="https://wiki.php.net/rfc/howto" rel="nofollow" target="_blank"&gt;https://wiki.php.net/rfc/howto&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Rowan Tommins &lt;br&gt;
[IMSoP]&lt;/p&gt;
</description><guid>9CE0483E-86CE-478E-8881-97EDCA8AB0A1@rwec.co.uk</guid><pubDate>Fri, 17 Apr 2026 09:11:57 +0000</pubDate></item></channel></rss>
